diff --git a/ExampleExtension/ExampleExtension.vcxproj b/ExampleExtension/ExampleExtension.vcxproj
index 531f7c9..009f0c8 100644
--- a/ExampleExtension/ExampleExtension.vcxproj
+++ b/ExampleExtension/ExampleExtension.vcxproj
@@ -151,6 +151,7 @@
+
diff --git a/ExampleExtension/ExampleExtension.vcxproj.filters b/ExampleExtension/ExampleExtension.vcxproj.filters
index d0efc35..1bf6184 100644
--- a/ExampleExtension/ExampleExtension.vcxproj.filters
+++ b/ExampleExtension/ExampleExtension.vcxproj.filters
@@ -14,6 +14,9 @@
Source Files
+
+ Source Files
+
diff --git a/ExampleExtension/Extension.cpp b/ExampleExtension/Extension.cpp
index 1acc132..4d48adf 100644
--- a/ExampleExtension/Extension.cpp
+++ b/ExampleExtension/Extension.cpp
@@ -19,13 +19,14 @@ BOOL WINAPI DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved
/**
* Param sentence: sentence received by Textractor (UTF-16).
- * Param sentenceInfo: contains miscellaneous info about the sentence. See README.md
+ * Param sentenceInfo: contains miscellaneous info about the sentence (see README).
* Return value: whether the sentence was modified.
* Textractor will display the sentence after all extensions have had a chance to process and/or modify it.
* THIS FUNCTION MAY BE RUN SEVERAL TIMES CONCURRENTLY: PLEASE ENSURE THAT IT IS THREAD SAFE!
*/
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"] == 1)
diff --git a/ExampleExtension/Extension.h b/ExampleExtension/Extension.h
index 471f767..2149469 100644
--- a/ExampleExtension/Extension.h
+++ b/ExampleExtension/Extension.h
@@ -19,32 +19,9 @@ struct SentenceInfo
int64_t operator[](std::string propertyName)
{
for (auto i = list; i != nullptr; i = i->next) if (propertyName == i->name) return i->value;
- return 0;
+ throw;
}
};
-bool ProcessSentence(std::wstring& sentence, SentenceInfo sentenceInfo);
-
-/**
- * You shouldn't mess with this or even look at it unless you're certain you know what you're doing.
- * Param sentence: pointer to sentence received by Textractor (UTF-16).
- * You should not modify this sentence. If you want Textractor to receive a modified sentence, copy it into your own buffer and return that.
- * Please allocate the buffer using malloc() and not new[] or something else: Textractor uses free() to free it.
- * Param miscInfo: pointer to start of singly linked list containing misc info about the sentence.
- * Return value: pointer to sentence Textractor takes for future processing and display.
- * Return 'sentence' unless you created a new sentence/buffer as mentioned above.
- * Textractor will display the sentence after all extensions have had a chance to process and/or modify it.
- * THIS FUNCTION MAY BE RUN SEVERAL TIMES CONCURRENTLY: PLEASE ENSURE THAT IT IS THREAD SAFE!
-*/
-extern "C" __declspec(dllexport) const wchar_t* OnNewSentence(const wchar_t* sentenceArr, const InfoForExtension* miscInfo)
-{
- std::wstring sentence(sentenceArr);
- if (ProcessSentence(sentence, SentenceInfo{ miscInfo }))
- {
- // No need to worry about freeing this: Textractor does it for you.
- wchar_t* newSentence = (wchar_t*)malloc((sentence.size() + 1) * sizeof(wchar_t*));
- wcscpy_s(newSentence, sentence.size() + 1, sentence.c_str());
- return newSentence;
- }
- else return sentenceArr;
-}
+struct SKIP {};
+inline void Skip() { throw SKIP(); }
diff --git a/ExampleExtension/ExtensionImpl.cpp b/ExampleExtension/ExtensionImpl.cpp
new file mode 100644
index 0000000..794d91b
--- /dev/null
+++ b/ExampleExtension/ExtensionImpl.cpp
@@ -0,0 +1,31 @@
+#include "extension.h"
+
+bool ProcessSentence(std::wstring& sentence, SentenceInfo sentenceInfo);
+
+/**
+ * You shouldn't mess with this or even look at it unless you're certain you know what you're doing.
+ * Param sentence: pointer to sentence received by Textractor (UTF-16).
+ * You should not modify this sentence. If you want Textractor to receive a modified sentence, copy it into your own buffer and return that.
+ * Please allocate the buffer using HeapAlloc() and not new[] or malloc() or something else: Textractor uses HeapFree() to free it.
+ * Param miscInfo: pointer to start of singly linked list containing misc info about the sentence.
+ * Return value: pointer to sentence Textractor takes for future processing and display. If nullptr, Textractor will destroy the sentence.
+ * Return 'sentence' unless you created a new sentence/buffer as mentioned above.
+ * Textractor will display the sentence after all extensions have had a chance to process and/or modify it.
+ * THIS FUNCTION MAY BE RUN SEVERAL TIMES CONCURRENTLY: PLEASE ENSURE THAT IT IS THREAD SAFE!
+*/
+extern "C" __declspec(dllexport) const wchar_t* OnNewSentence(const wchar_t* sentence, const InfoForExtension* miscInfo)
+{
+ try
+ {
+ std::wstring sentenceStr(sentence);
+ if (ProcessSentence(sentenceStr, SentenceInfo{ miscInfo }))
+ {
+ // No need to worry about freeing this: Textractor does it for you.
+ wchar_t* newSentence = (wchar_t*)HeapAlloc(GetProcessHeap(), 0, (sentenceStr.size() + 1) * sizeof(wchar_t));
+ wcscpy_s(newSentence, sentenceStr.size() + 1, sentenceStr.c_str());
+ return newSentence;
+ }
+ else return sentence;
+ }
+ catch (SKIP) { return nullptr; }
+}