Changeset 98 for NEWT0/trunk

Show
Ignore:
Timestamp:
04/12/07 20:49:40 (20 months ago)
Author:
matthiasm
Message:

Added flag that allows indenting and newlines when printing an object with NewtPrintObject. Set NEWT_INDENT to any positive number and that number of tab's will be used per indent. Set NEWT_INDENT to a negative number and spaces will be used for indenting. The default behavior of NewtPrintObject is not changed. The recommended value for NEWT_INDENT is 1 for a good result in any decent text editor. This is great for analysing deep object hierarchies.

Location:
NEWT0/trunk/src
Files:
4 modified

Legend:

Unmodified
Added
Removed
  • NEWT0/trunk/src/main.c

    r68 r98  
    296296                break; 
    297297 
     298            case 'I': 
     299                NEWT_INDENT = 1; 
     300                break; 
     301 
    298302            case 'v': 
    299303                newt_show_version(); 
  • NEWT0/trunk/src/newt_core/NewtPkg.c

    r97 r98  
    658658 
    659659        // the original file has this (c) message embedded 
    660         {   char msg[] = "Newtonェ ToolKit Package ゥ 1992-1997, Apple Computer, Inc."; 
     660        {    
     661#ifdef _MSC_VER 
     662            char msg[] = "Newton� ToolKit Package � 1992-1997, Apple Computer, Inc."; 
     663#else 
     664            char msg[] = "Newtonェ ToolKit Package ゥ 1992-1997, Apple Computer, Inc."; 
     665#endif 
    661666            PkgWriteData(&pkg, pkg.header_size + pkg.var_data_size, msg, sizeof(msg)); 
    662667            pkg.var_data_size += sizeof(msg); 
  • NEWT0/trunk/src/newt_core/NewtPrint.c

    r93 r98  
    3030static char *       NewtCharToEscape(int c); 
    3131 
     32static void         NIOPrintIndent(newtStream_t * f, int32_t level); 
    3233static void         NIOPrintEscapeStr(newtStream_t * f, char * str, int len); 
    3334static void         NIOPrintRef(newtStream_t * f, newtRefArg r); 
     
    103104 
    104105#pragma mark - 
     106 
    105107/*------------------------------------------------------------------------*/ 
    106108/** シンボル文字列が表示可能か調べる 
     
    201203 
    202204    return s; 
     205} 
     206 
     207 
     208/*------------------------------------------------------------------------*/ 
     209/** Print a NewLine character and some spaces to indent the following text.  
     210 * @param f         [in] destination stream 
     211 * @param depth     [in] max indent level minus current indent level 
     212 */ 
     213void NIOPrintIndent(newtStream_t * f, int32_t depth) 
     214{ 
     215    int32_t i, n = newt_env._indentDepth - depth; 
     216    NIOFputc('\n', f); 
     217    if (NEWT_INDENT>0) { 
     218        n *= NEWT_INDENT; 
     219        for (i=0; i<n; i++) { 
     220            NIOFputc('\t', f); 
     221        } 
     222    } else { 
     223        n *= -NEWT_INDENT; 
     224        for (i=0; i<n; i++) { 
     225            NIOFputc(' ', f); 
     226        } 
     227    } 
    203228} 
    204229 
     
    568593        if (NewtRefIsNotNIL(klass) && ! NewtRefEqual(klass, NSSYM0(array))) 
    569594        { 
     595            if (NEWT_INDENT) NIOPrintIndent(f, depth-1); 
    570596            NIOPrintObj2(f, klass, 0, true); 
    571597            NIOFputs(": ", f); 
     
    594620                } 
    595621 
     622                if (NEWT_INDENT) NIOPrintIndent(f, depth); 
    596623                NIOPrintObj2(f, slots[i], depth, literal); 
    597624            } 
     625            depth++; 
    598626        } 
    599627 
     628        if (NEWT_INDENT) NIOPrintIndent(f, depth); 
    600629        NIOFputs("]", f); 
    601630    } 
     
    712741        for (i = 0; i < len; i++) 
    713742        { 
    714             if (0 < i) 
     743            if (0 < i) { 
    715744                NIOFputs(", ", f); 
     745            } 
    716746 
    717747            if (printLength <= i) 
    718748            { 
    719749                NIOFputs("...", f); 
     750                if (NEWT_INDENT) NIOPrintIndent(f, depth); 
    720751                break; 
    721752            } 
     753            if (NEWT_INDENT) NIOPrintIndent(f, depth); 
    722754 
    723755            slot = NewtGetMapIndex(obj->as.map, i, &index); 
     
    727759            NIOFputs(": ", f); 
    728760            NIOPrintObj2(f, slots[i], depth, literal); 
     761 
    729762        } 
     763        if (NEWT_INDENT) NIOPrintIndent(f, depth+1); 
    730764    } 
    731765 
     
    870904void NIOPrintObj(newtStream_t * f, newtRefArg r) 
    871905{ 
    872     NIOPrintObj2(f, r, NewtGetPrintDepth(), false); 
     906    int32_t depth = NewtGetPrintDepth(); 
     907    newt_env._indentDepth = depth; 
     908    NIOPrintObj2(f, r, depth, false); 
    873909} 
    874910 
  • NEWT0/trunk/src/newt_core/incs/NewtEnv.h

    r93 r98  
    2626#define NEWT_DUMPSYNTAX     (newt_env._dumpSyntax)          ///< ダンプ構文木フラグ 
    2727#define NEWT_DUMPBC         (newt_env._dumpBC)              ///< ダンプバイトコードフラグ 
     28#define NEWT_INDENT         (newt_env._indent)              ///< Enable indenting when printing 
    2829#define NEWT_POOL           (newt_env.pool)                 ///< メモリプール 
    2930#define NEWT_SWEEP          (newt_env.sweep)                ///< SWEEPフラグ 
     
    9697    bool        _dumpSyntax;    ///< 構文木ダンプフラグ 
    9798    bool        _dumpBC;        ///< バイトコードダンプフラグ 
     99    int32_t     _indent;        ///< number of tabs for indenting a printout 
     100    int32_t     _indentDepth;   ///< base for calculating the indent depth 
    98101} newt_env_t; 
    99102