diff --git a/extensions/extrawindow.cpp b/extensions/extrawindow.cpp index 0d3fd79..5a26a2c 100644 --- a/extensions/extrawindow.cpp +++ b/extensions/extrawindow.cpp @@ -165,7 +165,7 @@ private: dictionaryWindow.UpdateDictionary(); if (dictionaryWindow.dictionary.empty()) { - std::ofstream(DICTIONARY_SAVE_FILE) << DICTIONARY_INSTRUCTIONS; + std::ofstream(DICTIONARY_SAVE_FILE) << u8"\ufeff" << DICTIONARY_INSTRUCTIONS; _spawnlp(_P_DETACH, "notepad", "notepad", DICTIONARY_SAVE_FILE, NULL); // show file to user } } diff --git a/extensions/replacer.cpp b/extensions/replacer.cpp index badd7be..f8d968c 100644 --- a/extensions/replacer.cpp +++ b/extensions/replacer.cpp @@ -113,7 +113,8 @@ BOOL WINAPI DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved UpdateReplacements(); if (trie.Empty()) { - std::ofstream(REPLACE_SAVE_FILE, std::ios::binary).write((char*)REPLACER_INSTRUCTIONS, wcslen(REPLACER_INSTRUCTIONS) * sizeof(wchar_t)); + auto file = std::ofstream(REPLACE_SAVE_FILE, std::ios::binary) << "\xff\xfe"; + for (auto ch : std::wstring_view(REPLACER_INSTRUCTIONS)) file << (ch == L'\n' ? std::string_view("\r\0\n", 4) : std::string_view((char*)&ch, 2)); _spawnlp(_P_DETACH, "notepad", "notepad", REPLACE_SAVE_FILE, NULL); // show file to user } } diff --git a/text.cpp b/text.cpp index e261643..5d8f2f5 100644 --- a/text.cpp +++ b/text.cpp @@ -1,6 +1,4 @@ -#include "defs.h" - -#ifdef _WIN64 +#ifdef _WIN64 #define ARCH "x64" #else #define ARCH "x86" @@ -121,13 +119,13 @@ Click and drag on window edges to move, or the bottom right corner to resize)"; const char* TOPMOST = u8"Always on top"; const char* DICTIONARY = u8"Dictionary"; const char* DICTIONARY_INSTRUCTIONS = u8R"(This file is used only for the "Dictionary" feature of the Extra Window extension. -It is not meant to be written manually (though it can be). +It uses a custom format specific to Textractor and is not meant to be written manually. You should look for a dictionary in this format online (https://artikash.github.io/?dictionary is a good place to start). Alternatively, if you're a programmer, you can write a script to convert a dictionary from another format with the info below. Once you have a dictionary, to look up some text in Extra Window, select it. All matching definitions will be shown. Definitions are formatted like this:|TERM|Hola|TERM|hola|TERM|Bonjour|TERM|bonjour|DEFINITION|hello|END| The definition can include rich text (https://doc.qt.io/qt-5/richtext-html-subset.html) which will be formatted properly. -All text in this file outside of definitions is ignored. +All text in this file outside of a definition is ignored. Terms longer than 50 characters may not be shown (for performance reasons that should be fixed soon). This file must be encoded in UTF-8.)"; const char* SHOW_ORIGINAL = u8"Original text"; @@ -170,7 +168,7 @@ Replacement commands must be formatted like this: |ORIG|original_text|BECOMES|replacement_text|END| All text in this file outside of a replacement command is ignored. Whitespace in original_text is ignored, but replacement_text can contain spaces, newlines, etc. -This file must be encoded in Unicode (UTF-16 little endian).)"; +This file must be encoded in Unicode (UTF-16 Little Endian).)"; const char* THREAD_LINKER = u8"Thread Linker"; const char* LINK = u8"Link"; const char* THREAD_LINK_FROM = u8"Thread number to link from";