KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > teamkonzept > lib > templates > TKTrimTag


1 /*
2  */

3 package com.teamkonzept.lib.templates;
4
5 import java.io.*;
6
7 import com.oroinc.text.regex.*;
8
9 import com.teamkonzept.lib.*;
10
11
12 /**
13  * Ein TK_TRIM wird aus dem Template gefiltert
14  * @author $Author: mischa $
15  * @version $Revision: 1.6 $
16  */

17 public class TKTrimTag extends TKLabelTag {
18     public TKTemplateSyntax trimText;
19     static final int TAG_TYPE = TKNoExpandTag.TAG_TYPE+1;
20
21     /*******************************************************************
22     /**
23      * Konstruktor 1
24      * Ein Syntaxbaum fuer ein Template wird erzeugt.
25      *
26      * @param String def, Name des Tags
27      * @param PatternMatcherInput matcherInput,
28      * @param boolean hasSubTags
29      */

30     public TKTrimTag( TKTemplateSyntax parent, String JavaDoc def, PatternMatcherInput matcherInput, boolean hasSubTags ) throws TKTemplateSyntaxException
31     {
32         super( parent, def, hasSubTags );
33         try {
34             trimText = parent.newChild( matcherInput, parent.getSource() );
35         }
36         catch (ArrayIndexOutOfBoundsException JavaDoc e) { //thrown by TKTemplateSyntax.newTag()
37
throw new TKTemplateSyntaxException(parent.getSource(), "NOEND","TRIM", def);
38         }
39         checkError(trimText,"TRIM", def);
40     }
41     
42     /*******************************************************************
43     /**
44      * Die apply-Methode von TKSyntax wird aufgerufen und der entsprechende
45      * Part des Templates wird bearbeitet
46      *
47      * @param TKTemplateData td
48      * @return den String, der den bearbeiteten Part enthaelt
49      */

50     public String JavaDoc apply( TKTemplateData td ) throws TKTemplateSyntaxException
51     {
52         String JavaDoc label = getLabel(td);
53
54         int keep = 0;
55         if (label != null && label.length() != 0)
56             keep = Integer.parseInt (label);
57         
58                 char[] untrimmed = trimText.apply(td).toCharArray();
59                 char[] trimmed = new char[untrimmed.length];
60                 int trimmedLength = 0;
61
62         int toKeep = keep;
63                 int length = untrimmed.length;
64         for (int i = 0; i < length; i++) {
65             char current = untrimmed[i];
66                         // whitespaces werden nur keep mal angehängt
67
if ( Character.isWhitespace(current) ){
68                             if ( toKeep > 0 ){
69                                 trimmed[trimmedLength++] = current;
70                                 //trimmed.append(current);
71
toKeep--;
72                             }
73                         }
74                         // non-whitespaces werden angehängt
75
else{
76                             // trimmed.append(current);
77
trimmed[trimmedLength++] = current;
78                             toKeep = keep;
79                         }
80         }
81                 return new String JavaDoc(trimmed, 0, trimmedLength);
82     }
83
84     /**
85      * Die apply-Methode von TKSyntax wird aufgerufen und der entsprechende
86      * Part des Templates wird bearbeitet
87      *
88      * @param td TKTemplateData
89      * @param writer Writer in den der bearbeitet Part geschrieben wird.
90      */

91     public void apply(TKTemplateData td, Writer writer)
92         throws TKTemplateSyntaxException, IOException{
93         writer.write(apply(td));
94     }
95 }
96
Popular Tags