Skip to content

Commit

Permalink
1、将传入底层的路径编码由CP_ACP改成CP_UTF8以支持中文方案文件名
Browse files Browse the repository at this point in the history
  • Loading branch information
Techince committed Feb 7, 2024
1 parent e3ef215 commit b7c7a53
Show file tree
Hide file tree
Showing 33 changed files with 1,269 additions and 377 deletions.
20 changes: 8 additions & 12 deletions RimeWithWeasel/RimeWithWeasel.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -85,21 +85,19 @@ void _RefreshTrayIcon(const RimeSessionId session_id, const std::function<void()

void RimeWithWeaselHandler::_Setup()
{
auto log_dir{ fs::path(std::format(R"({}\logs)", weasel_user_data_dir())) };
if (!fs::exists(log_dir))
{
fs::create_directories(log_dir);
}
RIME_STRUCT(RimeTraits, weasel_traits);
weasel_traits.shared_data_dir = weasel_shared_data_dir();
weasel_traits.user_data_dir = weasel_user_data_dir();
auto shared_dir{ weasel_shared_data_dir() };
auto user_dir{ weasel_user_data_dir() };
auto log_dir{ weasel_log_dir() };
weasel_traits.shared_data_dir = shared_dir.data();
weasel_traits.user_data_dir = user_dir.data();
weasel_traits.prebuilt_data_dir = weasel_traits.shared_data_dir;
std::string distribution_name{ to_string(WEASEL_IME_NAME, CP_UTF8) };
weasel_traits.distribution_name = distribution_name.data();
weasel_traits.distribution_code_name = WEASEL_CODE_NAME;
weasel_traits.distribution_version = WEASEL_VERSION;
weasel_traits.app_name = "rime.weasel";
weasel_traits.log_dir = log_dir.string().data();
weasel_traits.log_dir = log_dir.data();
RimeSetup(&weasel_traits);
RimeSetNotificationHandler(&RimeWithWeaselHandler::OnNotify, this);
}
Expand Down Expand Up @@ -801,8 +799,7 @@ bool RimeWithWeaselHandler::_Respond(RimeSessionId session_id, EatLine eat)
messages.emplace_back(std::format("status.disabled={}\n", status.is_disabled));
messages.emplace_back(std::format("status.full_shape={}\n", status.is_full_shape));
messages.emplace_back(std::format("status.ascii_punct={}\n", status.is_ascii_punct));
messages.emplace_back(std::format("status.s2t={}\n", status.is_s2t));
messages.emplace_back(std::format("status.prediction={}\n", status.is_prediction));
messages.emplace_back(std::format("status.prediction={}\n", status.is_predictable));
messages.emplace_back(std::format("status.schema_id={}\n", status.schema_id));
if (m_global_ascii_mode && (session_status.status.is_ascii_mode != status.is_ascii_mode))
{
Expand Down Expand Up @@ -1366,8 +1363,7 @@ void RimeWithWeaselHandler::_GetStatus(weasel::Status& stat, RimeSessionId sessi
stat.disabled = !!status.is_disabled;
stat.full_shape = !!status.is_full_shape;
stat.ascii_punct = !!status.is_ascii_punct;
stat.s2t = !!status.is_s2t;
stat.prediction = !!status.is_prediction;
stat.prediction = !!status.is_predictable;
if (schema_id != m_last_schema_id)
{
m_last_schema_id = schema_id;
Expand Down
68 changes: 0 additions & 68 deletions RimeWithWeasel/WeaselUtility.cpp

This file was deleted.

14 changes: 6 additions & 8 deletions WeaselDeployer/Configurator.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -26,14 +26,12 @@ Configurator::Configurator()

void Configurator::Initialize()
{
auto log_dir{ fs::path(std::format(R"({}\logs)", weasel_user_data_dir())) };
if (!fs::exists(log_dir))
{
fs::create_directories(log_dir);
}
RIME_STRUCT(RimeTraits, weasel_traits);
weasel_traits.shared_data_dir = weasel_shared_data_dir();
weasel_traits.user_data_dir = weasel_user_data_dir();
auto shared_dir{ weasel_shared_data_dir() };
auto user_dir{ weasel_user_data_dir() };
auto log_dir{ weasel_log_dir() };
weasel_traits.shared_data_dir = shared_dir.data();
weasel_traits.user_data_dir = user_dir.data();
weasel_traits.prebuilt_data_dir = weasel_traits.shared_data_dir;
const int len = 20;
char utf8_str[len];
Expand All @@ -43,7 +41,7 @@ void Configurator::Initialize()
weasel_traits.distribution_code_name = WEASEL_CODE_NAME;
weasel_traits.distribution_version = WEASEL_VERSION;
weasel_traits.app_name = "rime.weasel";
weasel_traits.log_dir = log_dir.string().data();
weasel_traits.log_dir = log_dir.data();
RimeSetup(&weasel_traits);

LOG(INFO) << "WeaselDeployer reporting.";
Expand Down
1 change: 0 additions & 1 deletion WeaselDeployer/WeaselDeployer.vcxproj
Original file line number Diff line number Diff line change
Expand Up @@ -190,7 +190,6 @@
<ClInclude Include="WeaselDeployer.h" />
</ItemGroup>
<ItemGroup>
<ClCompile Include="..\RimeWithWeasel\WeaselUtility.cpp" />
<ClCompile Include="Configurator.cpp" />
<ClCompile Include="Configurator.ixx" />
<ClCompile Include="ConfiguratorDialog.cpp" />
Expand Down
3 changes: 0 additions & 3 deletions WeaselDeployer/WeaselDeployer.vcxproj.filters
Original file line number Diff line number Diff line change
Expand Up @@ -69,9 +69,6 @@
<ClCompile Include="DictManagementDialog.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\RimeWithWeasel\WeaselUtility.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="ConfiguratorDialog.cpp">
<Filter>Source Files</Filter>
</ClCompile>
Expand Down
6 changes: 0 additions & 6 deletions WeaselIPC/ContextUpdater.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -149,12 +149,6 @@ void StatusUpdater::Store(const Deserializer::KeyType& k, std::wstring const& va
return;
}

if (k[1] == L"s2t")
{
m_pTarget->p_status->s2t = bool_value;
return;
}

if (k[1] == L"prediction")
{
m_pTarget->p_status->prediction = bool_value;
Expand Down
6 changes: 3 additions & 3 deletions WeaselSetup/InstallOptionsDialog.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ LRESULT InstallOptionsDialog::OnInitDialog(UINT, WPARAM, LPARAM, BOOL&) {

GetDlgItem(IDC_BROWSER).EnableWindow(((CButton)GetDlgItem(IDC_RADIO_DEFAULT_DIR)).GetCheck() ? FALSE : TRUE);

GetDlgItem(IDOK).SetWindowTextW(installed ? L"更改" : L"安装");
GetDlgItem(IDOK).SetWindowTextW(installed ? L"更改" : L"安装");

CenterWindow();
return 0;
Expand Down Expand Up @@ -81,7 +81,7 @@ LRESULT InstallOptionsDialog::OnRemove(WORD, WORD code, HWND, BOOL&) {
cn_.EnableWindow(!installed);
tw_.EnableWindow(!installed);
remove_.EnableWindow(installed);
GetDlgItem(IDOK).SetWindowTextW(L"安装");
GetDlgItem(IDOK).SetWindowTextW(L"安装");
return 0;
}

Expand All @@ -108,7 +108,7 @@ LRESULT InstallOptionsDialog::OnBrowser(WORD, WORD code, HWND, BOOL&)
CShellFileOpenDialog shellFileOpenDialog{ nullptr, FOS_FORCEFILESYSTEM | FOS_PATHMUSTEXIST | FOS_PICKFOLDERS};
if (SUCCEEDED(hr))
shellFileOpenDialog.GetPtr()->SetFolder(shellItem);
shellFileOpenDialog.GetPtr()->SetTitle(L"自定义小狼毫用户词库目录");
shellFileOpenDialog.GetPtr()->SetTitle(L"自定义小狼毫用户词库目录");
shellFileOpenDialog.DoModal(m_hWnd);

hr = shellFileOpenDialog.GetFilePath(cur_dir.data(), cur_dir.capacity());
Expand Down
6 changes: 3 additions & 3 deletions WeaselTSF/Composition.ixx
Original file line number Diff line number Diff line change
Expand Up @@ -160,15 +160,15 @@ STDAPI CStartCompositionEditSession::DoEditSession(TfEditCookie ec)
STDAPI CEndCompositionEditSession::DoEditSession(TfEditCookie ec)
{
/* Clear the dummy text we set before, if any. */
if (_pComposition == nullptr) return S_OK;
if (_pComposition == nullptr) return S_OK;

if (_pTextService->GetBit(WeaselFlag::SUPPORT_DISPLAY_ATTRIBUTE))
{
_pTextService->_ClearCompositionDisplayAttributes(ec, _pContext);
}

com_ptr<ITfRange> pCompositionRange;
if (_clear && _pComposition->GetRange(&pCompositionRange) == S_OK)
if (_clear && SUCCEEDED(_pComposition->GetRange(&pCompositionRange)))
{
pCompositionRange->SetText(ec, 0, L"", 0);
}
Expand Down Expand Up @@ -254,7 +254,7 @@ STDAPI CInlinePreeditEditSession::DoEditSession(TfEditCookie ec)
{
std::wstring preedit = _context->preedit.str;

com_ptr<ITfRange> pRangeComposition;
com_ptr<ITfRange> pRangeComposition;
if ((_pComposition->GetRange(&pRangeComposition)) != S_OK)
return E_FAIL;

Expand Down
72 changes: 28 additions & 44 deletions WeaselTSF/EditSession.cpp
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
module;
module;
#include "stdafx.h"
#include <WeaselCommon.h>
#include "test.h"
Expand All @@ -23,63 +23,47 @@ STDAPI WeaselTSF::DoEditSession(TfEditCookie ec)
bool ok = m_client.GetResponseData(std::ref(parser));
auto state = _UpdateLanguageBar();

if (GetBit(WeaselFlag::ASYNC_DIGIT_PUNCT_EATEN)) // Word 2021进入异步编辑时,遇到标点符号输入时,必须进入合成,否则句点输入就失去了数字后的智能判断
if (GetBit(WeaselFlag::ASYNC_DIGIT_PUNCT_EATEN)) // Word 2021进入异步编辑时,遇到标点符号输入时,必须进入合成,否则句点输入就失去了数字后的智能判断
{
_StartComposition(_pEditSessionContext, !config.inline_preedit);
_EndComposition(_pEditSessionContext, false);
ResetBit(WeaselFlag::ASYNC_DIGIT_PUNCT_EATEN);
}
if (ok)
{
if (state && !_IsComposing()) // 执行算法服务内的UI状态更新,为它提供正确的坐标
m_hasPreedit = !context->preedit.empty();
m_preeditCount = context->preedit.str.size();
if (!commit.empty())
{
_StartComposition(_pEditSessionContext, !config.inline_preedit);
if (GetBit(WeaselFlag::CARET_FOLLOWING))
{
_UpdateCompositionWindow(_pEditSessionContext);
}
else
// For auto-selecting, commit and preedit can both exist.
// Commit and close the original composition first.
if (!_IsComposing())
{
_SetCompositionPosition(m_rcFallback);
_StartComposition(_pEditSessionContext, !config.inline_preedit);
}
_InsertText(_pEditSessionContext, commit);
_EndComposition(_pEditSessionContext, false);
}
if (_status.composing && !_IsComposing())
{
_StartComposition(_pEditSessionContext, !config.inline_preedit);
}
else if (!_status.composing && _IsComposing())
{
_EndComposition(_pEditSessionContext, true);
}
if (_IsComposing() && (config.inline_preedit || GetBit(WeaselFlag::GAME_MODE)))
{
_ShowInlinePreedit(_pEditSessionContext, context);
SetBit(WeaselFlag::INLINE_PREEDIT);
}
if (GetBit(WeaselFlag::CARET_FOLLOWING))
{
_UpdateCompositionWindow(_pEditSessionContext);
}
else
{
m_hasPreedit = !context->preedit.empty();
m_preeditCount = context->preedit.str.size();
if (!commit.empty())
{
// For auto-selecting, commit and preedit can both exist.
// Commit and close the original composition first.
if (!_IsComposing())
{
_StartComposition(_pEditSessionContext, !config.inline_preedit);
}
_InsertText(_pEditSessionContext, commit);
_EndComposition(_pEditSessionContext, false);
}
if (_status.composing && !_IsComposing())
{
_StartComposition(_pEditSessionContext, !config.inline_preedit);
}
else if (!_status.composing && _IsComposing())
{
_EndComposition(_pEditSessionContext, true);
}
if (_IsComposing() && (config.inline_preedit || GetBit(WeaselFlag::GAME_MODE)))
{
_ShowInlinePreedit(_pEditSessionContext, context);
SetBit(WeaselFlag::INLINE_PREEDIT);
}
if (GetBit(WeaselFlag::CARET_FOLLOWING))
{
_UpdateCompositionWindow(_pEditSessionContext);
}
else
{
_SetCompositionPosition(m_rcFallback);
}
_SetCompositionPosition(m_rcFallback);
}
}
_UpdateUI(*context, _status);
Expand Down
16 changes: 0 additions & 16 deletions WeaselTSF/LanguageBar.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -287,22 +287,6 @@ void CLangBarItemButton::RightClick(POINT& pt)
CheckMenuItem(firstPopupMenu, ID_WEASELTRAY_DAEMON_ENABLE,
MF_BYCOMMAND | (_textService.GetBit(WeaselFlag::DAEMON_ENABLE) ? MF_CHECKED : MF_UNCHECKED));

std::wstring temp(16, 0);
MENUITEMINFO mii;
mii.cbSize = sizeof(MENUITEMINFO);
mii.fMask = MIIM_FTYPE | MIIM_ID | MIIM_STRING | MIIM_SUBMENU | MIIM_CHECKMARKS;
mii.dwTypeData = temp.data();
mii.cch = temp.capacity();
// 2级弹出菜单
if (GetMenuItemInfo(firstPopupMenu, 0, TRUE, &mii))
{
temp = temp.data();
temp[4] = _textService.GetBit(WeaselFlag::FULL_SHAPE) ? L'' : L'';
ModifyMenu(mii.hSubMenu, _textService.GetBit(WeaselFlag::FULL_SHAPE) ? 1 : 0,
MF_BYPOSITION | MF_CHECKED, 0, _textService.GetBit(WeaselFlag::FULL_SHAPE) ? L"全角" : L"半角");
}
SetMenuItemInfo(firstPopupMenu, 0, true, &mii);

CheckMenuItem(firstPopupMenu, ID_STYLE_CARET_FOLLOWING,
MF_BYCOMMAND | (_textService.GetBit(WeaselFlag::CARET_FOLLOWING) ? MF_CHECKED : MF_UNCHECKED));

Expand Down
Loading

0 comments on commit b7c7a53

Please sign in to comment.