StringArray *StringArrayStripOutColumn(char *in, char *stop_before, int startpos, int stoppos, int tabsize) { int pos, i; char value[PHRASELEN]; StringArray *sa; sa = StringArrayCreate(); pos = 0; while (stop_before == NULL || in < stop_before) { if (*in == TERM) break; if (*in == TAB) { pos = StringTab(pos, tabsize); in++; } else if (*in == NEWLINE) { pos = 0; in++; } else if (pos == startpos) { for (i = 0; pos <= stoppos; i++, in++) { if (*in == NEWLINE) break; if (*in == TAB) { value[i] = SPACE; pos = StringTab(pos, tabsize); } else { value[i] = *in; pos++; } } value[i] = TERM; StringElimTrailingBlanks(value); StringElimLeadingBlanks(value); StringArrayAddCopy(sa, value, 0); pos++; } else { pos++; in++; } } return(sa); }
void TranslationEnd(Channel *ch, int eoschar, int tgtlang, Discourse *dc) { int save_lang; StringArray *sa; PNode *p, *pn; save_lang = DC(dc).lang; DC(dc).lang = tgtlang; ch->translations = PNodeFlattenAltern(ch->translations); sa = StringArrayCreate(); for (p = ch->translations; p; p = p->next_altern) { pn = TransformGen(p, dc); PNodePrintStringArrayAdd(sa, pn, eoschar, dc); } fputc(NEWLINE, TranslateStream); StreamSep(TranslateStream); StringArrayPrint(Log, sa, 0, 0); StringArrayPrint(TranslateStream, sa, 0, 0); fflush(TranslateStream); StringArrayFreeCopy(sa); ch->translations = NULL; /* todo: Freeing. */ DC(dc).lang = save_lang; }