Mercurial > hgrepos > Python2 > PyMuPDF
comparison mupdf-source/thirdparty/tesseract/src/api/capi.cpp @ 2:b50eed0cc0ef upstream
ADD: MuPDF v1.26.7: the MuPDF source as downloaded by a default build of PyMuPDF 1.26.4.
The directory name has changed: no version number in the expanded directory now.
| author | Franz Glasner <fzglas.hg@dom66.de> |
|---|---|
| date | Mon, 15 Sep 2025 11:43:07 +0200 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| 1:1d09e1dec1d9 | 2:b50eed0cc0ef |
|---|---|
| 1 /////////////////////////////////////////////////////////////////////// | |
| 2 // File: capi.cpp | |
| 3 // Description: C-API TessBaseAPI | |
| 4 // | |
| 5 // (C) Copyright 2012, Google Inc. | |
| 6 // Licensed under the Apache License, Version 2.0 (the "License"); | |
| 7 // you may not use this file except in compliance with the License. | |
| 8 // You may obtain a copy of the License at | |
| 9 // http://www.apache.org/licenses/LICENSE-2.0 | |
| 10 // Unless required by applicable law or agreed to in writing, software | |
| 11 // distributed under the License is distributed on an "AS IS" BASIS, | |
| 12 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| 13 // See the License for the specific language governing permissions and | |
| 14 // limitations under the License. | |
| 15 // | |
| 16 /////////////////////////////////////////////////////////////////////// | |
| 17 | |
| 18 #include <tesseract/capi.h> | |
| 19 | |
| 20 const char *TessVersion() { | |
| 21 return TessBaseAPI::Version(); | |
| 22 } | |
| 23 | |
| 24 static char *MakeText(const std::string& srcText) { | |
| 25 auto *text = new char[srcText.size() + 1]; | |
| 26 srcText.copy(text, srcText.size()); | |
| 27 text[srcText.size()] = 0; | |
| 28 return text; | |
| 29 } | |
| 30 | |
| 31 void TessDeleteText(const char *text) { | |
| 32 delete[] text; | |
| 33 } | |
| 34 | |
| 35 static char **MakeTextArray(const std::vector<std::string>& srcArr) { | |
| 36 auto **arr = new char *[srcArr.size() + 1]; | |
| 37 for (size_t i = 0; i < srcArr.size(); ++i) { | |
| 38 arr[i] = MakeText(srcArr[i]); | |
| 39 } | |
| 40 arr[srcArr.size()] = nullptr; | |
| 41 return arr; | |
| 42 } | |
| 43 | |
| 44 void TessDeleteTextArray(char **arr) { | |
| 45 for (char **pos = arr; *pos != nullptr; ++pos) { | |
| 46 delete[] * pos; | |
| 47 } | |
| 48 delete[] arr; | |
| 49 } | |
| 50 | |
| 51 void TessDeleteIntArray(const int *arr) { | |
| 52 delete[] arr; | |
| 53 } | |
| 54 | |
| 55 TessResultRenderer *TessTextRendererCreate(const char *outputbase) { | |
| 56 return new tesseract::TessTextRenderer(outputbase); | |
| 57 } | |
| 58 | |
| 59 TessResultRenderer *TessHOcrRendererCreate(const char *outputbase) { | |
| 60 return new tesseract::TessHOcrRenderer(outputbase); | |
| 61 } | |
| 62 | |
| 63 TessResultRenderer *TessHOcrRendererCreate2(const char *outputbase, BOOL font_info) { | |
| 64 return new tesseract::TessHOcrRenderer(outputbase, font_info != 0); | |
| 65 } | |
| 66 | |
| 67 TessResultRenderer *TessAltoRendererCreate(const char *outputbase) { | |
| 68 return new tesseract::TessAltoRenderer(outputbase); | |
| 69 } | |
| 70 | |
| 71 TessResultRenderer *TessPAGERendererCreate(const char *outputbase) { | |
| 72 return new tesseract::TessPAGERenderer(outputbase); | |
| 73 } | |
| 74 | |
| 75 TessResultRenderer *TessTsvRendererCreate(const char *outputbase) { | |
| 76 return new tesseract::TessTsvRenderer(outputbase); | |
| 77 } | |
| 78 | |
| 79 TessResultRenderer *TessPDFRendererCreate(const char *outputbase, const char *datadir, | |
| 80 BOOL textonly) { | |
| 81 return new tesseract::TessPDFRenderer(outputbase, datadir, textonly != 0); | |
| 82 } | |
| 83 | |
| 84 TessResultRenderer *TessUnlvRendererCreate(const char *outputbase) { | |
| 85 return new tesseract::TessUnlvRenderer(outputbase); | |
| 86 } | |
| 87 | |
| 88 TessResultRenderer *TessBoxTextRendererCreate(const char *outputbase) { | |
| 89 return new tesseract::TessBoxTextRenderer(outputbase); | |
| 90 } | |
| 91 | |
| 92 TessResultRenderer *TessWordStrBoxRendererCreate(const char *outputbase) { | |
| 93 return new tesseract::TessWordStrBoxRenderer(outputbase); | |
| 94 } | |
| 95 | |
| 96 TessResultRenderer *TessLSTMBoxRendererCreate(const char *outputbase) { | |
| 97 return new tesseract::TessLSTMBoxRenderer(outputbase); | |
| 98 } | |
| 99 | |
| 100 void TessDeleteResultRenderer(TessResultRenderer *renderer) { | |
| 101 delete renderer; | |
| 102 } | |
| 103 | |
| 104 void TessResultRendererInsert(TessResultRenderer *renderer, TessResultRenderer *next) { | |
| 105 renderer->insert(next); | |
| 106 } | |
| 107 | |
| 108 TessResultRenderer *TessResultRendererNext(TessResultRenderer *renderer) { | |
| 109 return renderer->next(); | |
| 110 } | |
| 111 | |
| 112 BOOL TessResultRendererBeginDocument(TessResultRenderer *renderer, const char *title) { | |
| 113 return static_cast<int>(renderer->BeginDocument(title)); | |
| 114 } | |
| 115 | |
| 116 BOOL TessResultRendererAddImage(TessResultRenderer *renderer, TessBaseAPI *api) { | |
| 117 return static_cast<int>(renderer->AddImage(api)); | |
| 118 } | |
| 119 | |
| 120 BOOL TessResultRendererEndDocument(TessResultRenderer *renderer) { | |
| 121 return static_cast<int>(renderer->EndDocument()); | |
| 122 } | |
| 123 | |
| 124 const char *TessResultRendererExtention(TessResultRenderer *renderer) { | |
| 125 return renderer->file_extension(); | |
| 126 } | |
| 127 | |
| 128 const char *TessResultRendererTitle(TessResultRenderer *renderer) { | |
| 129 return renderer->title(); | |
| 130 } | |
| 131 | |
| 132 int TessResultRendererImageNum(TessResultRenderer *renderer) { | |
| 133 return renderer->imagenum(); | |
| 134 } | |
| 135 | |
| 136 TessBaseAPI *TessBaseAPICreate() { | |
| 137 return new TessBaseAPI; | |
| 138 } | |
| 139 | |
| 140 void TessBaseAPIDelete(TessBaseAPI *handle) { | |
| 141 delete handle; | |
| 142 } | |
| 143 | |
| 144 void TessBaseAPISetInputName(TessBaseAPI *handle, const char *name) { | |
| 145 handle->SetInputName(name); | |
| 146 } | |
| 147 | |
| 148 const char *TessBaseAPIGetInputName(TessBaseAPI *handle) { | |
| 149 return handle->GetInputName(); | |
| 150 } | |
| 151 | |
| 152 void TessBaseAPISetInputImage(TessBaseAPI *handle, Pix *pix) { | |
| 153 handle->SetInputImage(pix); | |
| 154 } | |
| 155 | |
| 156 Pix *TessBaseAPIGetInputImage(TessBaseAPI *handle) { | |
| 157 return handle->GetInputImage(); | |
| 158 } | |
| 159 | |
| 160 int TessBaseAPIGetSourceYResolution(TessBaseAPI *handle) { | |
| 161 return handle->GetSourceYResolution(); | |
| 162 } | |
| 163 | |
| 164 const char *TessBaseAPIGetDatapath(TessBaseAPI *handle) { | |
| 165 return handle->GetDatapath(); | |
| 166 } | |
| 167 | |
| 168 void TessBaseAPISetOutputName(TessBaseAPI *handle, const char *name) { | |
| 169 handle->SetOutputName(name); | |
| 170 } | |
| 171 | |
| 172 BOOL TessBaseAPISetVariable(TessBaseAPI *handle, const char *name, const char *value) { | |
| 173 return static_cast<int>(handle->SetVariable(name, value)); | |
| 174 } | |
| 175 | |
| 176 BOOL TessBaseAPISetDebugVariable(TessBaseAPI *handle, const char *name, const char *value) { | |
| 177 return static_cast<int>(handle->SetDebugVariable(name, value)); | |
| 178 } | |
| 179 | |
| 180 BOOL TessBaseAPIGetIntVariable(const TessBaseAPI *handle, const char *name, int *value) { | |
| 181 return static_cast<int>(handle->GetIntVariable(name, value)); | |
| 182 } | |
| 183 | |
| 184 BOOL TessBaseAPIGetBoolVariable(const TessBaseAPI *handle, const char *name, BOOL *value) { | |
| 185 bool boolValue; | |
| 186 bool result = handle->GetBoolVariable(name, &boolValue); | |
| 187 if (result) { | |
| 188 *value = static_cast<int>(boolValue); | |
| 189 } | |
| 190 return static_cast<int>(result); | |
| 191 } | |
| 192 | |
| 193 BOOL TessBaseAPIGetDoubleVariable(const TessBaseAPI *handle, const char *name, double *value) { | |
| 194 return static_cast<int>(handle->GetDoubleVariable(name, value)); | |
| 195 } | |
| 196 | |
| 197 const char *TessBaseAPIGetStringVariable(const TessBaseAPI *handle, const char *name) { | |
| 198 return handle->GetStringVariable(name); | |
| 199 } | |
| 200 | |
| 201 void TessBaseAPIPrintVariables(const TessBaseAPI *handle, FILE *fp) { | |
| 202 handle->PrintVariables(fp); | |
| 203 } | |
| 204 | |
| 205 BOOL TessBaseAPIPrintVariablesToFile(const TessBaseAPI *handle, const char *filename) { | |
| 206 FILE *fp = fopen(filename, "w"); | |
| 207 if (fp != nullptr) { | |
| 208 handle->PrintVariables(fp); | |
| 209 fclose(fp); | |
| 210 return TRUE; | |
| 211 } | |
| 212 return FALSE; | |
| 213 } | |
| 214 | |
| 215 int TessBaseAPIInit4(TessBaseAPI *handle, const char *datapath, const char *language, | |
| 216 TessOcrEngineMode mode, char **configs, int configs_size, char **vars_vec, | |
| 217 char **vars_values, size_t vars_vec_size, BOOL set_only_non_debug_params) { | |
| 218 std::vector<std::string> varNames; | |
| 219 std::vector<std::string> varValues; | |
| 220 if (vars_vec != nullptr && vars_values != nullptr) { | |
| 221 for (size_t i = 0; i < vars_vec_size; i++) { | |
| 222 varNames.emplace_back(vars_vec[i]); | |
| 223 varValues.emplace_back(vars_values[i]); | |
| 224 } | |
| 225 } | |
| 226 | |
| 227 return handle->Init(datapath, language, mode, configs, configs_size, &varNames, &varValues, | |
| 228 set_only_non_debug_params != 0); | |
| 229 } | |
| 230 | |
| 231 int TessBaseAPIInit1(TessBaseAPI *handle, const char *datapath, const char *language, | |
| 232 TessOcrEngineMode oem, char **configs, int configs_size) { | |
| 233 return handle->Init(datapath, language, oem, configs, configs_size, nullptr, nullptr, false); | |
| 234 } | |
| 235 | |
| 236 int TessBaseAPIInit2(TessBaseAPI *handle, const char *datapath, const char *language, | |
| 237 TessOcrEngineMode oem) { | |
| 238 return handle->Init(datapath, language, oem); | |
| 239 } | |
| 240 | |
| 241 int TessBaseAPIInit3(TessBaseAPI *handle, const char *datapath, const char *language) { | |
| 242 return handle->Init(datapath, language); | |
| 243 } | |
| 244 | |
| 245 int TessBaseAPIInit5(TessBaseAPI *handle, const char *data, int data_size, const char *language, | |
| 246 TessOcrEngineMode mode, char **configs, int configs_size, char **vars_vec, | |
| 247 char **vars_values, size_t vars_vec_size, BOOL set_only_non_debug_params) { | |
| 248 std::vector<std::string> varNames; | |
| 249 std::vector<std::string> varValues; | |
| 250 if (vars_vec != nullptr && vars_values != nullptr) { | |
| 251 for (size_t i = 0; i < vars_vec_size; i++) { | |
| 252 varNames.emplace_back(vars_vec[i]); | |
| 253 varValues.emplace_back(vars_values[i]); | |
| 254 } | |
| 255 } | |
| 256 | |
| 257 return handle->Init(data, data_size, language, mode, configs, configs_size, &varNames, &varValues, | |
| 258 set_only_non_debug_params != 0, nullptr); | |
| 259 } | |
| 260 | |
| 261 const char *TessBaseAPIGetInitLanguagesAsString(const TessBaseAPI *handle) { | |
| 262 return handle->GetInitLanguagesAsString(); | |
| 263 } | |
| 264 | |
| 265 char **TessBaseAPIGetLoadedLanguagesAsVector(const TessBaseAPI *handle) { | |
| 266 std::vector<std::string> languages; | |
| 267 handle->GetLoadedLanguagesAsVector(&languages); | |
| 268 return MakeTextArray(languages); | |
| 269 } | |
| 270 | |
| 271 char **TessBaseAPIGetAvailableLanguagesAsVector(const TessBaseAPI *handle) { | |
| 272 std::vector<std::string> languages; | |
| 273 handle->GetAvailableLanguagesAsVector(&languages); | |
| 274 return MakeTextArray(languages); | |
| 275 } | |
| 276 | |
| 277 void TessBaseAPIInitForAnalysePage(TessBaseAPI *handle) { | |
| 278 handle->InitForAnalysePage(); | |
| 279 } | |
| 280 | |
| 281 void TessBaseAPIReadConfigFile(TessBaseAPI *handle, const char *filename) { | |
| 282 handle->ReadConfigFile(filename); | |
| 283 } | |
| 284 | |
| 285 void TessBaseAPIReadDebugConfigFile(TessBaseAPI *handle, const char *filename) { | |
| 286 handle->ReadDebugConfigFile(filename); | |
| 287 } | |
| 288 | |
| 289 void TessBaseAPISetPageSegMode(TessBaseAPI *handle, TessPageSegMode mode) { | |
| 290 handle->SetPageSegMode(mode); | |
| 291 } | |
| 292 | |
| 293 TessPageSegMode TessBaseAPIGetPageSegMode(const TessBaseAPI *handle) { | |
| 294 return handle->GetPageSegMode(); | |
| 295 } | |
| 296 | |
| 297 char *TessBaseAPIRect(TessBaseAPI *handle, const unsigned char *imagedata, int bytes_per_pixel, | |
| 298 int bytes_per_line, int left, int top, int width, int height) { | |
| 299 return handle->TesseractRect(imagedata, bytes_per_pixel, bytes_per_line, left, top, width, | |
| 300 height); | |
| 301 } | |
| 302 | |
| 303 #ifndef DISABLED_LEGACY_ENGINE | |
| 304 void TessBaseAPIClearAdaptiveClassifier(TessBaseAPI *handle) { | |
| 305 handle->ClearAdaptiveClassifier(); | |
| 306 } | |
| 307 #endif | |
| 308 | |
| 309 void TessBaseAPISetImage(TessBaseAPI *handle, const unsigned char *imagedata, int width, int height, | |
| 310 int bytes_per_pixel, int bytes_per_line) { | |
| 311 handle->SetImage(imagedata, width, height, bytes_per_pixel, bytes_per_line); | |
| 312 } | |
| 313 | |
| 314 void TessBaseAPISetImage2(TessBaseAPI *handle, struct Pix *pix) { | |
| 315 return handle->SetImage(pix); | |
| 316 } | |
| 317 | |
| 318 void TessBaseAPISetSourceResolution(TessBaseAPI *handle, int ppi) { | |
| 319 handle->SetSourceResolution(ppi); | |
| 320 } | |
| 321 | |
| 322 void TessBaseAPISetRectangle(TessBaseAPI *handle, int left, int top, int width, int height) { | |
| 323 handle->SetRectangle(left, top, width, height); | |
| 324 } | |
| 325 | |
| 326 struct Pix *TessBaseAPIGetThresholdedImage(TessBaseAPI *handle) { | |
| 327 return handle->GetThresholdedImage(); | |
| 328 } | |
| 329 | |
| 330 float TessBaseAPIGetGradient(TessBaseAPI *handle) { | |
| 331 return handle->GetGradient(); | |
| 332 } | |
| 333 | |
| 334 void TessBaseAPIClearPersistentCache(TessBaseAPI * /*handle*/) { | |
| 335 TessBaseAPI::ClearPersistentCache(); | |
| 336 } | |
| 337 | |
| 338 #ifndef DISABLED_LEGACY_ENGINE | |
| 339 | |
| 340 BOOL TessBaseAPIDetectOrientationScript(TessBaseAPI *handle, int *orient_deg, float *orient_conf, | |
| 341 const char **script_name, float *script_conf) { | |
| 342 auto success = handle->DetectOrientationScript(orient_deg, orient_conf, script_name, script_conf); | |
| 343 return static_cast<BOOL>(success); | |
| 344 } | |
| 345 | |
| 346 #endif | |
| 347 | |
| 348 struct Boxa *TessBaseAPIGetRegions(TessBaseAPI *handle, struct Pixa **pixa) { | |
| 349 return handle->GetRegions(pixa); | |
| 350 } | |
| 351 | |
| 352 struct Boxa *TessBaseAPIGetTextlines(TessBaseAPI *handle, struct Pixa **pixa, int **blockids) { | |
| 353 return handle->GetTextlines(pixa, blockids); | |
| 354 } | |
| 355 | |
| 356 struct Boxa *TessBaseAPIGetTextlines1(TessBaseAPI *handle, const BOOL raw_image, | |
| 357 const int raw_padding, struct Pixa **pixa, int **blockids, | |
| 358 int **paraids) { | |
| 359 return handle->GetTextlines(raw_image != 0, raw_padding, pixa, blockids, paraids); | |
| 360 } | |
| 361 | |
| 362 struct Boxa *TessBaseAPIGetStrips(TessBaseAPI *handle, struct Pixa **pixa, int **blockids) { | |
| 363 return handle->GetStrips(pixa, blockids); | |
| 364 } | |
| 365 | |
| 366 struct Boxa *TessBaseAPIGetWords(TessBaseAPI *handle, struct Pixa **pixa) { | |
| 367 return handle->GetWords(pixa); | |
| 368 } | |
| 369 | |
| 370 struct Boxa *TessBaseAPIGetConnectedComponents(TessBaseAPI *handle, struct Pixa **cc) { | |
| 371 return handle->GetConnectedComponents(cc); | |
| 372 } | |
| 373 | |
| 374 struct Boxa *TessBaseAPIGetComponentImages(TessBaseAPI *handle, TessPageIteratorLevel level, | |
| 375 BOOL text_only, struct Pixa **pixa, int **blockids) { | |
| 376 return handle->GetComponentImages(level, static_cast<bool>(text_only), pixa, blockids); | |
| 377 } | |
| 378 | |
| 379 struct Boxa *TessBaseAPIGetComponentImages1(TessBaseAPI *handle, const TessPageIteratorLevel level, | |
| 380 const BOOL text_only, const BOOL raw_image, | |
| 381 const int raw_padding, struct Pixa **pixa, | |
| 382 int **blockids, int **paraids) { | |
| 383 return handle->GetComponentImages(level, static_cast<bool>(text_only), raw_image != 0, | |
| 384 raw_padding, pixa, blockids, paraids); | |
| 385 } | |
| 386 | |
| 387 int TessBaseAPIGetThresholdedImageScaleFactor(const TessBaseAPI *handle) { | |
| 388 return handle->GetThresholdedImageScaleFactor(); | |
| 389 } | |
| 390 | |
| 391 TessPageIterator *TessBaseAPIAnalyseLayout(TessBaseAPI *handle) { | |
| 392 return handle->AnalyseLayout(); | |
| 393 } | |
| 394 | |
| 395 int TessBaseAPIRecognize(TessBaseAPI *handle, ETEXT_DESC *monitor) { | |
| 396 return handle->Recognize(monitor); | |
| 397 } | |
| 398 | |
| 399 BOOL TessBaseAPIProcessPages(TessBaseAPI *handle, const char *filename, const char *retry_config, | |
| 400 int timeout_millisec, TessResultRenderer *renderer) { | |
| 401 return static_cast<int>(handle->ProcessPages(filename, retry_config, timeout_millisec, renderer)); | |
| 402 } | |
| 403 | |
| 404 BOOL TessBaseAPIProcessPage(TessBaseAPI *handle, struct Pix *pix, int page_index, | |
| 405 const char *filename, const char *retry_config, int timeout_millisec, | |
| 406 TessResultRenderer *renderer) { | |
| 407 return static_cast<int>( | |
| 408 handle->ProcessPage(pix, page_index, filename, retry_config, timeout_millisec, renderer)); | |
| 409 } | |
| 410 | |
| 411 TessResultIterator *TessBaseAPIGetIterator(TessBaseAPI *handle) { | |
| 412 return handle->GetIterator(); | |
| 413 } | |
| 414 | |
| 415 TessMutableIterator *TessBaseAPIGetMutableIterator(TessBaseAPI *handle) { | |
| 416 return handle->GetMutableIterator(); | |
| 417 } | |
| 418 | |
| 419 char *TessBaseAPIGetUTF8Text(TessBaseAPI *handle) { | |
| 420 return handle->GetUTF8Text(); | |
| 421 } | |
| 422 | |
| 423 char *TessBaseAPIGetHOCRText(TessBaseAPI *handle, int page_number) { | |
| 424 return handle->GetHOCRText(nullptr, page_number); | |
| 425 } | |
| 426 | |
| 427 char *TessBaseAPIGetAltoText(TessBaseAPI *handle, int page_number) { | |
| 428 return handle->GetAltoText(page_number); | |
| 429 } | |
| 430 | |
| 431 char *TessBaseAPIGetPAGEText(TessBaseAPI *handle, int page_number) { | |
| 432 return handle->GetPAGEText(page_number); | |
| 433 } | |
| 434 | |
| 435 char *TessBaseAPIGetTsvText(TessBaseAPI *handle, int page_number) { | |
| 436 return handle->GetTSVText(page_number); | |
| 437 } | |
| 438 | |
| 439 char *TessBaseAPIGetBoxText(TessBaseAPI *handle, int page_number) { | |
| 440 return handle->GetBoxText(page_number); | |
| 441 } | |
| 442 | |
| 443 char *TessBaseAPIGetWordStrBoxText(TessBaseAPI *handle, int page_number) { | |
| 444 return handle->GetWordStrBoxText(page_number); | |
| 445 } | |
| 446 | |
| 447 char *TessBaseAPIGetLSTMBoxText(TessBaseAPI *handle, int page_number) { | |
| 448 return handle->GetLSTMBoxText(page_number); | |
| 449 } | |
| 450 | |
| 451 char *TessBaseAPIGetUNLVText(TessBaseAPI *handle) { | |
| 452 return handle->GetUNLVText(); | |
| 453 } | |
| 454 | |
| 455 int TessBaseAPIMeanTextConf(TessBaseAPI *handle) { | |
| 456 return handle->MeanTextConf(); | |
| 457 } | |
| 458 | |
| 459 int *TessBaseAPIAllWordConfidences(TessBaseAPI *handle) { | |
| 460 return handle->AllWordConfidences(); | |
| 461 } | |
| 462 | |
| 463 #ifndef DISABLED_LEGACY_ENGINE | |
| 464 BOOL TessBaseAPIAdaptToWordStr(TessBaseAPI *handle, TessPageSegMode mode, const char *wordstr) { | |
| 465 return static_cast<int>(handle->AdaptToWordStr(mode, wordstr)); | |
| 466 } | |
| 467 #endif | |
| 468 | |
| 469 void TessBaseAPIClear(TessBaseAPI *handle) { | |
| 470 handle->Clear(); | |
| 471 } | |
| 472 | |
| 473 void TessBaseAPIEnd(TessBaseAPI *handle) { | |
| 474 handle->End(); | |
| 475 } | |
| 476 | |
| 477 int TessBaseAPIIsValidWord(TessBaseAPI *handle, const char *word) { | |
| 478 return handle->IsValidWord(word); | |
| 479 } | |
| 480 | |
| 481 BOOL TessBaseAPIGetTextDirection(TessBaseAPI *handle, int *out_offset, float *out_slope) { | |
| 482 return static_cast<int>(handle->GetTextDirection(out_offset, out_slope)); | |
| 483 } | |
| 484 | |
| 485 const char *TessBaseAPIGetUnichar(TessBaseAPI *handle, int unichar_id) { | |
| 486 return handle->GetUnichar(unichar_id); | |
| 487 } | |
| 488 | |
| 489 void TessBaseAPISetMinOrientationMargin(TessBaseAPI *handle, double margin) { | |
| 490 handle->set_min_orientation_margin(margin); | |
| 491 } | |
| 492 | |
| 493 int TessBaseAPINumDawgs(const TessBaseAPI *handle) { | |
| 494 return handle->NumDawgs(); | |
| 495 } | |
| 496 | |
| 497 TessOcrEngineMode TessBaseAPIOem(const TessBaseAPI *handle) { | |
| 498 return handle->oem(); | |
| 499 } | |
| 500 | |
| 501 void TessBaseGetBlockTextOrientations(TessBaseAPI *handle, int **block_orientation, | |
| 502 bool **vertical_writing) { | |
| 503 handle->GetBlockTextOrientations(block_orientation, vertical_writing); | |
| 504 } | |
| 505 | |
| 506 void TessPageIteratorDelete(TessPageIterator *handle) { | |
| 507 delete handle; | |
| 508 } | |
| 509 | |
| 510 TessPageIterator *TessPageIteratorCopy(const TessPageIterator *handle) { | |
| 511 return new TessPageIterator(*handle); | |
| 512 } | |
| 513 | |
| 514 void TessPageIteratorBegin(TessPageIterator *handle) { | |
| 515 handle->Begin(); | |
| 516 } | |
| 517 | |
| 518 BOOL TessPageIteratorNext(TessPageIterator *handle, TessPageIteratorLevel level) { | |
| 519 return static_cast<int>(handle->Next(level)); | |
| 520 } | |
| 521 | |
| 522 BOOL TessPageIteratorIsAtBeginningOf(const TessPageIterator *handle, TessPageIteratorLevel level) { | |
| 523 return static_cast<int>(handle->IsAtBeginningOf(level)); | |
| 524 } | |
| 525 | |
| 526 BOOL TessPageIteratorIsAtFinalElement(const TessPageIterator *handle, TessPageIteratorLevel level, | |
| 527 TessPageIteratorLevel element) { | |
| 528 return static_cast<int>(handle->IsAtFinalElement(level, element)); | |
| 529 } | |
| 530 | |
| 531 BOOL TessPageIteratorBoundingBox(const TessPageIterator *handle, TessPageIteratorLevel level, | |
| 532 int *left, int *top, int *right, int *bottom) { | |
| 533 return static_cast<int>(handle->BoundingBox(level, left, top, right, bottom)); | |
| 534 } | |
| 535 | |
| 536 TessPolyBlockType TessPageIteratorBlockType(const TessPageIterator *handle) { | |
| 537 return handle->BlockType(); | |
| 538 } | |
| 539 | |
| 540 struct Pix *TessPageIteratorGetBinaryImage(const TessPageIterator *handle, | |
| 541 TessPageIteratorLevel level) { | |
| 542 return handle->GetBinaryImage(level); | |
| 543 } | |
| 544 | |
| 545 struct Pix *TessPageIteratorGetImage(const TessPageIterator *handle, TessPageIteratorLevel level, | |
| 546 int padding, struct Pix *original_image, int *left, int *top) { | |
| 547 return handle->GetImage(level, padding, original_image, left, top); | |
| 548 } | |
| 549 | |
| 550 BOOL TessPageIteratorBaseline(const TessPageIterator *handle, TessPageIteratorLevel level, int *x1, | |
| 551 int *y1, int *x2, int *y2) { | |
| 552 return static_cast<int>(handle->Baseline(level, x1, y1, x2, y2)); | |
| 553 } | |
| 554 | |
| 555 void TessPageIteratorOrientation(TessPageIterator *handle, TessOrientation *orientation, | |
| 556 TessWritingDirection *writing_direction, | |
| 557 TessTextlineOrder *textline_order, float *deskew_angle) { | |
| 558 handle->Orientation(orientation, writing_direction, textline_order, deskew_angle); | |
| 559 } | |
| 560 | |
| 561 void TessPageIteratorParagraphInfo(TessPageIterator *handle, | |
| 562 TessParagraphJustification *justification, BOOL *is_list_item, | |
| 563 BOOL *is_crown, int *first_line_indent) { | |
| 564 bool bool_is_list_item; | |
| 565 bool bool_is_crown; | |
| 566 handle->ParagraphInfo(justification, &bool_is_list_item, &bool_is_crown, first_line_indent); | |
| 567 if (is_list_item != nullptr) { | |
| 568 *is_list_item = static_cast<int>(bool_is_list_item); | |
| 569 } | |
| 570 if (is_crown != nullptr) { | |
| 571 *is_crown = static_cast<int>(bool_is_crown); | |
| 572 } | |
| 573 } | |
| 574 | |
| 575 void TessResultIteratorDelete(TessResultIterator *handle) { | |
| 576 delete handle; | |
| 577 } | |
| 578 | |
| 579 TessResultIterator *TessResultIteratorCopy(const TessResultIterator *handle) { | |
| 580 return new TessResultIterator(*handle); | |
| 581 } | |
| 582 | |
| 583 TessPageIterator *TessResultIteratorGetPageIterator(TessResultIterator *handle) { | |
| 584 return handle; | |
| 585 } | |
| 586 | |
| 587 const TessPageIterator *TessResultIteratorGetPageIteratorConst(const TessResultIterator *handle) { | |
| 588 return handle; | |
| 589 } | |
| 590 | |
| 591 TessChoiceIterator *TessResultIteratorGetChoiceIterator(const TessResultIterator *handle) { | |
| 592 return new TessChoiceIterator(*handle); | |
| 593 } | |
| 594 | |
| 595 BOOL TessResultIteratorNext(TessResultIterator *handle, TessPageIteratorLevel level) { | |
| 596 return static_cast<int>(handle->Next(level)); | |
| 597 } | |
| 598 | |
| 599 char *TessResultIteratorGetUTF8Text(const TessResultIterator *handle, TessPageIteratorLevel level) { | |
| 600 return handle->GetUTF8Text(level); | |
| 601 } | |
| 602 | |
| 603 float TessResultIteratorConfidence(const TessResultIterator *handle, TessPageIteratorLevel level) { | |
| 604 return handle->Confidence(level); | |
| 605 } | |
| 606 | |
| 607 const char *TessResultIteratorWordRecognitionLanguage(const TessResultIterator *handle) { | |
| 608 return handle->WordRecognitionLanguage(); | |
| 609 } | |
| 610 | |
| 611 const char *TessResultIteratorWordFontAttributes(const TessResultIterator *handle, BOOL *is_bold, | |
| 612 BOOL *is_italic, BOOL *is_underlined, | |
| 613 BOOL *is_monospace, BOOL *is_serif, | |
| 614 BOOL *is_smallcaps, int *pointsize, int *font_id) { | |
| 615 bool bool_is_bold; | |
| 616 bool bool_is_italic; | |
| 617 bool bool_is_underlined; | |
| 618 bool bool_is_monospace; | |
| 619 bool bool_is_serif; | |
| 620 bool bool_is_smallcaps; | |
| 621 const char *ret = handle->WordFontAttributes(&bool_is_bold, &bool_is_italic, &bool_is_underlined, | |
| 622 &bool_is_monospace, &bool_is_serif, | |
| 623 &bool_is_smallcaps, pointsize, font_id); | |
| 624 if (is_bold != nullptr) { | |
| 625 *is_bold = static_cast<int>(bool_is_bold); | |
| 626 } | |
| 627 if (is_italic != nullptr) { | |
| 628 *is_italic = static_cast<int>(bool_is_italic); | |
| 629 } | |
| 630 if (is_underlined != nullptr) { | |
| 631 *is_underlined = static_cast<int>(bool_is_underlined); | |
| 632 } | |
| 633 if (is_monospace != nullptr) { | |
| 634 *is_monospace = static_cast<int>(bool_is_monospace); | |
| 635 } | |
| 636 if (is_serif != nullptr) { | |
| 637 *is_serif = static_cast<int>(bool_is_serif); | |
| 638 } | |
| 639 if (is_smallcaps != nullptr) { | |
| 640 *is_smallcaps = static_cast<int>(bool_is_smallcaps); | |
| 641 } | |
| 642 return ret; | |
| 643 } | |
| 644 | |
| 645 BOOL TessResultIteratorWordIsFromDictionary(const TessResultIterator *handle) { | |
| 646 return static_cast<int>(handle->WordIsFromDictionary()); | |
| 647 } | |
| 648 | |
| 649 BOOL TessResultIteratorWordIsNumeric(const TessResultIterator *handle) { | |
| 650 return static_cast<int>(handle->WordIsNumeric()); | |
| 651 } | |
| 652 | |
| 653 BOOL TessResultIteratorSymbolIsSuperscript(const TessResultIterator *handle) { | |
| 654 return static_cast<int>(handle->SymbolIsSuperscript()); | |
| 655 } | |
| 656 | |
| 657 BOOL TessResultIteratorSymbolIsSubscript(const TessResultIterator *handle) { | |
| 658 return static_cast<int>(handle->SymbolIsSubscript()); | |
| 659 } | |
| 660 | |
| 661 BOOL TessResultIteratorSymbolIsDropcap(const TessResultIterator *handle) { | |
| 662 return static_cast<int>(handle->SymbolIsDropcap()); | |
| 663 } | |
| 664 | |
| 665 void TessChoiceIteratorDelete(TessChoiceIterator *handle) { | |
| 666 delete handle; | |
| 667 } | |
| 668 | |
| 669 BOOL TessChoiceIteratorNext(TessChoiceIterator *handle) { | |
| 670 return static_cast<int>(handle->Next()); | |
| 671 } | |
| 672 | |
| 673 const char *TessChoiceIteratorGetUTF8Text(const TessChoiceIterator *handle) { | |
| 674 return handle->GetUTF8Text(); | |
| 675 } | |
| 676 | |
| 677 float TessChoiceIteratorConfidence(const TessChoiceIterator *handle) { | |
| 678 return handle->Confidence(); | |
| 679 } | |
| 680 | |
| 681 ETEXT_DESC *TessMonitorCreate() { | |
| 682 return new ETEXT_DESC(); | |
| 683 } | |
| 684 | |
| 685 void TessMonitorDelete(ETEXT_DESC *monitor) { | |
| 686 delete monitor; | |
| 687 } | |
| 688 | |
| 689 void TessMonitorSetCancelFunc(ETEXT_DESC *monitor, TessCancelFunc cancelFunc) { | |
| 690 monitor->cancel = cancelFunc; | |
| 691 } | |
| 692 | |
| 693 void TessMonitorSetCancelThis(ETEXT_DESC *monitor, void *cancelThis) { | |
| 694 monitor->cancel_this = cancelThis; | |
| 695 } | |
| 696 | |
| 697 void *TessMonitorGetCancelThis(ETEXT_DESC *monitor) { | |
| 698 return monitor->cancel_this; | |
| 699 } | |
| 700 | |
| 701 void TessMonitorSetProgressFunc(ETEXT_DESC *monitor, TessProgressFunc progressFunc) { | |
| 702 monitor->progress_callback2 = progressFunc; | |
| 703 } | |
| 704 | |
| 705 int TessMonitorGetProgress(ETEXT_DESC *monitor) { | |
| 706 return monitor->progress; | |
| 707 } | |
| 708 | |
| 709 void TessMonitorSetDeadlineMSecs(ETEXT_DESC *monitor, int deadline) { | |
| 710 monitor->set_deadline_msecs(deadline); | |
| 711 } |
