- if (c >= 'a' && c <= 'z')
- c = 'A' + (c - 'a');
- else if (c == 'ä' || c == 'Ä')
- c = 91;
- else if (c == 'ö' || c == 'Ö')
- c = 92;
- else if (c == 'ü' || c == 'Ü')
- c = 93;
- else if (c == '[' || c == ']') /* map to normal braces */
- c = (c == '[' ? '(' : ')');
- else if (c == '\\') /* bad luck ... */
- c = '/';
-
- if ((c >= 32 && c <= 95) || c == '°' || c == '´' || c == '|')
+static void DrawTextBuffer_Flush(int x, int y, char *buffer, int font_nr,
+ int line_length, int cut_length,
+ int line_spacing, int mask_mode,
+ boolean centered, int current_line)
+{
+ int buffer_len = strlen(buffer);
+ int font_width = getFontWidth(font_nr);
+ int font_height = getFontHeight(font_nr);
+ int offset_chars = (centered ? (line_length - buffer_len) / 2 : 0);
+ int offset_xsize =
+ (centered ? font_width * (line_length - buffer_len) / 2 : 0);
+ int final_cut_length = MAX(0, cut_length - offset_chars);
+ int xx = x + offset_xsize;
+ int yy = y + current_line * (font_height + line_spacing);
+
+ buffer[final_cut_length] = '\0';
+
+ if (mask_mode != -1)
+ DrawTextExt(drawto, xx, yy, buffer, font_nr, mask_mode);
+ else
+ DrawText(xx, yy, buffer, font_nr);
+}
+
+int DrawTextBuffer(int x, int y, char *text_buffer, int font_nr,
+ int line_length, int cut_length, int max_lines,
+ int line_spacing, int mask_mode, boolean autowrap,
+ boolean centered, boolean parse_comments)
+{
+ char buffer[line_length + 1];
+ int buffer_len;
+ int current_line = 0;
+
+ if (text_buffer == NULL || *text_buffer == '\0')
+ return 0;
+
+ if (current_line >= max_lines)
+ return 0;
+
+ if (cut_length == -1)
+ cut_length = line_length;
+
+ buffer[0] = '\0';
+ buffer_len = 0;
+
+ while (*text_buffer && current_line < max_lines)
+ {
+ char line[MAX_LINE_LEN + 1];
+ char *line_ptr;
+ boolean last_line_was_empty = TRUE;
+ int num_line_chars = MAX_LINE_LEN;
+ int i;
+
+ /* copy next line from text buffer to line buffer (nearly fgets() style) */
+ for (i = 0; i < num_line_chars && *text_buffer; i++)
+ if ((line[i] = *text_buffer++) == '\n')
+ break;
+ line[i] = '\0';
+
+ /* prevent 'num_line_chars' sized lines to cause additional empty line */
+ if (i == num_line_chars && *text_buffer == '\n')
+ text_buffer++;
+
+ /* skip comments (lines directly beginning with '#') */
+ if (line[0] == '#' && parse_comments)