You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by vg...@apache.org on 2003/05/22 15:02:47 UTC

cvs commit: cocoon-2.1/src/java/org/apache/cocoon/components/language/markup/xsp XSPMarkupLanguage.java

vgritsenko    2003/05/22 06:02:47

  Modified:    src/java/org/apache/cocoon/components/language/generator
                        ProgramGeneratorImpl.java
               src/java/org/apache/cocoon/components/language/markup
                        AbstractMarkupLanguage.java
                        CocoonMarkupLanguage.java Logicsheet.java
                        LogicsheetCodeGenerator.java
                        MarkupCodeGenerator.java MarkupLanguage.java
                        NamedLogicsheet.java
               src/java/org/apache/cocoon/components/language/markup/xsp
                        XSPMarkupLanguage.java
  Log:
  Some refactoring of XSP machinery:
   * Use excalibur Source instead of InputSource (MarkupCodeGenerator, MarkupLanguage)
   * SourceResolver removed where it was not needed (MarkupLanguage, AbstractMarkupLanguage)
     (one, global instance of resolver is used anyway)
   * Removed usage of XMLReader, SourceUtil.toSAX used instead
   * Removed usage of XMLFilter, AbstractXMLPipe used instead
  
  Reviewed by: Torsten Curdt <tc...@dff.st>
  
  Revision  Changes    Path
  1.2       +57 -56    cocoon-2.1/src/java/org/apache/cocoon/components/language/generator/ProgramGeneratorImpl.java
  
  Index: ProgramGeneratorImpl.java
  ===================================================================
  RCS file: /home/cvs/cocoon-2.1/src/java/org/apache/cocoon/components/language/generator/ProgramGeneratorImpl.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- ProgramGeneratorImpl.java	9 Mar 2003 00:08:52 -0000	1.1
  +++ ProgramGeneratorImpl.java	22 May 2003 13:02:46 -0000	1.2
  @@ -72,11 +72,9 @@
   import org.apache.cocoon.components.language.programming.CodeFormatter;
   import org.apache.cocoon.components.language.programming.Program;
   import org.apache.cocoon.components.language.programming.ProgrammingLanguage;
  -import org.apache.cocoon.components.source.SourceUtil;
   import org.apache.cocoon.environment.SourceResolver;
   import org.apache.cocoon.util.IOUtils;
   import org.apache.excalibur.source.Source;
  -import org.xml.sax.InputSource;
   
   import java.io.File;
   import java.net.MalformedURLException;
  @@ -129,6 +127,7 @@
       /** Servlet Context Directory */
       protected String contextDir;
   
  +
       /** Contextualize this class */
       public void contextualize(Context context) throws ContextException {
           if (this.workDir == null) {
  @@ -167,7 +166,7 @@
        * @param manager The global component manager
        */
       public void compose(ComponentManager manager) throws ComponentException {
  -        if ((this.manager == null) && (manager != null)) {
  +        if (this.manager == null && manager != null) {
               this.manager = manager;
               this.cache = (GeneratorSelector) this.manager.lookup(GeneratorSelector.ROLE + "Selector");
               this.markupSelector = (ComponentSelector)this.manager.lookup(MarkupLanguage.ROLE + "Selector");
  @@ -196,10 +195,10 @@
           StringBuffer contextFilename = new StringBuffer(this.rootPackage.replace('.', File.separatorChar));
           contextFilename.append(File.separator);
           if(systemId.startsWith(this.contextDir)) {
  -            // VG: File is located under contextDir, using relative file name
  +            // VG: File is located under contextDir; using relative file name ...
               contextFilename.append(systemId.substring(this.contextDir.length()));
           } else {
  -            // VG: File is located outside of contextDir, using systemId
  +            // VG: File is located outside of contextDir; using systemId ...
               contextFilename.append(systemId);
           }
           return IOUtils.normalizedFilename(contextFilename.toString());
  @@ -283,8 +282,7 @@
                       if (getLogger().isDebugEnabled()) {
                           getLogger().debug("Successfully preloaded serverpage [" + id + "]");
                       }
  -                }
  -                catch (Exception e) {
  +                } catch (Exception e) {
                       if (getLogger().isErrorEnabled()) {
                           getLogger().error("The serverpage [" + id + "] could not be preloaded");
                       }
  @@ -297,16 +295,21 @@
                       getLogger().debug("Creating new serverpage for [" + id + "]");
                   }
                   synchronized (this) {
  -                    generateSourcecode(source, normalizedName, markupLanguage, programmingLanguage, resolver);
  -
  -                    programInstance = loadProgram(newManager, source, normalizedName, markupLanguage, programmingLanguage, resolver);
  +                    generateSourcecode(source,
  +                                       normalizedName,
  +                                       markupLanguage,
  +                                       programmingLanguage);
  +
  +                    programInstance = loadProgram(newManager,
  +                                                  normalizedName,
  +                                                  markupLanguage,
  +                                                  programmingLanguage);
                   }
  -            }
  -            else {
  +            } else {
                   // found an instance
                   if (this.autoReload) {
                       long sourceLastModified = source.getLastModified();
  -                    // has XSP changed?
  +                    // Has XSP changed?
                       // Note : lastModified can be 0 if source is dynamically generated.
                       // In that case, let the program instance decide if it is modified or not.
                       if (programInstance.modifiedSince(sourceLastModified)) {
  @@ -323,22 +326,30 @@
                               programInstance = null;
                               program = null;
   
  -                            generateSourcecode(source, normalizedName, markupLanguage, programmingLanguage, resolver);
  -
  -                            programInstance = loadProgram(newManager, source, normalizedName, markupLanguage, programmingLanguage, resolver);
  +                            generateSourcecode(source,
  +                                               normalizedName,
  +                                               markupLanguage,
  +                                               programmingLanguage);
  +
  +                            programInstance = loadProgram(newManager,
  +                                                          normalizedName,
  +                                                          markupLanguage,
  +                                                          programmingLanguage);
                           }
  -                    }
  -                    else {
  +                    } else {
                           // check the repository for changes at all?
                           if (this.watchSource) {
                               if (getLogger().isDebugEnabled()) {
                                   getLogger().debug("Checking sourcecode of [" + id + "] for a change");
                               }
  -                            File sourcecodeFile = new File(this.workDir, normalizedName + "." + programmingLanguage.getSourceExtension());
  +                            File sourcecodeFile = new File(this.workDir,
  +                                                           normalizedName + "." + programmingLanguage.getSourceExtension());
                               // has sourcecode in repository changed ?
                               if (sourcecodeFile != null && sourcecodeFile.exists()) {
                                   long sourcecodeLastModified = sourcecodeFile.lastModified();
  -                                if (sourcecodeLastModified > sourceLastModified || sourceLastModified == 0 || sourcecodeLastModified == 0) {
  +                                if (sourcecodeLastModified > sourceLastModified
  +                                        || sourceLastModified == 0
  +                                        || sourcecodeLastModified == 0) {
                                       if (getLogger().isDebugEnabled()) {
                                           getLogger().debug("Create new serverpage program for [" + id + "] - repository has changed");
                                       }
  @@ -352,63 +363,59 @@
                                           programInstance = null;
                                           program = null;
   
  -                                        programInstance = loadProgram(newManager, source, normalizedName, markupLanguage, programmingLanguage, resolver);
  +                                        programInstance = loadProgram(newManager,
  +                                                                      normalizedName,
  +                                                                      markupLanguage,
  +                                                                      programmingLanguage);
                                       }
  -                                }
  -                                else {
  +                                } else {
                                       if (getLogger().isDebugEnabled()) {
                                           getLogger().debug("Sourcecode of [" + id + "] has not changed - returning program from cache");
                                       }
                                   }
  -                            }
  -                            else {
  +                            } else {
                                   if (getLogger().isErrorEnabled()) {
                                       getLogger().error("Could not find sourcecode for [" + id + "]");
                                   }
                               }
                           }
                       }
  -                }
  -                else {
  +                } else {
                       if (getLogger().isDebugEnabled()) {
                           getLogger().debug("Not checking for modifications [autoReload=false] - using current version");
                       }
                   }
  -
               }
   
  -            // Recompose with the new manager if needed
  +            // Recompose with the new manager if program needs it.
  +            // This is required to provide XSP with manager from the correct
  +            // sitemap so it will be able to find all components declared in
  +            // the sitemap.
               if (programInstance instanceof Recomposable) {
                   ((Recomposable) programInstance).recompose(newManager);
               }
               return (programInstance);
  -        }
  -        finally {
  +        } finally {
               resolver.release(source);
               this.markupSelector.release(markupLanguage);
               this.languageSelector.release(programmingLanguage);
           }
       }
   
  -    private CompiledComponent loadProgram(
  -            ComponentManager newManager,
  -            Source source,
  -            String normalizedName,
  -            MarkupLanguage markupLanguage,
  -            ProgrammingLanguage programmingLanguage,
  -            SourceResolver resolver)
  +    private CompiledComponent loadProgram(ComponentManager newManager,
  +                                          String normalizedName,
  +                                          MarkupLanguage markupLanguage,
  +                                          ProgrammingLanguage programmingLanguage)
               throws Exception {
   
           CompiledComponent programInstance = null;
   
           try {
               return (CompiledComponent) this.cache.select(normalizedName);
  -        }
  -        catch (Exception cme) {
  +        } catch (Exception e) {
           }
   
           try {
  -
               if (getLogger().isDebugEnabled()) {
                   getLogger().debug("Loading program [" + normalizedName + "]");
               }
  @@ -418,20 +425,18 @@
               if (getLogger().isDebugEnabled()) {
                   getLogger().debug("Successfully loaded program [" + normalizedName + "]");
               }
  -        }
  -        catch (LanguageException le) {
  -            if (getLogger().isErrorEnabled()) {
  -                getLogger().error("Language Exception", le);
  +        } catch (LanguageException le) {
  +            if (getLogger().isDebugEnabled()) {
  +                getLogger().debug("Got Language Exception", le);
               }
               throw new ProcessingException("Language Exception", le);
           }
   
           try {
               programInstance = (CompiledComponent) this.cache.select(normalizedName);
  -        }
  -        catch (Exception cme) {
  -            if (getLogger().isErrorEnabled()) {
  -                getLogger().error("Can't load ServerPage", cme);
  +        } catch (Exception cme) {
  +            if (getLogger().isDebugEnabled()) {
  +                getLogger().debug("Can't load ServerPage: got exception", cme);
               }
               throw new ProcessingException("Can't load ServerPage", cme);
           }
  @@ -443,19 +448,15 @@
       private void generateSourcecode(Source source,
                                       String normalizedName,
                                       MarkupLanguage markupLanguage,
  -                                    ProgrammingLanguage programmingLanguage,
  -                                    SourceResolver resolver)
  +                                    ProgrammingLanguage programmingLanguage)
               throws Exception {
   
           if (getLogger().isDebugEnabled()) {
               getLogger().debug("Creating sourcecode for [" + source.getURI() + "]");
           }
  -        // Input Source
  -        // FIXME(VG): Use Source.toSAX()
  -        InputSource is = SourceUtil.getInputSource(source);
   
           // Generate code
  -        String code = markupLanguage.generateCode(is, normalizedName, programmingLanguage, resolver);
  +        String code = markupLanguage.generateCode(source, normalizedName, programmingLanguage);
           if (code == null || code.length() == 0) {
               // FIXME(VG): Xalan with incremental-processing=true does not propagate exceptions
               // from working thread to main thread. See
  
  
  
  1.2       +27 -40    cocoon-2.1/src/java/org/apache/cocoon/components/language/markup/AbstractMarkupLanguage.java
  
  Index: AbstractMarkupLanguage.java
  ===================================================================
  RCS file: /home/cvs/cocoon-2.1/src/java/org/apache/cocoon/components/language/markup/AbstractMarkupLanguage.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- AbstractMarkupLanguage.java	9 Mar 2003 00:08:53 -0000	1.1
  +++ AbstractMarkupLanguage.java	22 May 2003 13:02:47 -0000	1.2
  @@ -68,18 +68,14 @@
   import org.apache.excalibur.source.SourceResolver;
   
   import org.apache.cocoon.ProcessingException;
  +import org.apache.cocoon.xml.AbstractXMLPipe;
   import org.apache.cocoon.components.language.programming.ProgrammingLanguage;
   import org.apache.cocoon.components.source.SourceUtil;
   import org.apache.excalibur.store.Store;
   import org.apache.cocoon.util.HashMap;
   
   import org.xml.sax.Attributes;
  -import org.xml.sax.InputSource;
   import org.xml.sax.SAXException;
  -import org.xml.sax.XMLFilter;
  -import org.xml.sax.XMLReader;
  -import org.xml.sax.helpers.XMLFilterImpl;
  -import org.xml.sax.helpers.XMLReaderFactory;
   
   import java.io.IOException;
   import java.net.MalformedURLException;
  @@ -298,15 +294,12 @@
        * specif action and to build a more specific transformer chain.
        *
        * @param logicsheetMarkupGenerator the logicsheet markup generator
  -     * @param resolver the entity resolver
        * @return XMLFilter the filter that build on the fly the transformer chain
        */
       protected TransformerChainBuilderFilter getTransformerChainBuilder(
  -        LogicsheetCodeGenerator logicsheetMarkupGenerator,
  -        SourceResolver resolver)
  +        LogicsheetCodeGenerator logicsheetMarkupGenerator)
       {
  -        return new TransformerChainBuilderFilter(logicsheetMarkupGenerator,
  -                                                 resolver);
  +        return new TransformerChainBuilderFilter(logicsheetMarkupGenerator);
       }
   
       /**
  @@ -322,10 +315,12 @@
        * @param language The target programming language
        * @return The preprocess filter
        */
  -    protected XMLFilter getPreprocessFilter(String filename,
  -                                            ProgrammingLanguage language)
  +    protected AbstractXMLPipe getPreprocessFilter(String filename,
  +                                                  AbstractXMLPipe filter,
  +                                                  ProgrammingLanguage language)
       {
  -        return new XMLFilterImpl();
  +        // No-op
  +        return filter;
       }
   
       /**
  @@ -350,16 +345,16 @@
        * <li>Language-specific logicsheet</li>
        * </ul>
        *
  -     * @param input The input source
  +     * @param source The input source
        * @param filename The input document's original filename
        * @param programmingLanguage The target programming language
        * @return The generated source code
        * @exception Exception If an error occurs during code generation
        */
  -    public String generateCode(InputSource input,
  +    public String generateCode(Source source,
                                  String filename,
  -                               ProgrammingLanguage programmingLanguage,
  -                               SourceResolver resolver) throws Exception {
  +                               ProgrammingLanguage programmingLanguage)
  +            throws Exception {
   
           String languageName = programmingLanguage.getLanguageName();
           LanguageDescriptor language = (LanguageDescriptor)this.languages.get(languageName);
  @@ -367,21 +362,18 @@
               throw new IllegalArgumentException("Unsupported programming language: " + languageName);
           }
   
  -        // Create a XMLReader
  -        XMLReader reader = XMLReaderFactory.createXMLReader();
  -        // Get the needed preprocess filter
  -        XMLFilter preprocessFilter = this.getPreprocessFilter(filename, programmingLanguage);
  -        preprocessFilter.setParent(reader);
           // Create code generator
           LogicsheetCodeGenerator codeGenerator = new LogicsheetCodeGenerator();
           codeGenerator.enableLogging(getLogger());
           codeGenerator.initialize();
  -        // set the transformer chain builder filter
  +        // Set the transformer chain builder filter
           TransformerChainBuilderFilter tranBuilder =
  -            getTransformerChainBuilder(codeGenerator, resolver);
  +                getTransformerChainBuilder(codeGenerator);
           tranBuilder.setLanguageDescriptor(language);
  -        tranBuilder.setParent(preprocessFilter);
  -        return codeGenerator.generateCode(tranBuilder, input, filename);
  +
  +        // Get the needed preprocess filter
  +        AbstractXMLPipe preprocessor = getPreprocessFilter(filename, tranBuilder, programmingLanguage);
  +        return codeGenerator.generateCode(source, preprocessor);
       }
   
       /**
  @@ -414,15 +406,14 @@
   
       /**
        * Add a logicsheet to the code generator.
  +     * @param language Target programming language of the logicsheet
        * @param logicsheetLocation Location of the logicsheet to be added
  -     * @param document The input document
        * @exception MalformedURLException If location is invalid
        * @exception IOException IO Error
        * @exception SAXException Logicsheet parse error
        */
       protected void addLogicsheetToList(LanguageDescriptor language,
  -                                       String logicsheetLocation,
  -                                       SourceResolver resolver)
  +                                       String logicsheetLocation)
           throws IOException, SAXException, ProcessingException
       {
           Logicsheet logicsheet = (Logicsheet)logicsheetCache.get(CACHE_PREFIX + logicsheetLocation);
  @@ -476,7 +467,7 @@
                           getLogger().debug("Adding embedded logic sheet for "
                               + namespace + ": " + namedLogicsheetName);
                           // Add embedded logic sheets too.
  -                        addLogicsheetToList(language, namedLogicsheetName, resolver);
  +                        addLogicsheetToList(language, namedLogicsheetName);
                       }
                   }
               }
  @@ -560,26 +551,22 @@
        * Each time a stylesheet is found, a call to the code generator is done
        * to add the new transformer at the end of the current transformer chain.
        */
  -    public class TransformerChainBuilderFilter extends XMLFilterImpl {
  +    public class TransformerChainBuilderFilter extends AbstractXMLPipe {
           /** The markup generator */
           protected LogicsheetCodeGenerator logicsheetMarkupGenerator;
   
           /** the language description */
           protected LanguageDescriptor language;
   
  -        /** the entity resolver */
  -        protected SourceResolver resolver;
           private boolean isRootElem;
           private List startPrefixes;
   
           /**
  -         * the constructor depends on the code generator, and the entity resolver
  +         * the constructor depends on the code generator
            * @param logicsheetMarkupGenerator The code generator
  -         * @param resolver
            */
  -        protected TransformerChainBuilderFilter(LogicsheetCodeGenerator logicsheetMarkupGenerator, SourceResolver resolver) {
  +        protected TransformerChainBuilderFilter(LogicsheetCodeGenerator logicsheetMarkupGenerator) {
               this.logicsheetMarkupGenerator = logicsheetMarkupGenerator;
  -            this.resolver = resolver;
           }
   
           /**
  @@ -621,12 +608,12 @@
                           String[] prefixNamingArray = (String[]) this.startPrefixes.get(i);
                           String namedLogicsheetName = this.language.getNamedLogicsheetByURI(prefixNamingArray[1]);
                           if (namedLogicsheetName != null) {
  -                            AbstractMarkupLanguage.this.addLogicsheetToList(language, namedLogicsheetName, resolver);
  +                            AbstractMarkupLanguage.this.addLogicsheetToList(language, namedLogicsheetName);
                           }
                       }
   
                       // Add the language stylesheet (Always the last one)
  -                    AbstractMarkupLanguage.this.addLogicsheetToList(language, this.language.getLogicsheet(), resolver);
  +                    AbstractMarkupLanguage.this.addLogicsheetToList(language, this.language.getLogicsheet());
                       AbstractMarkupLanguage.this.addLogicsheetsToGenerator(this.logicsheetMarkupGenerator);
                   } catch (ProcessingException pe) {
                       throw new SAXException (pe);
  
  
  
  1.2       +39 -27    cocoon-2.1/src/java/org/apache/cocoon/components/language/markup/CocoonMarkupLanguage.java
  
  Index: CocoonMarkupLanguage.java
  ===================================================================
  RCS file: /home/cvs/cocoon-2.1/src/java/org/apache/cocoon/components/language/markup/CocoonMarkupLanguage.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- CocoonMarkupLanguage.java	9 Mar 2003 00:08:53 -0000	1.1
  +++ CocoonMarkupLanguage.java	22 May 2003 13:02:47 -0000	1.2
  @@ -54,14 +54,15 @@
   import org.apache.avalon.framework.logger.Logger;
   
   import org.apache.cocoon.ProcessingException;
  +import org.apache.cocoon.xml.AbstractXMLPipe;
  +import org.apache.cocoon.xml.XMLConsumer;
   import org.apache.cocoon.components.language.programming.ProgrammingLanguage;
  -import org.apache.excalibur.source.SourceResolver;
   
   import org.xml.sax.Attributes;
   import org.xml.sax.SAXException;
  -import org.xml.sax.XMLFilter;
  +import org.xml.sax.ContentHandler;
  +import org.xml.sax.ext.LexicalHandler;
   import org.xml.sax.helpers.AttributesImpl;
  -import org.xml.sax.helpers.XMLFilterImpl;
   
   import java.io.File;
   import java.io.IOException;
  @@ -97,8 +98,7 @@
       /**
        * Recycle this component: clear logic sheet list and dependencies.
        */
  -    public void recycle()
  -    {
  +    public void recycle() {
           super.recycle();
           this.dependencies.clear();
       }
  @@ -119,10 +119,12 @@
        *
        * @see PreProcessFilter
        */
  -    protected XMLFilter getPreprocessFilter(String filename, ProgrammingLanguage language) {
  -        PreProcessFilter filter = new PreProcessFilter(filename, language);
  -        filter.enableLogging(getLogger());
  -        return filter;
  +    protected AbstractXMLPipe getPreprocessFilter(String filename,
  +                                                  AbstractXMLPipe filter,
  +                                                  ProgrammingLanguage language) {
  +        PreProcessFilter prefilter = new PreProcessFilter(filter, filename, language);
  +        prefilter.enableLogging(getLogger());
  +        return prefilter;
       }
   
       /**
  @@ -133,16 +135,14 @@
        * the input document.
        *
        * @param logicsheetMarkupGenerator the logicsheet markup generator
  -     * @param resolver the entity resolver
        * @return XMLFilter the filter that build on the fly the transformer chain
        */
       protected TransformerChainBuilderFilter getTransformerChainBuilder(
  -        LogicsheetCodeGenerator logicsheetMarkupGenerator,
  -        SourceResolver resolver)
  +        LogicsheetCodeGenerator logicsheetMarkupGenerator)
       {
           CocoonTransformerChainBuilderFilter filter =
               new CocoonTransformerChainBuilderFilter(
  -                logicsheetMarkupGenerator, resolver);
  +                logicsheetMarkupGenerator);
           filter.enableLogging(getLogger());
           return filter;
       }
  @@ -150,11 +150,10 @@
       // This is required here to avoid IllegalAccessError when
       // CocoonTransformerChainBuilderFilter invokes the method.
       protected void addLogicsheetToList(LanguageDescriptor language,
  -                                       String logicsheetLocation,
  -                                       SourceResolver resolver)
  +                                       String logicsheetLocation)
           throws IOException, SAXException, ProcessingException
       {
  -        super.addLogicsheetToList(language, logicsheetLocation, resolver);
  +        super.addLogicsheetToList(language, logicsheetLocation);
       }
   
       /**
  @@ -199,9 +198,11 @@
        *
        * @see org.xml.sax.ContentHandler
        */
  -    public class PreProcessFilter extends XMLFilterImpl implements LogEnabled {
  +    public class PreProcessFilter extends AbstractXMLPipe implements LogEnabled {
           protected Logger log;
   
  +        protected AbstractXMLPipe filter;
  +
           protected String filename;
   
           protected boolean isRootElem;
  @@ -214,10 +215,25 @@
            * @param filename the filename
            * @param language the programming language
            */
  -        public PreProcessFilter (String filename, ProgrammingLanguage language) {
  +        public PreProcessFilter (AbstractXMLPipe filter, String filename, ProgrammingLanguage language) {
               super ();
               this.filename = filename;
               this.language = language;
  +            // Put meself in front of filter
  +            super.setConsumer(this.filter = filter);
  +        }
  +
  +        public void setConsumer(XMLConsumer consumer) {
  +            // Add consumer after filter
  +            this.filter.setConsumer(consumer);
  +        }
  +
  +        public void setContentHandler(ContentHandler handler) {
  +            this.filter.setContentHandler(handler);
  +        }
  +
  +        public void setLexicalHandler(LexicalHandler handler) {
  +            this.filter.setLexicalHandler(handler);
           }
   
           public void enableLogging(Logger logger) {
  @@ -317,13 +333,11 @@
   
           /**
            * @param logicsheetMarkupGenerator the code generator
  -         * @param resolver the entity resolver
            */
           public CocoonTransformerChainBuilderFilter(
  -            LogicsheetCodeGenerator logicsheetMarkupGenerator,
  -            SourceResolver resolver)
  +            LogicsheetCodeGenerator logicsheetMarkupGenerator)
           {
  -            super(logicsheetMarkupGenerator, resolver);
  +            super(logicsheetMarkupGenerator);
           }
   
           /**
  @@ -350,8 +364,7 @@
                       String href = data.substring(start, end);
   
                       try {
  -                        CocoonMarkupLanguage.this.addLogicsheetToList(
  -                            language, href, this.resolver);
  +                        CocoonMarkupLanguage.this.addLogicsheetToList(language, href);
                       } catch (ProcessingException pe) {
                           log.warn("ProcessingException in SitemapMarkupLanguage", pe);
                           throw new SAXException (pe);
  @@ -404,8 +417,7 @@
                               && "logicsheet".equals(localName)) {
                           String href = atts.getValue("location");
                           try {
  -                            CocoonMarkupLanguage.this.addLogicsheetToList(
  -                                language, href, this.resolver);
  +                            CocoonMarkupLanguage.this.addLogicsheetToList(language, href);
                           } catch (ProcessingException pe) {
                               log.warn("CocoonMarkupLanguage.startElement", pe);
                               throw new SAXException (pe);
  
  
  
  1.2       +1 -2      cocoon-2.1/src/java/org/apache/cocoon/components/language/markup/Logicsheet.java
  
  Index: Logicsheet.java
  ===================================================================
  RCS file: /home/cvs/cocoon-2.1/src/java/org/apache/cocoon/components/language/markup/Logicsheet.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- Logicsheet.java	9 Mar 2003 00:08:53 -0000	1.1
  +++ Logicsheet.java	22 May 2003 13:02:47 -0000	1.2
  @@ -81,7 +81,6 @@
    * language will be transformed into an equivalent XSLT stylesheet
    * anyway... This class should probably be based on an interface...
    *
  - * @deprecated Use the avalon excalibur xslt processor instead.
    * @author <a href="mailto:ricardo@apache.org">Ricardo Rocha</a>
    * @author <a href="mailto:dims@yahoo.com">Davanum Srinivas</a>
    * @author <a href="mailto:ovidiu@cup.hp.com">Ovidiu Predescu</a>
  
  
  
  1.2       +22 -21    cocoon-2.1/src/java/org/apache/cocoon/components/language/markup/LogicsheetCodeGenerator.java
  
  Index: LogicsheetCodeGenerator.java
  ===================================================================
  RCS file: /home/cvs/cocoon-2.1/src/java/org/apache/cocoon/components/language/markup/LogicsheetCodeGenerator.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- LogicsheetCodeGenerator.java	9 Mar 2003 00:08:53 -0000	1.1
  +++ LogicsheetCodeGenerator.java	22 May 2003 13:02:47 -0000	1.2
  @@ -53,12 +53,13 @@
   import org.apache.avalon.framework.logger.AbstractLogEnabled;
   
   import org.apache.cocoon.ProcessingException;
  +import org.apache.cocoon.components.source.SourceUtil;
  +import org.apache.cocoon.xml.AbstractXMLPipe;
   import org.apache.cocoon.util.TraxErrorHandler;
  +import org.apache.excalibur.source.Source;
   
   import org.xml.sax.ContentHandler;
  -import org.xml.sax.InputSource;
   import org.xml.sax.SAXException;
  -import org.xml.sax.XMLReader;
   
   import javax.xml.transform.OutputKeys;
   import javax.xml.transform.TransformerConfigurationException;
  @@ -75,13 +76,14 @@
    *
    * @author <a href="mailto:ricardo@apache.org">Ricardo Rocha</a>
    * @author <a href="mailto:dims@yahoo.com">Davanum Srinivas</a>
  + * @author <a href="mailto:vgritsenko@apache.org">Vadim Gritsenko</a>
    * @version CVS $Id$
    */
   public class LogicsheetCodeGenerator extends AbstractLogEnabled implements MarkupCodeGenerator {
   
       private ContentHandler serializerContentHandler;
   
  -    private XMLReader rootReader;
  +    private AbstractXMLPipe end;
   
       private TransformerHandler currentParent;
   
  @@ -128,17 +130,17 @@
       }
   
       /**
  -    * Add a logicsheet to the logicsheet list
  -    *
  -    * @param logicsheet The logicsheet to be added
  -    */
  +     * Add a logicsheet to the logicsheet list
  +     *
  +     * @param logicsheet The logicsheet to be added
  +     */
       public void addLogicsheet(Logicsheet logicsheet) throws ProcessingException {
           if (this.currentParent == null) {
               // Setup the first transformer of the chain.
               this.currentParent = logicsheet.getTransformerHandler();
   
               // the parent is the rootReader
  -            this.rootReader.setContentHandler(this.currentParent);
  +            this.end.setContentHandler(this.currentParent);
   
               // Set content handler for the end of the chain : serializer
               this.currentParent.setResult(new SAXResult(this.serializerContentHandler));
  @@ -156,21 +158,20 @@
       }
   
       /**
  -    * Generate source code from the input document. Filename information is
  -    * ignored in the logicsheet-based code generation approach.
  -    *
  -    * @param reader The reader
  -    * @param input The input source
  -    * @param filename The input source original filename
  -    * @return The generated source code
  -    * @exception Exception If an error occurs during code generation
  -    */
  -    public String generateCode(XMLReader reader, InputSource input, String filename) throws Exception {
  +     * Generate source code from the given source. Filename information is
  +     * ignored in the logicsheet-based code generation approach.
  +     *
  +     * @param source The source of the markup
  +     * @return The generated source code
  +     * @exception Exception If an error occurs during code generation
  +     */
  +    public String generateCode(Source source, AbstractXMLPipe filter)
  +            throws Exception {
           try {
               // set the root XMLReader of the transformer chain
  -            this.rootReader = reader;
  +            this.end = filter;
               // start the parsing
  -            this.rootReader.parse(input);
  +            SourceUtil.toSAX(source, filter);
               return this.writer.toString();
           } catch (SAXException e) {
               if(e.getException() != null) {
  
  
  
  1.2       +14 -13    cocoon-2.1/src/java/org/apache/cocoon/components/language/markup/MarkupCodeGenerator.java
  
  Index: MarkupCodeGenerator.java
  ===================================================================
  RCS file: /home/cvs/cocoon-2.1/src/java/org/apache/cocoon/components/language/markup/MarkupCodeGenerator.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- MarkupCodeGenerator.java	9 Mar 2003 00:08:53 -0000	1.1
  +++ MarkupCodeGenerator.java	22 May 2003 13:02:47 -0000	1.2
  @@ -50,26 +50,27 @@
   */
   package org.apache.cocoon.components.language.markup;
   
  -import org.xml.sax.InputSource;
  -import org.xml.sax.XMLReader;
  +import org.apache.excalibur.source.Source;
  +import org.apache.cocoon.xml.AbstractXMLPipe;
   
   /**
    * This interfaces defines the functionality of a source code generator
    *
    * @author <a href="mailto:ricardo@apache.org">Ricardo Rocha</a>
  + * @author <a href="mailto:vgritsenko@apache.org">Vadim Gritsenko</a>
    * @version CVS $Id$
    */
   public interface MarkupCodeGenerator {
  +
       /**
  -    * Generate source code from the input reader. Filename information may be
  -    * needed by certain code-generation approaches and programming languages
  -    *
  -    * @param reader The input reader
  -    * @param input The input source
  -    * @param filename The input source original filename
  -    * @return The generated source code
  -    * @exception Exception If an error occurs during code generation
  -    */
  -    String generateCode(XMLReader reader, InputSource input, String filename)
  +     * Generate source code from the given markup source.
  +     * Start and end specify SAX pre processing pipeline.
  +     *
  +     * @param source The source of the markup program
  +     * @param filter Pre-processing SAX filter
  +     * @return The generated source code
  +     * @exception Exception If an error occurs during code generation
  +     */
  +    String generateCode(Source source, AbstractXMLPipe filter)
           throws Exception;
   }
  
  
  
  1.2       +23 -23    cocoon-2.1/src/java/org/apache/cocoon/components/language/markup/MarkupLanguage.java
  
  Index: MarkupLanguage.java
  ===================================================================
  RCS file: /home/cvs/cocoon-2.1/src/java/org/apache/cocoon/components/language/markup/MarkupLanguage.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- MarkupLanguage.java	9 Mar 2003 00:08:53 -0000	1.1
  +++ MarkupLanguage.java	22 May 2003 13:02:47 -0000	1.2
  @@ -52,8 +52,7 @@
   
   import org.apache.avalon.framework.component.Component;
   import org.apache.cocoon.components.language.programming.ProgrammingLanguage;
  -import org.apache.excalibur.source.SourceResolver;
  -import org.xml.sax.InputSource;
  +import org.apache.excalibur.source.Source;
   
   /**
    * This interface defines a markup language whose SAX producer's instance are to
  @@ -61,33 +60,34 @@
    * document augmenting it with dynamic content
    *
    * @author <a href="mailto:ricardo@apache.org">Ricardo Rocha</a>
  + * @author <a href="mailto:vgritsenko@apache.org">Vadim Gritsenko</a>
    * @version CVS $Id$
    */
   public interface MarkupLanguage extends Component {
   
       String ROLE = MarkupLanguage.class.getName();
  +
       /**
  -    * Return the input document's encoding or <code>null</code> if it is the
  -    * platform's default encoding.
  -    * This method should be called after <code>generateCode<code> method.
  -    *
  -    * @return The input document's encoding
  -    */
  +     * Return the input document's encoding or <code>null</code> if it is the
  +     * platform's default encoding.
  +     * This method should be called after <code>generateCode<code> method.
  +     *
  +     * @return The input document's encoding
  +     */
       String getEncoding();
   
       /**
  -    * Generate source code from the input source for the target
  -    * <code>ProgrammingLanguage</code>.
  -    *
  -    * @param input The input source document
  -    * @param filename The input document's original filename
  -    * @param programmingLanguage The target programming language
  -    * @return The generated source code
  -    * @exception Exception If an error occurs during code generation
  -    */
  -    String generateCode(
  -        InputSource input, String filename,
  -        ProgrammingLanguage programmingLanguage,
  -        SourceResolver resolver
  -    ) throws Exception;
  +     * Generate source code from the input source for the target
  +     * <code>ProgrammingLanguage</code>.
  +     *
  +     * @param source The source document
  +     * @param filename The input document's original filename
  +     * @param programmingLanguage The target programming language
  +     * @return The generated source code
  +     * @exception Exception If an error occurs during code generation
  +     */
  +    String generateCode(Source source,
  +                        String filename,
  +                        ProgrammingLanguage programmingLanguage)
  +            throws Exception;
   }
  
  
  
  1.2       +22 -21    cocoon-2.1/src/java/org/apache/cocoon/components/language/markup/NamedLogicsheet.java
  
  Index: NamedLogicsheet.java
  ===================================================================
  RCS file: /home/cvs/cocoon-2.1/src/java/org/apache/cocoon/components/language/markup/NamedLogicsheet.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- NamedLogicsheet.java	9 Mar 2003 00:08:53 -0000	1.1
  +++ NamedLogicsheet.java	22 May 2003 13:02:47 -0000	1.2
  @@ -69,14 +69,15 @@
    * @version CVS $Id$
    */
   public class NamedLogicsheet extends Logicsheet {
  +
       /**
  -    * The namespace uri
  -    */
  +     * The namespace uri
  +     */
       protected String uri;
   
       /**
  -    * The namespace prefix
  -    */
  +     * The namespace prefix
  +     */
       private String prefix;
   
       public NamedLogicsheet(String systemId, ComponentManager manager, SourceResolver resolver)
  @@ -86,37 +87,37 @@
       }
   
       /**
  -    * Set the logichseet's namespace prefix
  -    *
  -    * @param prefix The namespace prefix
  -    */
  +     * Set the logichseet's namespace prefix
  +     *
  +     * @param prefix The namespace prefix
  +     */
       public void setPrefix(String prefix) {
           this.prefix = prefix;
       }
   
       /**
  -    * Return the logicsheet's namespace prefix
  -    *
  -    * @return The logicsheet's namespace prefix
  -    */
  +     * Return the logicsheet's namespace prefix
  +     *
  +     * @return The logicsheet's namespace prefix
  +     */
       public String getPrefix() {
           return this.prefix;
       }
   
       /**
  -    * Set the logichseet's namespace prefix
  -    *
  -    * @param prefix The namespace prefix
  -    */
  +     * Set the logichseet's uri
  +     *
  +     * @param uri The logicsheet's uri
  +     */
       public void setURI(String uri) {
           this.uri = uri;
       }
   
       /**
  -    * Return the logicsheet's namespace prefix
  -    *
  -    * @return The logicsheet's namespace prefix
  -    */
  +     * Return the logicsheet's namespace prefix
  +     *
  +     * @return The logicsheet's namespace prefix
  +     */
       public String getURI() {
           return this.uri;
       }
  
  
  
  1.2       +10 -8     cocoon-2.1/src/java/org/apache/cocoon/components/language/markup/xsp/XSPMarkupLanguage.java
  
  Index: XSPMarkupLanguage.java
  ===================================================================
  RCS file: /home/cvs/cocoon-2.1/src/java/org/apache/cocoon/components/language/markup/xsp/XSPMarkupLanguage.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- XSPMarkupLanguage.java	9 Mar 2003 00:08:55 -0000	1.1
  +++ XSPMarkupLanguage.java	22 May 2003 13:02:47 -0000	1.2
  @@ -52,10 +52,10 @@
   
   import org.apache.cocoon.components.language.markup.CocoonMarkupLanguage;
   import org.apache.cocoon.components.language.programming.ProgrammingLanguage;
  +import org.apache.cocoon.xml.AbstractXMLPipe;
   
   import org.xml.sax.Attributes;
   import org.xml.sax.SAXException;
  -import org.xml.sax.XMLFilter;
   import org.xml.sax.helpers.AttributesImpl;
   
   import java.util.Stack;
  @@ -92,11 +92,13 @@
        *
        * @see XSPMarkupLanguage.PreProcessFilter
        */
  -    protected XMLFilter getPreprocessFilter( String filename, ProgrammingLanguage language  )
  +    protected AbstractXMLPipe getPreprocessFilter(String filename,
  +                                                  AbstractXMLPipe filter,
  +                                                  ProgrammingLanguage language)
       {
  -        PreProcessFilter filter = new PreProcessFilter(filename, language);
  -        filter.enableLogging(getLogger());
  -        return filter;
  +        PreProcessFilter prefilter = new PreProcessFilter(filter, filename, language);
  +        prefilter.enableLogging(getLogger());
  +        return prefilter;
       }
   
   //
  @@ -111,8 +113,8 @@
   
           private Stack stack;
   
  -        public PreProcessFilter (String filename, ProgrammingLanguage language) {
  -            super(filename, language);
  +        public PreProcessFilter (AbstractXMLPipe filter, String filename, ProgrammingLanguage language) {
  +            super(filter, filename, language);
           }
   
           public void startDocument() throws SAXException {