added debug output showing which font token is used for which screen text
[rocksndiamonds.git] / src / libgame / text.c
index 280aae8af8ee8f5b6948423d4416de415833a6ec..0d73df43d7f94e2f5c2964c244ad1ce4980b6b2b 100644 (file)
 
 void InitFontInfo(struct FontBitmapInfo *font_bitmap_info, int num_fonts,
                  int (*select_font_function)(int),
-                 int (*get_font_from_token_function)(char *))
+                 int (*get_font_from_token_function)(char *),
+                 char * (*get_token_from_font_function)(int))
 {
   gfx.num_fonts = num_fonts;
   gfx.font_bitmap_info = font_bitmap_info;
   gfx.select_font_function = select_font_function;
   gfx.get_font_from_token_function = get_font_from_token_function;
+  gfx.get_token_from_font_function = get_token_from_font_function;
 }
 
 void FreeFontInfo(struct FontBitmapInfo *font_bitmap_info)
@@ -254,6 +256,11 @@ void DrawTextExt(DrawBuffer *dst_bitmap, int dst_x, int dst_y, char *text,
   int src_x, src_y;
   char *text_ptr = text;
 
+#if DEBUG
+  Debug("font:token", "'%s' / '%s'",
+        gfx.get_token_from_font_function(font_nr), text);
+#endif
+
   if (font->bitmap == NULL)
     return;
 
@@ -351,11 +358,24 @@ char *GetTextBufferFromFile(char *filename, int max_lines)
   while (!checkEndOfFile(file) && num_lines < max_lines)
   {
     char line[MAX_LINE_LEN];
+    char *line_ptr;
+    int line_len;
 
     // read next line of input file
     if (!getStringFromFile(file, line, MAX_LINE_LEN))
       break;
 
+    line_len = strlen(line);
+
+    // cut trailing line break (this can be newline and/or carriage return)
+    for (line_ptr = &line[line_len]; line_ptr >= line; line_ptr--)
+      if ((*line_ptr == '\n' || *line_ptr == '\r') && *(line_ptr + 1) == '\0')
+       *line_ptr = '\0';
+
+    // re-add newline (so the result is terminated by newline, but not CR/LF)
+    if (strlen(line) != line_len)
+      strcat(line, "\n");
+
     buffer = checked_realloc(buffer, strlen(buffer) + strlen(line) + 1);
 
     strcat(buffer, line);
@@ -391,6 +411,9 @@ static boolean RenderLineToBuffer(char **src_buffer_ptr, char *dst_buffer,
     char *word_ptr;
     int word_len;
 
+    if (strEqual(text_ptr, "  "))      // special case: force line break
+      buffer_filled = TRUE;
+
     // skip leading whitespaces
     while (*text_ptr == ' ' || *text_ptr == '\t')
       text_ptr++;