<?xml version="1.0"?>
<!--
 * Copyright 2004 The Apache Software Foundation.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
-->
<todo project="DTM Support for XSLTC">
  <devs>
    <person name="Tom Amiro" email="Tom.Amiro@Sun.COM" id="TA"
            expertise="testing">
      Testing.
    </person>
    <person name="Gordon R. Chiu" email="grchiu@ca.ibm.com" id="GC"
            expertise="code">
      Developer on Interpretive Xalan and XSLTC
    </person>
    <person name="Igor Hersht" email="igorh@ca.ibm.com" id="IH"
            expertise="code">
      Developer on Interpretive Xalan and XSLTC
    </person>
    <person name="Morris Kwan" email="mkwan@ca.ibm.com" id="MK"
            expertise="code">
      Developer on Interpretive Xalan and XSLTC
    </person>
    <person name="G. Todd Miller" email="Glenn.Miller@Sun.COM" id="TM"
            expertise="code">
      Developer - key contributor on TrAX.
    </person>
    <person name="Santiago Pericas-Geertsen" email="santiago@cs.bu.edu" id="SP" 
            expertise="code">
      Developer - key contributor on compilation strategy.
    </person>
    <person name="Ilene Seelemann" email="ilene@ca.ibm.com" id="IS"
            expertise="code">
      Developer on Interpretive Xalan and XSLTC
    </person>
    <person name="Henry Zongaro" email="zongaro@ca.ibm.com" id="HZ"
            expertise="code">
      Developer on Interpretive Xalan and XSLTC
    </person>
    <person name="Your Name Here" email="you@example.org" id="unassigned"
            expertise="code">
      This could be you!
    </person>
    <person name="Jacek Ambroziak" email="jacek_ambroziak@yahoo.com" id="JA"
           expertise="code" status='emeritus'>
      Inventor, architect, former lead developer and evangelist.
    </person>
    <person name="Morten J&#216;rgensen" email="morten@xml.apache.org" id="MJ"
            expertise="code, doc" status='emeritus'>
      Former lead developer - key contributor on design documentation, ID/Keys,
      performance, JAXP.
   </person>
  </devs>

  <actions>
    <action category="samples" who="HZ">
       Change samples to no longer use the XSLTC Native API.
    </action>
    <action category="test" who="HZ">
       Change test harness to no longer use XSLTC Native API with jar.xsltc
       target.
    </action>
    <action category="performance" who="MK">
       Investigate performance of SuballocatedIntVector
    </action>
    <action category="performance" who="MK">
       Enable StepPattern[last()] optimization
    </action>
    <action category="packaging" who="MK">
       Enable building stand-alone versions of XSLTC and interpretive Xalan.
    </action>
    <action category="clean-up" who="HZ">
       Drop MultiDOM(?) class
    </action>
    <action category="clean-up" who="HZ">
       Eliminate uses of DTM.ROOTNODE value; it was dropped on MAIN branch
    </action>
    <action category="clean-up" who="HZ">
       Keep XSLTC_DTM up-to-date with changes in HEAD
    </action>
    <action category="documentation" who="HZ">
       Update XSLTC design documentation
    </action>
  </actions>

  <completed>
    <action category="feature" who="MK">
       Add support for incremental building of the DTM
    </action>
    <action category="feature" who="HZ">
       Fix (or abandon?) DOMImpl and SAXImpl readExternal() and writeExternal()
       methods
    </action>
    <action category="documentation" who="HZ">
       Update documentation to remove references to XSLTC Native API
    </action>
    <action category="documentation" who="HZ">
       Update documentation to describe new build procedures, how to select
       right TransformerFactory, etc.
    </action>
    <action category="clean-up, performance" who="MK">
       Reconcile DTM handling of whitespace with XSLTC DOM handling.
       Might improve performance, as well as simplifying code.
    </action>
  </completed>
</todo>
