----------------------------------------------------------------------* * 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
| 1027 | * wrap the long "word" to fit in the window. |
| 1028 | */ |
| 1029 | SARRAY * |
| 1030 | sarrayConvertWordsToLines(SARRAY *sa, |
| 1031 | l_int32 linesize) |
| 1032 | { |
| 1033 | char *wd, *strl; |
| 1034 | char emptystring[] = ""; |
| 1035 | l_int32 n, i, len, totlen; |
| 1036 | SARRAY *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 | /*----------------------------------------------------------------------* |
nothing calls this directly
no test coverage detected