56 #define VARDIR "configs/"
58 #define API_CONFIG "configs/api_config"
73 if ((fp = fopen(path.
string(),
"rb")) !=
NULL) {
77 path +=
"tessconfigs/";
79 if ((fp = fopen(path.
string(),
"rb")) !=
NULL) {
99 const char *arg0,
const char *textbase,
const char *language,
103 bool set_only_non_debug_params) {
108 lang = language !=
NULL ? language :
"eng";
127 tprintf(
"Loaded language config file\n");
136 for (
int i = 0; i < configs_size; ++i) {
142 if (vars_vec !=
NULL && vars_values !=
NULL) {
143 for (
int i = 0; i < vars_vec->
size(); ++i) {
145 (*vars_values)[i].
string(),
146 set_params_constraint, this->
params())) {
147 tprintf(
"Error setting param %s\n", (*vars_vec)[i].
string());
154 FILE *params_file = fopen(tessedit_write_params_to_file.
string(),
"wb");
155 if (params_file !=
NULL) {
159 tprintf(
"Wrote parameters to %s\n",
160 tessedit_write_params_to_file.
string());
163 tprintf(
"Failed to open %s for writing params.\n",
164 tessedit_write_params_to_file.
string());
171 tprintf(
"Loading Tesseract/Cube with tessedit_ocr_engine_mode %d\n",
179 tprintf(
"Returning after loading config file\n");
190 tprintf(
"Error: Size of unicharset is greater than MAX_NUM_CLASSES\n");
209 tprintf(
"Loaded Cube w/out combiner\n");
213 tprintf(
"Loaded Cube with combiner\n");
220 static bool IsStrInList(
const STRING& str,
222 for (
int i = 0; i < str_list.
size(); ++i) {
223 if (str_list[i] == str)
238 while (remains.
length() > 0) {
240 const char* start = remains.
string();
241 while (*start ==
'+')
245 target = not_to_load;
249 int end = strlen(start);
250 const char* plus = strchr(start,
'+');
251 if (plus !=
NULL && plus - start < end)
258 if (!IsStrInList(lang_code, *target)) {
260 tprintf(
"Adding language '%s' to list\n", lang_code.
string());
271 const char *arg0,
const char *textbase,
const char *language,
275 bool set_only_non_debug_params) {
284 bool loaded_primary =
false;
286 for (
int lang_index = 0; lang_index < langs_to_load.
size(); ++lang_index) {
287 if (!IsStrInList(langs_to_load[lang_index], langs_not_to_load)) {
288 const char *lang_str = langs_to_load[lang_index].string();
290 if (!loaded_primary) {
297 arg0, textbase, lang_str, oem, configs, configs_size,
298 vars_vec, vars_values, set_only_non_debug_params);
300 if (!loaded_primary) {
302 tprintf(
"Failed loading language '%s'\n", lang_str);
305 tprintf(
"Loaded language '%s' as main language\n", lang_str);
307 &langs_to_load, &langs_not_to_load);
308 loaded_primary =
true;
312 tprintf(
"Failed loading language '%s'\n", lang_str);
316 tprintf(
"Loaded language '%s' as secondary language\n", lang_str);
320 &langs_to_load, &langs_not_to_load);
325 if (!loaded_primary) {
326 tprintf(
"Tesseract couldn't load any languages!\n");
350 const char *arg0,
const char *textbase,
const char *language,
354 bool set_only_non_debug_params) {
356 configs_size, vars_vec, vars_values,
357 set_only_non_debug_params)) {
366 bool init_tesseract_classifier =
382 for (
int i = 0; i < new_fonts.
size(); ++i) {
391 for (
int i = 0; i < lang_fonts->
size(); ++i) {
392 int index = all_fonts.
get_id(lang_fonts->
get(i));
408 for (
int i = 0; i < sub_langs_.
size(); ++i) {
413 for (
int i = 0; i < sub_langs_.
size(); ++i) {
416 font_table_size_ = all_fonts.
size();
421 const char *textbase,
422 const char *language) {