core/trunk/XMLv2__XMLFormatter.st
changeset 3 7909b6680107
parent 2 06f508a6f55c
child 4 9bcb9d9f5d25
equal deleted inserted replaced
2:06f508a6f55c 3:7909b6680107
     1 "{ Package: 'stx:goodies/xmlsuite' }"
       
     2 
       
     3 "{ NameSpace: XMLv2 }"
       
     4 
       
     5 Object subclass:#XMLFormatter
       
     6 	instanceVariableNames:'indentLevel textStream visitedElements
       
     7 		maxNumberOfElementsToDisplay'
       
     8 	classVariableNames:''
       
     9 	poolDictionaries:''
       
    10 	category:'XML Suite-Simple Editor'
       
    11 !
       
    12 
       
    13 
       
    14 !XMLFormatter class methodsFor:'instance creation'!
       
    15 
       
    16 new
       
    17     ^ self basicNew initialize.
       
    18 
       
    19     "Created: / 10-10-2004 / 16:31:27 / janfrog"
       
    20 ! !
       
    21 
       
    22 !XMLFormatter class methodsFor:'utilities'!
       
    23 
       
    24 format:aNode
       
    25 
       
    26     ^self new format:aNode
       
    27 
       
    28     "Created: / 19-12-2004 / 13:41:10 / janfrog"
       
    29 ! !
       
    30 
       
    31 !XMLFormatter methodsFor:'accessing'!
       
    32 
       
    33 maxNumberOfElementsToDisplay
       
    34     ^maxNumberOfElementsToDisplay
       
    35 
       
    36     "Created: / 12-10-2004 / 21:14:35 / janfrog"
       
    37     "Modified: / 19-12-2004 / 13:18:24 / janfrog"
       
    38 !
       
    39 
       
    40 maxNumberOfElementsToDisplay:aNumber
       
    41     maxNumberOfElementsToDisplay := aNumber
       
    42 
       
    43     "Created: / 19-12-2004 / 13:18:51 / janfrog"
       
    44 !
       
    45 
       
    46 text
       
    47     ^self textStream contents
       
    48 
       
    49     "Created: / 10-10-2004 / 16:28:48 / janfrog"
       
    50 !
       
    51 
       
    52 textStream
       
    53     textStream ifNil:[textStream := Text new writeStream].
       
    54     ^ textStream
       
    55 
       
    56     "Created: / 10-10-2004 / 16:04:19 / janfrog"
       
    57     "Modified: / 10-10-2004 / 16:04:40 / janfrog"
       
    58 !
       
    59 
       
    60 textStream:something
       
    61     textStream := something.
       
    62 
       
    63     "Created: / 10-10-2004 / 16:04:19 / janfrog"
       
    64 ! !
       
    65 
       
    66 !XMLFormatter methodsFor:'accessing colors & emphasis'!
       
    67 
       
    68 attributeNameColor
       
    69     ^Color green
       
    70 
       
    71     "Created: / 10-10-2004 / 16:09:07 / janfrog"
       
    72 !
       
    73 
       
    74 attributeValueColor
       
    75     ^Color red
       
    76 
       
    77     "Created: / 10-10-2004 / 16:09:25 / janfrog"
       
    78 !
       
    79 
       
    80 commentColor
       
    81     ^Color darkGray
       
    82 
       
    83     "Created: / 12-10-2004 / 21:08:46 / janfrog"
       
    84     "Modified: / 14-04-2005 / 20:52:59 / janfrog"
       
    85 !
       
    86 
       
    87 tagColor
       
    88     ^Color blue
       
    89 
       
    90     "Created: / 10-10-2004 / 16:08:10 / janfrog"
       
    91 !
       
    92 
       
    93 textColor
       
    94     ^Color black
       
    95 
       
    96     "Created: / 10-10-2004 / 16:08:18 / janfrog"
       
    97 ! !
       
    98 
       
    99 !XMLFormatter methodsFor:'initialize'!
       
   100 
       
   101 initialize
       
   102     indentLevel := 0.
       
   103     visitedElements := 0.
       
   104     maxNumberOfElementsToDisplay := 100.
       
   105 
       
   106     "Created: / 10-10-2004 / 16:31:47 / janfrog"
       
   107     "Modified: / 19-12-2004 / 13:18:36 / janfrog"
       
   108 ! !
       
   109 
       
   110 !XMLFormatter methodsFor:'private'!
       
   111 
       
   112 nextPutAttribute:att
       
   113     self textStream
       
   114         emphasis:(#color->self attributeNameColor);
       
   115         nextPutAll:(self qualifiedNameFor:att);
       
   116         emphasis:nil;
       
   117         nextPut:$=;
       
   118         nextPut:$";
       
   119         emphasis:(#color->self attributeValueColor);
       
   120         nextPutAll:(att value);
       
   121         emphasis:nil;
       
   122         nextPut:$".
       
   123 
       
   124     "Created: / 10-10-2004 / 16:28:16 / janfrog"
       
   125     "Modified: / 10-10-2004 / 16:34:10 / janfrog"
       
   126 !
       
   127 
       
   128 nextPutCloseElement:element    
       
   129     self textStream
       
   130         next:indentLevel*2 put:Character space;
       
   131         emphasis:nil;
       
   132         nextPut:$<;
       
   133         nextPut:$/;
       
   134         emphasis:(#color->self tagColor);
       
   135         nextPutAll:(self qualifiedNameFor:element);
       
   136         emphasis:nil;
       
   137         nextPut:$>;
       
   138         cr.
       
   139 
       
   140     "Created: / 10-10-2004 / 16:30:49 / janfrog"
       
   141     "Modified: / 29-11-2004 / 20:44:14 / janfrog"
       
   142 !
       
   143 
       
   144 nextPutOpenElement:element    
       
   145     self textStream
       
   146         next:indentLevel*2 put:Character space;
       
   147         emphasis:nil;
       
   148         nextPut:$<;
       
   149         emphasis:(#color->self tagColor);
       
   150         nextPutAll:(self qualifiedNameFor:element).
       
   151 
       
   152     element attributes isEmpty ifFalse:[self textStream space].
       
   153 
       
   154     element attributes 
       
   155         do:[:att|self nextPutAttribute:att]
       
   156         separatedBy:[self textStream space].
       
   157 
       
   158     self textStream 
       
   159         emphasis:nil;
       
   160         nextPut:$>;
       
   161         cr.
       
   162 
       
   163     "Created: / 10-10-2004 / 16:20:36 / janfrog"
       
   164     "Modified: / 29-11-2004 / 20:44:23 / janfrog"
       
   165 !
       
   166 
       
   167 nextPutShortElement:element    
       
   168     self textStream
       
   169         next:indentLevel*2 put:Character space;
       
   170         emphasis:nil;
       
   171         nextPut:$<;
       
   172         emphasis:(#color->self tagColor);
       
   173         nextPutAll:(self qualifiedNameFor:element).
       
   174 
       
   175     element attributes isEmpty ifFalse:[self textStream space].
       
   176 
       
   177     element attributes 
       
   178         do:[:att|self nextPutAttribute:att]
       
   179         separatedBy:[self textStream space].
       
   180 
       
   181     self textStream 
       
   182         emphasis:nil;
       
   183         nextPut:$/;
       
   184         nextPut:$>;
       
   185         cr.
       
   186 
       
   187     "Created: / 10-10-2004 / 16:36:34 / janfrog"
       
   188     "Modified: / 29-11-2004 / 20:44:30 / janfrog"
       
   189 !
       
   190 
       
   191 qualifiedNameFor:node
       
   192     ^node tag asString
       
   193 
       
   194     "Created: / 10-10-2004 / 16:20:16 / janfrog"
       
   195     "Modified: / 10-10-2004 / 16:26:38 / janfrog"
       
   196 !
       
   197 
       
   198 shouldStopFormatting
       
   199     maxNumberOfElementsToDisplay ifNil:[^false].
       
   200 
       
   201     ^visitedElements > maxNumberOfElementsToDisplay
       
   202 
       
   203     "Created: / 19-12-2004 / 13:45:48 / janfrog"
       
   204 ! !
       
   205 
       
   206 !XMLFormatter methodsFor:'utilities'!
       
   207 
       
   208 format:aNode
       
   209 
       
   210     aNode acceptVisitor:self.
       
   211     ^self text
       
   212 
       
   213     "Created: / 19-12-2004 / 13:40:48 / janfrog"
       
   214 ! !
       
   215 
       
   216 !XMLFormatter methodsFor:'visiting'!
       
   217 
       
   218 visitComment:aComment
       
   219     self textStream
       
   220         emphasis:(#color->self commentColor);
       
   221         nextPutAll:'<-- ';
       
   222         nextPutAll:aComment text;
       
   223         nextPutAll:' -->';
       
   224         cr;
       
   225         emphasis:nil.
       
   226 
       
   227     "Created: / 12-10-2004 / 21:10:07 / janfrog"
       
   228 !
       
   229 
       
   230 visitDocument:doc
       
   231     doc root acceptVisitor:self
       
   232 
       
   233     "Created: / 10-10-2004 / 16:05:25 / janfrog"
       
   234 !
       
   235 
       
   236 visitElement:element
       
   237     visitedElements := visitedElements + 1.
       
   238     self shouldStopFormatting ifTrue:[^self].
       
   239 
       
   240 
       
   241     element elements isEmpty ifFalse:[
       
   242         self nextPutOpenElement:element.
       
   243         indentLevel := indentLevel + 1.
       
   244         element elements do:[:e| e acceptVisitor:self].
       
   245         visitedElements := visitedElements + 1.
       
   246         self shouldStopFormatting ifTrue:[^self].
       
   247 
       
   248         indentLevel := indentLevel - 1.
       
   249         self nextPutCloseElement:element.
       
   250     ] ifTrue:[
       
   251         self nextPutShortElement:element.
       
   252 
       
   253     ]
       
   254 
       
   255     "Created: / 10-10-2004 / 16:18:59 / janfrog"
       
   256     "Modified: / 19-12-2004 / 13:46:35 / janfrog"
       
   257 !
       
   258 
       
   259 visitText:text
       
   260     text isBlankText ifFalse:[
       
   261         text characterData trimSeparators asStringCollection do:[:line|
       
   262             self textStream 
       
   263                 next:indentLevel*2 put:Character space;
       
   264                 nextPutAll:line;
       
   265                 cr.
       
   266         ]
       
   267     ]
       
   268 
       
   269     "Created: / 10-10-2004 / 16:19:13 / janfrog"
       
   270     "Modified: / 29-11-2004 / 20:46:17 / janfrog"
       
   271 ! !
       
   272 
       
   273 !XMLFormatter class methodsFor:'documentation'!
       
   274 
       
   275 version
       
   276     ^ '$Header: /opt/data/cvs/stx/goodies/xmlsuite/XMLv2__XMLFormatter.st,v 1.1.1.1 2005-11-01 22:07:10 vranyj1 Exp $'
       
   277 ! !