/[LeafOK_CVS]/lbbs/src/lml.c
ViewVC logotype

Diff of /lbbs/src/lml.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

Revision 1.46 by sysadm, Mon Nov 10 11:54:30 2025 UTC Revision 1.49 by sysadm, Sat Nov 22 10:35:51 2025 UTC
# Line 6  Line 6 
6   * Copyright (C) 2004-2025  Leaflet <leaflet@leafok.com>   * Copyright (C) 2004-2025  Leaflet <leaflet@leafok.com>
7   */   */
8    
9    #ifdef HAVE_CONFIG_H
10    #include "config.h"
11    #endif
12    
13  #include "common.h"  #include "common.h"
14  #include "lml.h"  #include "lml.h"
15  #include "log.h"  #include "log.h"
# Line 176  inline static void lml_init(void) Line 180  inline static void lml_init(void)
180  }  }
181    
182  #define CHECK_AND_APPEND_OUTPUT(out_buf, out_buf_len, out_buf_offset, tag_out, tag_out_len, line_width)                             \  #define CHECK_AND_APPEND_OUTPUT(out_buf, out_buf_len, out_buf_offset, tag_out, tag_out_len, line_width)                             \
183            if ((tag_out_len) > 0)                                                                                                          \
184          {                                                                                                                               \          {                                                                                                                               \
185                  if ((out_buf_offset) + (tag_out_len) >= (out_buf_len))                                                                      \                  if ((out_buf_offset) + (tag_out_len) >= (out_buf_len))                                                                      \
186                  {                                                                                                                           \                  {                                                                                                                           \
# Line 187  inline static void lml_init(void) Line 192  inline static void lml_init(void)
192                  *((out_buf) + (out_buf_offset) + (size_t)(tag_out_len)) = '\0';                                                             \                  *((out_buf) + (out_buf_offset) + (size_t)(tag_out_len)) = '\0';                                                             \
193                  (line_width) += str_length((out_buf) + (out_buf_offset), 1);                                                                \                  (line_width) += str_length((out_buf) + (out_buf_offset), 1);                                                                \
194                  (out_buf_offset) += (tag_out_len);                                                                                          \                  (out_buf_offset) += (tag_out_len);                                                                                          \
195                    if ((tag_out)[(tag_out_len) - 1] == '\0')                                                                                   \
196                    {                                                                                                                           \
197                            (out_buf_offset)--;                                                                                                     \
198                            return (out_buf_offset);                                                                                                \
199                    }                                                                                                                           \
200          }          }
201    
202  int lml_render(const char *str_in, char *str_out, int buf_len, int width, int quote_mode)  int lml_render(const char *str_in, char *str_out, int buf_len, int width, int quote_mode)
# Line 212  int lml_render(const char *str_in, char Line 222  int lml_render(const char *str_in, char
222          char tab_spaces[TAB_SIZE + 1];          char tab_spaces[TAB_SIZE + 1];
223          int tab_width = 0;          int tab_width = 0;
224    
225    #ifdef _DEBUG
226            size_t str_in_len = strlen(str_in);
227    #endif
228    
229          clock_begin = clock();          clock_begin = clock();
230    
231          lml_init();          lml_init();
# Line 226  int lml_render(const char *str_in, char Line 240  int lml_render(const char *str_in, char
240    
241          for (i = 0; str_in[i] != '\0'; i++)          for (i = 0; str_in[i] != '\0'; i++)
242          {          {
243    #ifdef _DEBUG
244                    if (i >= str_in_len)
245                    {
246                            log_error("Bug: i(%d) >= str_in_len(%d)\n", i, str_in_len);
247                            break;
248                    }
249    #endif
250    
251                  if (!lml_tag_disabled && new_line)                  if (!lml_tag_disabled && new_line)
252                  {                  {
253                          while (str_in[i] == ':' && str_in[i + 1] == ' ') // FB2000 quote leading str                          while (str_in[i] == ':' && str_in[i + 1] == ' ') // FB2000 quote leading str
# Line 261  int lml_render(const char *str_in, char Line 283  int lml_render(const char *str_in, char
283    
284                  if (!quote_mode && !lml_tag_disabled && str_in[i] == '\033' && str_in[i + 1] == '[') // Escape sequence                  if (!quote_mode && !lml_tag_disabled && str_in[i] == '\033' && str_in[i + 1] == '[') // Escape sequence
285                  {                  {
286                          for (k = i + 2; isdigit(str_in[k]) || str_in[k] == ';' || str_in[k] == '?'; k++)                          for (k = i + 2; isdigit((int)str_in[k]) || str_in[k] == ';' || str_in[k] == '?'; k++)
287                                  ;                                  ;
288    
289                          if (str_in[k] == 'm') // valid -- copy directly                          if (str_in[k] == 'm') // valid -- copy directly
290                          {                          {
291                                  CHECK_AND_APPEND_OUTPUT(str_out, buf_len, j, str_in + i, k - i + 1, line_width);                                  CHECK_AND_APPEND_OUTPUT(str_out, buf_len, j, str_in + i, k - i + 1, line_width);
292                          }                          }
293                          else if (isalpha(str_in[k]))                          else if (isalpha((int)str_in[k]))
294                          {                          {
295                                  // unsupported ANSI CSI command                                  // unsupported ANSI CSI command
296                          }                          }


Legend:
Removed lines/characters  
Changed lines/characters
  Added lines/characters

webmaster@leafok.com
ViewVC Help
Powered by ViewVC 1.3.0-beta1