Browse Source

fixed Chinese support for ios

pull/9/head
Khoren Markosyan 2 years ago
parent
commit
58ebd29725
  1. 30
      ios/Classes/src/common.cpp
  2. 5
      ios/Classes/src/common.h
  3. 49
      ios/Classes/src/native_zxing.cpp
  4. 8
      ios/Classes/src/native_zxing.h

30
ios/Classes/src/common.cpp

@ -5,6 +5,13 @@
using namespace std; using namespace std;
bool isLogEnabled;
void setLoggingEnabled(bool enabled)
{
isLogEnabled = enabled;
}
long long int get_now() long long int get_now()
{ {
return chrono::duration_cast<std::chrono::milliseconds>( return chrono::duration_cast<std::chrono::milliseconds>(
@ -14,18 +21,21 @@ long long int get_now()
void platform_log(const char *fmt, ...) void platform_log(const char *fmt, ...)
{ {
va_list args; if (isLogEnabled)
va_start(args, fmt); {
va_list args;
va_start(args, fmt);
#ifdef __ANDROID__ #ifdef __ANDROID__
__android_log_vprint(ANDROID_LOG_VERBOSE, "ndk", fmt, args); __android_log_vprint(ANDROID_LOG_VERBOSE, "ndk", fmt, args);
#elif defined(IS_WIN32) #elif defined(IS_WIN32)
char *buf = new char[4096]; char *buf = new char[4096];
std::fill_n(buf, 4096, '\0'); std::fill_n(buf, 4096, '\0');
_vsprintf_p(buf, 4096, fmt, args); _vsprintf_p(buf, 4096, fmt, args);
OutputDebugStringA(buf); OutputDebugStringA(buf);
delete[] buf; delete[] buf;
#else #else
vprintf(fmt, args); vprintf(fmt, args);
#endif #endif
va_end(args); va_end(args);
}
} }

5
ios/Classes/src/common.h

@ -19,7 +19,8 @@
#define FUNCTION_ATTRIBUTE __declspec(dllexport) #define FUNCTION_ATTRIBUTE __declspec(dllexport)
#endif #endif
long long int get_now(); long long int get_now();
void platform_log(const char *fmt, ...); void platform_log(const char *fmt, ...);
void setLoggingEnabled(bool enabled);

49
ios/Classes/src/native_zxing.cpp

@ -5,16 +5,18 @@
#include "BitMatrix.h" #include "BitMatrix.h"
#include "native_zxing.h" #include "native_zxing.h"
#include <locale>
#include <codecvt>
#include <stdarg.h>
using namespace ZXing; using namespace ZXing;
extern "C" extern "C"
{ {
bool logEnabled = false;
FUNCTION_ATTRIBUTE FUNCTION_ATTRIBUTE
void setLogEnabled(int enabled) void setLogEnabled(int enabled)
{ {
logEnabled = enabled; setLoggingEnabled(enabled);
} }
FUNCTION_ATTRIBUTE FUNCTION_ATTRIBUTE
@ -48,18 +50,16 @@ extern "C"
code.format = Format(static_cast<int>(result.format())); code.format = Format(static_cast<int>(result.format()));
const wchar_t *resultText = result.text().c_str(); std::wstring_convert<std::codecvt_utf8<wchar_t>> converter;
size_t size = (wcslen(resultText) + 1) * sizeof(wchar_t); std::string text = converter.to_bytes(result.text());
code.text = new char[size]; code.text = new char[text.length() + 1];
std::wcstombs(code.text, resultText, size); strcpy(code.text, text.c_str());
platform_log("zxingRead: %ls\n", resultText);
platform_log("Result: %s\n", code.text);
} }
int evalInMillis = static_cast<int>(get_now() - start); int evalInMillis = static_cast<int>(get_now() - start);
if (logEnabled) platform_log("Read Barcode in: %d ms\n", evalInMillis);
{
platform_log("zxingRead: %d ms\n", evalInMillis);
}
return code; return code;
} }
@ -92,22 +92,19 @@ extern "C"
code.format = Format(static_cast<int>(result.format())); code.format = Format(static_cast<int>(result.format()));
const wchar_t *resultText = result.text().c_str(); std::wstring_convert<std::codecvt_utf8<wchar_t>> converter;
size_t size = (wcslen(resultText) + 1) * sizeof(wchar_t); std::string text = converter.to_bytes(result.text());
code.text = new char[size]; code.text = new char[text.length() + 1];
std::wcstombs(code.text, resultText, size); strcpy(code.text, text.c_str());
codes[i] = code; codes[i] = code;
i++; i++;
platform_log("zxingRead: %s\n", code.text); platform_log("Result: %s\n", code.text);
} }
} }
int evalInMillis = static_cast<int>(get_now() - start); int evalInMillis = static_cast<int>(get_now() - start);
if (logEnabled) platform_log("Read Barcode in: %d ms\n", evalInMillis);
{
platform_log("zxingRead: %d ms\n", evalInMillis);
}
return {i, codes}; return {i, codes};
} }
@ -127,19 +124,13 @@ extern "C"
} }
catch (const std::exception &e) catch (const std::exception &e)
{ {
if (logEnabled) platform_log("Can't encode text: %s\nError: %s\n", contents, e.what());
{
platform_log("Can't encode text: %s\nError: %s\n", contents, e.what());
}
result.error = new char[strlen(e.what()) + 1]; result.error = new char[strlen(e.what()) + 1];
strcpy(result.error, e.what()); strcpy(result.error, e.what());
} }
int evalInMillis = static_cast<int>(get_now() - start); int evalInMillis = static_cast<int>(get_now() - start);
if (logEnabled) platform_log("Encode Barcode in: %d ms\n", evalInMillis);
{
platform_log("zxingEncode: %d ms\n", evalInMillis);
}
return result; return result;
} }
} }

8
ios/Classes/src/native_zxing.h

@ -38,7 +38,7 @@ extern "C"
struct CodeResults struct CodeResults
{ {
int count; int count;
struct CodeResult* results; struct CodeResult *results;
}; };
struct EncodeResult struct EncodeResult
@ -53,8 +53,8 @@ extern "C"
/** /**
* @brief Enables or disables the logging of the library. * @brief Enables or disables the logging of the library.
* *
* @param enabled * @param enabled
*/ */
void setLogEnabled(int enabled); void setLogEnabled(int enabled);
@ -88,7 +88,7 @@ extern "C"
* @param cropHeight Crop height. * @param cropHeight Crop height.
* @param logEnabled Log enabled. * @param logEnabled Log enabled.
* @return Barcode results. * @return Barcode results.
*/ */
struct CodeResults readBarcodes(char *bytes, int format, int width, int height, int cropWidth, int cropHeight); struct CodeResults readBarcodes(char *bytes, int format, int width, int height, int cropWidth, int cropHeight);
/** /**

Loading…
Cancel
Save