MCPcopy Create free account
hub / github.com/creatale/node-dv / sarrayConvertWordsToLines

Function sarrayConvertWordsToLines

deps/leptonica/src/sarray1.c:1029–1081  ·  view source on GitHub ↗

----------------------------------------------------------------------* * Convert word sarray to line sarray * *----------------------------------------------------------------------*/ ! * \brief sarrayConvertWordsToLines() * * \param[in] sa sa of individual words * \param[in] linesize max num of chars in each line * \return saout sa of formatted

Source from the content-addressed store, hash-verified

1027 * wrap the long "word" to fit in the window.
1028 */
1029SARRAY *
1030sarrayConvertWordsToLines(SARRAY *sa,
1031 l_int32 linesize)
1032{
1033char *wd, *strl;
1034char emptystring[] = "";
1035l_int32 n, i, len, totlen;
1036SARRAY *sal, *saout;
1037
1038 PROCNAME("sarrayConvertWordsToLines");
1039
1040 if (!sa)
1041 return (SARRAY *)ERROR_PTR("sa not defined", procName, NULL);
1042
1043 saout = sarrayCreate(0);
1044 n = sarrayGetCount(sa);
1045 totlen = 0;
1046 sal = NULL;
1047 for (i = 0; i < n; i++) {
1048 if (!sal)
1049 sal = sarrayCreate(0);
1050 wd = sarrayGetString(sa, i, L_NOCOPY);
1051 len = strlen(wd);
1052 if (len == 0) { /* end of paragraph: end line & insert blank line */
1053 if (totlen > 0) {
1054 strl = sarrayToString(sal, 2);
1055 sarrayAddString(saout, strl, L_INSERT);
1056 }
1057 sarrayAddString(saout, emptystring, L_COPY);
1058 sarrayDestroy(&sal);
1059 totlen = 0;
1060 } else if (totlen == 0 && len + 1 > linesize) { /* long word! */
1061 sarrayAddString(saout, wd, L_COPY); /* copy to one line */
1062 } else if (totlen + len + 1 > linesize) { /* end line & start new */
1063 strl = sarrayToString(sal, 2);
1064 sarrayAddString(saout, strl, L_INSERT);
1065 sarrayDestroy(&sal);
1066 sal = sarrayCreate(0);
1067 sarrayAddString(sal, wd, L_COPY);
1068 totlen = len + 1;
1069 } else { /* add to current line */
1070 sarrayAddString(sal, wd, L_COPY);
1071 totlen += len + 1;
1072 }
1073 }
1074 if (totlen > 0) { /* didn't end with blank line; output last line */
1075 strl = sarrayToString(sal, 2);
1076 sarrayAddString(saout, strl, L_INSERT);
1077 sarrayDestroy(&sal);
1078 }
1079
1080 return saout;
1081}
1082
1083
1084/*----------------------------------------------------------------------*

Callers

nothing calls this directly

Calls 6

sarrayCreateFunction · 0.85
sarrayGetCountFunction · 0.85
sarrayGetStringFunction · 0.85
sarrayToStringFunction · 0.85
sarrayAddStringFunction · 0.85
sarrayDestroyFunction · 0.85

Tested by

no test coverage detected