Skip to content

Commit ac59139

Browse files
committed
Fix broken outputPos and support inputPos/outputPos/cursorPos in lou_checkyaml
Also fixed pass1Only mode. Fixes issues #74 and #445
2 parents d1c139f + 89871e8 commit ac59139

14 files changed

Lines changed: 1480 additions & 1355 deletions

.gitignore

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -190,9 +190,7 @@ TAGS
190190
/tests/lastworditalafter
191191
/tests/letterDefTest
192192
/tests/logging
193-
/tests/outpos
194193
/tests/pass0_typebuf
195-
/tests/pass1Only
196194
/tests/pass2
197195
/tests/pass2_inpos
198196
/tests/present_progressive

liblouis/compileTranslationTable.c

Lines changed: 43 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -4763,10 +4763,12 @@ static widechar *passbuf1 = NULL;
47634763
static int sizePassbuf1 = 0;
47644764
static widechar *passbuf2 = NULL;
47654765
static int sizePassbuf2 = 0;
4766-
static int *srcMapping = NULL;
4767-
static int *prevSrcMapping = NULL;
4768-
static int sizeSrcMapping = 0;
4769-
static int sizePrevSrcMapping = 0;
4766+
static int *posMapping1 = NULL;
4767+
static int sizePosMapping1 = 0;
4768+
static int *posMapping2 = NULL;
4769+
static int sizePosMapping2 = 0;
4770+
static int *posMapping3 = NULL;
4771+
static int sizePosMapping3 = 0;
47704772
void *EXPORT_CALL
47714773
_lou_allocMem(AllocBuf buffer, int srcmax, int destmax) {
47724774
if (srcmax < 1024) srcmax = 1024;
@@ -4827,34 +4829,48 @@ _lou_allocMem(AllocBuf buffer, int srcmax, int destmax) {
48274829
sizePassbuf2 = destmax;
48284830
}
48294831
return passbuf2;
4830-
case alloc_srcMapping: {
4832+
case alloc_posMapping1: {
48314833
int mapSize;
48324834
if (srcmax >= destmax)
48334835
mapSize = srcmax;
48344836
else
48354837
mapSize = destmax;
4836-
if (mapSize > sizeSrcMapping) {
4837-
if (srcMapping != NULL) free(srcMapping);
4838-
srcMapping = malloc((mapSize + 4) * sizeof(int));
4839-
if (!srcMapping) _lou_outOfMemory();
4840-
sizeSrcMapping = mapSize;
4838+
if (mapSize > sizePosMapping1) {
4839+
if (posMapping1 != NULL) free(posMapping1);
4840+
posMapping1 = malloc((mapSize + 4) * sizeof(int));
4841+
if (!posMapping1) _lou_outOfMemory();
4842+
sizePosMapping1 = mapSize;
48414843
}
48424844
}
4843-
return srcMapping;
4844-
case alloc_prevSrcMapping: {
4845+
return posMapping1;
4846+
case alloc_posMapping2: {
48454847
int mapSize;
48464848
if (srcmax >= destmax)
48474849
mapSize = srcmax;
48484850
else
48494851
mapSize = destmax;
4850-
if (mapSize > sizePrevSrcMapping) {
4851-
if (prevSrcMapping != NULL) free(prevSrcMapping);
4852-
prevSrcMapping = malloc((mapSize + 4) * sizeof(int));
4853-
if (!prevSrcMapping) _lou_outOfMemory();
4854-
sizePrevSrcMapping = mapSize;
4852+
if (mapSize > sizePosMapping2) {
4853+
if (posMapping2 != NULL) free(posMapping2);
4854+
posMapping2 = malloc((mapSize + 4) * sizeof(int));
4855+
if (!posMapping2) _lou_outOfMemory();
4856+
sizePosMapping2 = mapSize;
48554857
}
48564858
}
4857-
return prevSrcMapping;
4859+
return posMapping2;
4860+
case alloc_posMapping3: {
4861+
int mapSize;
4862+
if (srcmax >= destmax)
4863+
mapSize = srcmax;
4864+
else
4865+
mapSize = destmax;
4866+
if (mapSize > sizePosMapping3) {
4867+
if (posMapping3 != NULL) free(posMapping3);
4868+
posMapping3 = malloc((mapSize + 4) * sizeof(int));
4869+
if (!posMapping3) _lou_outOfMemory();
4870+
sizePosMapping3 = mapSize;
4871+
}
4872+
}
4873+
return posMapping3;
48584874
default:
48594875
return NULL;
48604876
}
@@ -4897,12 +4913,15 @@ lou_free(void) {
48974913
if (passbuf2 != NULL) free(passbuf2);
48984914
passbuf2 = NULL;
48994915
sizePassbuf2 = 0;
4900-
if (srcMapping != NULL) free(srcMapping);
4901-
srcMapping = NULL;
4902-
sizeSrcMapping = 0;
4903-
if (prevSrcMapping != NULL) free(prevSrcMapping);
4904-
prevSrcMapping = NULL;
4905-
sizePrevSrcMapping = 0;
4916+
if (posMapping1 != NULL) free(posMapping1);
4917+
posMapping1 = NULL;
4918+
sizePosMapping1 = 0;
4919+
if (posMapping2 != NULL) free(posMapping2);
4920+
posMapping2 = NULL;
4921+
sizePosMapping2 = 0;
4922+
if (posMapping3 != NULL) free(posMapping3);
4923+
posMapping3 = NULL;
4924+
sizePosMapping3 = 0;
49064925
gOpcodeLengths[0] = 0;
49074926
}
49084927

liblouis/internal.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -553,8 +553,9 @@ typedef enum {
553553
alloc_destSpacing,
554554
alloc_passbuf1,
555555
alloc_passbuf2,
556-
alloc_srcMapping,
557-
alloc_prevSrcMapping
556+
alloc_posMapping1,
557+
alloc_posMapping2,
558+
alloc_posMapping3
558559
} AllocBuf;
559560

560561
typedef enum {

liblouis/lou_backTranslateString.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,7 @@ doPasses(widechar *outbuf, const TranslationTableHeader *table, int *src, int *s
9191
if (table->corrections) lastPass -= 1;
9292

9393
if (mode & pass1Only) {
94+
_lou_logMessage(LOG_WARN, "warning: pass1Only mode has been deprecated.");
9495
firstPass = 1;
9596
lastPass = 1;
9697
}
@@ -189,7 +190,7 @@ _lou_backTranslateWithTracing(const char *tableList, const widechar *inbuf, int
189190
else
190191
passbuf1[k] = _lou_getDotsForChar(inbuf[k]);
191192
passbuf1[srcmax] = _lou_getDotsForChar(' ');
192-
if (!(srcMapping = _lou_allocMem(alloc_srcMapping, srcmax, destmax))) return 0;
193+
if (!(srcMapping = _lou_allocMem(alloc_posMapping1, srcmax, destmax))) return 0;
193194
for (k = 0; k <= srcmax; k++) srcMapping[k] = k;
194195
srcMapping[srcmax] = srcmax;
195196
if ((!(mode & pass1Only)) && (table->numPasses > 1 || table->corrections)) {

0 commit comments

Comments
 (0)