Changeset 139 for NEWT0/trunk


Ignore:
Timestamp:
02/20/09 06:17:39 (3 years ago)
Author:
matthiasm
Message:

Printing a symbol with a vertical bar inside needs to escpae the bars (Newton Scrip Programming Language, Page 2-12.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • NEWT0/trunk/src/newt_core/NewtPrint.c

    r138 r139  
    3333 
    3434static void         NIOPrintIndent(newtStream_t * f, int32_t level); 
    35 static void         NIOPrintEscapeStr(newtStream_t * f, char * str, int len); 
     35static void         NIOPrintEscapeStr(newtStream_t * f, char * str, int len, char bar); 
    3636static void         NIOPrintRef(newtStream_t * f, newtRefArg r); 
    3737static void         NIOPrintSpecial(newtStream_t * f, newtRefArg r); 
     
    217217 
    218218/*------------------------------------------------------------------------*/ 
     219/** Convert a bunch characters into their escaped variant. 
     220 *  This is required when printing symbols containing vertical bars. 
     221 * 
     222 * @param c         [in] unicode character 
     223 * 
     224 * @return          ASCII string or NULL 
     225 */ 
     226 
     227char * NewtCharAndBarToEscape(int c) 
     228{    
     229    if (c=='|') { 
     230        return "\\|"; 
     231    } else if (c=='\\') {  
     232        return "\\\\"; 
     233    } else { 
     234        return NewtCharToEscape(c); 
     235    } 
     236} 
     237 
     238 
     239/*------------------------------------------------------------------------*/ 
    219240/** 文字をエスケープ文字列に変換する 
    220241 * 
     
    277298/** 文字列をエスケープでプリントする 
    278299 * 
    279  * @param f         [in] 出力ファイル 
     300 * @param f     [in] 出力ファイル 
    280301 * @param str       [in] 文字列 
    281302 * @param len       [in] 文字列の長さ 
    282  * 
    283  * @return          なし 
    284  * 
    285  * @note            newtStream_t を使用 
    286  */ 
    287  
    288 void NIOPrintEscapeStr(newtStream_t * f, char * str, int len) 
     303 * @param bar       [in] set to 1 to also create an escape sequence  
     304 *               for the vertical bar character 
     305 * 
     306 * @return          なし 
     307 * 
     308 * @note            newtStream_t を使用 
     309 */ 
     310 
     311void NIOPrintEscapeStr(newtStream_t * f, char * str, int len, char bar) 
    289312{ 
    290313    bool    unicode = false; 
     
    297320        c = str[i]; 
    298321 
    299         s = NewtCharToEscape(c); 
     322        if (bar) 
     323            s = NewtCharAndBarToEscape(c); 
     324        else 
     325            s = NewtCharToEscape(c); 
    300326 
    301327        if (s != NULL) 
     
    567593    { 
    568594        NIOFputc('|', f); 
    569         NIOPrintEscapeStr(f, sym->name, len); 
     595        NIOPrintEscapeStr(f, sym->name, len, 1); 
    570596        NIOFputc('|', f); 
    571597    } 
     
    602628    { 
    603629        NIOFputc('"', f); 
    604         NIOPrintEscapeStr(f, s, len); 
     630        NIOPrintEscapeStr(f, s, len, 0); 
    605631        NIOFputc('"', f); 
    606632    } 
Note: See TracChangeset for help on using the changeset viewer.