up
This commit is contained in:
parent
d6791e949c
commit
57b5b04163
@ -24,31 +24,32 @@
|
|||||||
<Keyword>Win32Proj</Keyword>
|
<Keyword>Win32Proj</Keyword>
|
||||||
<RootNamespace>ExampleExtension</RootNamespace>
|
<RootNamespace>ExampleExtension</RootNamespace>
|
||||||
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
|
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
|
||||||
|
<ProjectName>LocalMtExtension</ProjectName>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||||
<UseDebugLibraries>true</UseDebugLibraries>
|
<UseDebugLibraries>true</UseDebugLibraries>
|
||||||
<PlatformToolset>v141</PlatformToolset>
|
<PlatformToolset>v143</PlatformToolset>
|
||||||
<CharacterSet>Unicode</CharacterSet>
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||||
<UseDebugLibraries>false</UseDebugLibraries>
|
<UseDebugLibraries>false</UseDebugLibraries>
|
||||||
<PlatformToolset>v141</PlatformToolset>
|
<PlatformToolset>v143</PlatformToolset>
|
||||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
<CharacterSet>Unicode</CharacterSet>
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
||||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||||
<UseDebugLibraries>true</UseDebugLibraries>
|
<UseDebugLibraries>true</UseDebugLibraries>
|
||||||
<PlatformToolset>v141</PlatformToolset>
|
<PlatformToolset>v143</PlatformToolset>
|
||||||
<CharacterSet>Unicode</CharacterSet>
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
||||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||||
<UseDebugLibraries>false</UseDebugLibraries>
|
<UseDebugLibraries>false</UseDebugLibraries>
|
||||||
<PlatformToolset>v141</PlatformToolset>
|
<PlatformToolset>v143</PlatformToolset>
|
||||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
<CharacterSet>Unicode</CharacterSet>
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
@ -29,26 +29,26 @@
|
|||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||||
<UseDebugLibraries>true</UseDebugLibraries>
|
<UseDebugLibraries>true</UseDebugLibraries>
|
||||||
<PlatformToolset>v141</PlatformToolset>
|
<PlatformToolset>v143</PlatformToolset>
|
||||||
<CharacterSet>Unicode</CharacterSet>
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||||
<UseDebugLibraries>false</UseDebugLibraries>
|
<UseDebugLibraries>false</UseDebugLibraries>
|
||||||
<PlatformToolset>v141</PlatformToolset>
|
<PlatformToolset>v143</PlatformToolset>
|
||||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
<CharacterSet>Unicode</CharacterSet>
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
||||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||||
<UseDebugLibraries>true</UseDebugLibraries>
|
<UseDebugLibraries>true</UseDebugLibraries>
|
||||||
<PlatformToolset>v141</PlatformToolset>
|
<PlatformToolset>v143</PlatformToolset>
|
||||||
<CharacterSet>Unicode</CharacterSet>
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
||||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||||
<UseDebugLibraries>false</UseDebugLibraries>
|
<UseDebugLibraries>false</UseDebugLibraries>
|
||||||
<PlatformToolset>v141</PlatformToolset>
|
<PlatformToolset>v143</PlatformToolset>
|
||||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
<CharacterSet>Unicode</CharacterSet>
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
@ -28,25 +28,26 @@ BOOL WINAPI DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved
|
|||||||
*/
|
*/
|
||||||
bool ProcessSentence(std::wstring& sentence, SentenceInfo sentenceInfo)
|
bool ProcessSentence(std::wstring& sentence, SentenceInfo sentenceInfo)
|
||||||
{
|
{
|
||||||
// Your code here...
|
|
||||||
#ifdef COPY_CLIPBOARD
|
|
||||||
// This example extension automatically copies sentences from the hook currently selected by the user into the clipboard.
|
|
||||||
if (sentenceInfo["current select"])
|
|
||||||
{
|
|
||||||
HGLOBAL hMem = GlobalAlloc(GMEM_MOVEABLE, (sentence.size() + 2) * sizeof(wchar_t));
|
|
||||||
memcpy(GlobalLock(hMem), sentence.c_str(), (sentence.size() + 2) * sizeof(wchar_t));
|
|
||||||
GlobalUnlock(hMem);
|
|
||||||
OpenClipboard(0);
|
|
||||||
EmptyClipboard();
|
|
||||||
SetClipboardData(CF_UNICODETEXT, hMem);
|
|
||||||
CloseClipboard();
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
#endif // COPY_CLIPBOARD
|
|
||||||
|
|
||||||
#ifdef EXTRA_NEWLINES
|
|
||||||
// This example extension adds extra newlines to all sentences.
|
|
||||||
sentence += L"\r\n";
|
|
||||||
return true;
|
return true;
|
||||||
#endif // EXTRA_NEWLINES
|
// // Your code here...
|
||||||
|
//#ifdef COPY_CLIPBOARD
|
||||||
|
// // This example extension automatically copies sentences from the hook currently selected by the user into the clipboard.
|
||||||
|
// if (sentenceInfo["current select"])
|
||||||
|
// {
|
||||||
|
// HGLOBAL hMem = GlobalAlloc(GMEM_MOVEABLE, (sentence.size() + 2) * sizeof(wchar_t));
|
||||||
|
// memcpy(GlobalLock(hMem), sentence.c_str(), (sentence.size() + 2) * sizeof(wchar_t));
|
||||||
|
// GlobalUnlock(hMem);
|
||||||
|
// OpenClipboard(0);
|
||||||
|
// EmptyClipboard();
|
||||||
|
// SetClipboardData(CF_UNICODETEXT, hMem);
|
||||||
|
// CloseClipboard();
|
||||||
|
// }
|
||||||
|
// return false;
|
||||||
|
//#endif // COPY_CLIPBOARD
|
||||||
|
//
|
||||||
|
//#ifdef EXTRA_NEWLINES
|
||||||
|
// // This example extension adds extra newlines to all sentences.
|
||||||
|
// sentence += L"\r\n";
|
||||||
|
// return true;
|
||||||
|
//#endif // EXTRA_NEWLINES
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,9 @@
|
|||||||
#include "extension.h"
|
#include "extension.h"
|
||||||
|
#include "httplib.h"
|
||||||
|
#include <json/json.h>
|
||||||
|
#include <locale>
|
||||||
|
#include <codecvt>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
bool ProcessSentence(std::wstring& sentence, SentenceInfo sentenceInfo);
|
bool ProcessSentence(std::wstring& sentence, SentenceInfo sentenceInfo);
|
||||||
|
|
||||||
@ -13,16 +18,56 @@ bool ProcessSentence(std::wstring& sentence, SentenceInfo sentenceInfo);
|
|||||||
This function may be run concurrently with itself: please make sure it's thread safe.
|
This function may be run concurrently with itself: please make sure it's thread safe.
|
||||||
It will not be run concurrently with DllMain.
|
It will not be run concurrently with DllMain.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
std::string WideStringToString(const std::wstring& text)
|
||||||
|
{
|
||||||
|
std::vector<char> buffer((text.size() + 1) * 4);
|
||||||
|
WideCharToMultiByte(CP_UTF8, 0, text.c_str(), -1, buffer.data(), buffer.size(), nullptr, nullptr);
|
||||||
|
return buffer.data();
|
||||||
|
}
|
||||||
|
|
||||||
extern "C" __declspec(dllexport) wchar_t* OnNewSentence(wchar_t* sentence, const InfoForExtension* sentenceInfo)
|
extern "C" __declspec(dllexport) wchar_t* OnNewSentence(wchar_t* sentence, const InfoForExtension* sentenceInfo)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
std::wstring sentenceCopy(sentence);
|
std::wstring sentenceCopy(sentence);
|
||||||
int oldSize = sentenceCopy.size();
|
size_t oldSize = sentenceCopy.size();
|
||||||
if (ProcessSentence(sentenceCopy, SentenceInfo{ sentenceInfo }))
|
if (ProcessSentence(sentenceCopy, SentenceInfo{ sentenceInfo }))
|
||||||
{
|
{
|
||||||
if (sentenceCopy.size() > oldSize) sentence = (wchar_t*)HeapReAlloc(GetProcessHeap(), HEAP_GENERATE_EXCEPTIONS, sentence, (sentenceCopy.size() + 1) * sizeof(wchar_t));
|
Json::Value data;
|
||||||
wcscpy_s(sentence, sentenceCopy.size() + 1, sentenceCopy.c_str());
|
data["model"] = "qwen2:1.5b";
|
||||||
|
data["prompt"] = "Please translate the following content into Chinese! (Return to Chinese translation directly): " + WideStringToString(sentence);
|
||||||
|
data["stream"] = false;
|
||||||
|
|
||||||
|
Json::StreamWriterBuilder writer;
|
||||||
|
std::string json_data = Json::writeString(writer, data);
|
||||||
|
|
||||||
|
httplib::Client cli("http://localhost:11434");
|
||||||
|
auto res = cli.Post("/api/generate", json_data, "application/json");
|
||||||
|
|
||||||
|
if (res && res->status == 200)
|
||||||
|
{
|
||||||
|
Json::CharReaderBuilder reader;
|
||||||
|
Json::Value json_response;
|
||||||
|
std::istringstream s(res->body);
|
||||||
|
std::string errs;
|
||||||
|
if (Json::parseFromStream(reader, s, &json_response, &errs))
|
||||||
|
{
|
||||||
|
std::string translated_text = json_response["response"].asString();
|
||||||
|
|
||||||
|
std::wstring translated_sentence = std::wstring_convert<std::codecvt_utf8<wchar_t>>().from_bytes(translated_text);
|
||||||
|
|
||||||
|
if (translated_sentence.size() > oldSize)
|
||||||
|
{
|
||||||
|
sentence = (wchar_t*)HeapReAlloc(GetProcessHeap(), HEAP_GENERATE_EXCEPTIONS, sentence, (translated_sentence.size() + 1) * sizeof(wchar_t));
|
||||||
|
}
|
||||||
|
wcscpy_s(sentence, translated_sentence.size() + 1, translated_sentence.c_str());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
*sentence = L'\0';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (SKIP)
|
catch (SKIP)
|
||||||
@ -31,3 +76,5 @@ extern "C" __declspec(dllexport) wchar_t* OnNewSentence(wchar_t* sentence, const
|
|||||||
}
|
}
|
||||||
return sentence;
|
return sentence;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user