335char *filestr, *casestr, *descr, *datastr, *realoutdir;
336l_int32 actstart, end, newstart, fileno, nbytes;
341 lept_mkdir(
"lept/auto");
343 if (!pstrcode || *pstrcode == NULL)
344 return ERROR_INT(
"No input data", __func__, 1);
347 L_INFO(
"no outdir specified; writing to /tmp/lept/auto\n", __func__);
348 realoutdir = stringNew(
"/tmp/lept/auto");
350 realoutdir = stringNew(outdir);
358 filestr = (
char *)l_binaryRead(TEMPLATE1, &size);
359 sa1 = sarrayCreateLinesFromString(filestr, 1);
361 sa3 = sarrayCreate(0);
364 sarrayParseRange(sa1, 0, &actstart, &end, &newstart,
"--", 0);
365 sarrayAppendRange(sa3, sa1, actstart, end);
369 snprintf(buf,
sizeof(buf),
" * autogen.%d.c", fileno);
370 sarrayAddString(sa3, buf,
L_COPY);
373 sarrayParseRange(sa1, newstart, &actstart, &end, &newstart,
"--", 0);
374 sarrayAppendRange(sa3, sa1, actstart, end);
377 descr = sarrayToString(strcode->
descr, 1);
378 descr[strlen(descr) - 1] =
'\0';
379 sarrayAddString(sa3, descr,
L_INSERT);
382 sarrayParseRange(sa1, newstart, &actstart, &end, &newstart,
"--", 0);
383 sarrayAppendRange(sa3, sa1, actstart, end);
384 snprintf(buf,
sizeof(buf),
"#include \"autogen.%d.h\"", fileno);
385 sarrayAddString(sa3, buf,
L_COPY);
388 sarrayParseRange(sa1, newstart, &actstart, &end, &newstart,
"--", 0);
389 sarrayAppendRange(sa3, sa1, actstart, end);
392 snprintf(buf,
sizeof(buf),
" * \\brief l_autodecode_%d()", fileno);
393 sarrayAddString(sa3, buf,
L_COPY);
396 sarrayParseRange(sa1, newstart, &actstart, &end, &newstart,
"--", 0);
397 sarrayAppendRange(sa3, sa1, actstart, end);
400 snprintf(buf,
sizeof(buf),
"l_autodecode_%d(l_int32 index)", fileno);
401 sarrayAddString(sa3, buf,
L_COPY);
404 sarrayParseRange(sa1, newstart, &actstart, &end, &newstart,
"--", 0);
405 sarrayAppendRange(sa3, sa1, actstart, end);
408 snprintf(buf,
sizeof(buf),
"l_int32 nfunc = %d;\n", strcode->
n);
409 sarrayAddString(sa3, buf,
L_COPY);
412 snprintf(buf,
sizeof(buf),
" PROCNAME(\"l_autodecode_%d\");", fileno);
413 sarrayAddString(sa3, buf,
L_COPY);
416 sarrayParseRange(sa1, newstart, &actstart, &end, &newstart,
"--", 0);
417 sarrayAppendRange(sa3, sa1, actstart, end);
420 casestr = sarrayToString(strcode->
function, 0);
421 casestr[strlen(casestr) - 1] =
'\0';
422 sarrayAddString(sa3, casestr,
L_INSERT);
425 sarrayParseRange(sa1, newstart, &actstart, &end, &newstart,
"--", 0);
426 sarrayAppendRange(sa3, sa1, actstart, end);
429 filestr = sarrayToString(sa3, 1);
430 nbytes = strlen(filestr);
431 snprintf(buf,
sizeof(buf),
"%s/autogen.%d.c", realoutdir, fileno);
432 l_binaryWrite(buf,
"w", filestr, nbytes);
442 filestr = (
char *)l_binaryRead(TEMPLATE2, &size);
443 sa2 = sarrayCreateLinesFromString(filestr, 1);
445 sa3 = sarrayCreate(0);
448 sarrayParseRange(sa2, 0, &actstart, &end, &newstart,
"--", 0);
449 sarrayAppendRange(sa3, sa2, actstart, end);
452 snprintf(buf,
sizeof(buf),
" * autogen.%d.h", fileno);
453 sarrayAddString(sa3, buf,
L_COPY);
456 sarrayParseRange(sa2, newstart, &actstart, &end, &newstart,
"--", 0);
457 sarrayAppendRange(sa3, sa2, actstart, end);
460 snprintf(buf,
sizeof(buf),
"#ifndef LEPTONICA_AUTOGEN_%d_H\n"
461 "#define LEPTONICA_AUTOGEN_%d_H",
463 sarrayAddString(sa3, buf,
L_COPY);
466 sarrayParseRange(sa2, newstart, &actstart, &end, &newstart,
"--", 0);
467 sarrayAppendRange(sa3, sa2, actstart, end);
470 snprintf(buf,
sizeof(buf),
"void *l_autodecode_%d(l_int32 index);", fileno);
471 sarrayAddString(sa3, buf,
L_COPY);
474 sarrayParseRange(sa2, newstart, &actstart, &end, &newstart,
"--", 0);
475 sarrayAppendRange(sa3, sa2, actstart, end);
478 datastr = sarrayToString(strcode->
data, 1);
479 datastr[strlen(datastr) - 1] =
'\0';
480 sarrayAddString(sa3, datastr,
L_INSERT);
483 snprintf(buf,
sizeof(buf),
"#endif /* LEPTONICA_AUTOGEN_%d_H */", fileno);
484 sarrayAddString(sa3, buf,
L_COPY);
487 filestr = sarrayToString(sa3, 1);
488 nbytes = strlen(filestr);
489 snprintf(buf,
sizeof(buf),
"%s/autogen.%d.h", realoutdir, fileno);
490 l_binaryWrite(buf,
"w", filestr, nbytes);
492 LEPT_FREE(realoutdir);