<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!--
  Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You 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.
-->
<!-- $Id$ -->
<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.3//EN" "http://forrest.apache.org/dtd/document-v13.dtd">
<document>
  <header>
    <title>Apache™ FOP: Bugs and Other Trackable Issues</title>
    <version>$Revision$</version>
  </header>
  <body>
    <p>
      Information on this page applies to enhancement requests and other trackable
issues as well as bugs.
    </p>
    <section id="issues_existing">
      <title>Reported Issues</title>
      <p>A list of unresolved reported bugs can be found at
<link href="http://issues.apache.org/bugzilla/buglist.cgi?bug_status=NEW&amp;bug_status=ASSIGNED&amp;bug_status=REOPENED&amp;email1=&amp;emailtype1=substring&amp;emailassigned_to1=1&amp;email2=&amp;emailtype2=substring&amp;emailreporter2=1&amp;bugidtype=include&amp;bug_id=&amp;changedin=&amp;votes=&amp;chfieldfrom=&amp;chfieldto=Now&amp;chfieldvalue=&amp;product=Fop&amp;short_desc=&amp;short_desc_type=allwordssubstr&amp;long_desc=&amp;long_desc_type=allwordssubstr&amp;bug_file_loc=&amp;bug_file_loc_type=allwordssubstr&amp;keywords=&amp;keywords_type=anywords&amp;field0-0-0=noop&amp;type0-0-0=noop&amp;value0-0-0=">FOP
Open Bugs (Bugzilla)</link>. If you have an interest in an issue already
reported, please consider the following:
      </p>
      <ul>
        <li>If you have insight that may help developers solve an existing problem,
please add comments and/or file attachments to the existing issue.</li>
        <li>If you would like to track the status of the issue, consider adding
your email address to the list of "CC" recipients, so that you will receive
an email as changes are made to the issue.</li>
      </ul>
    </section>
    <section id="issues_new">
      <title>Unreported Issues (Reporting New Issues)</title>
      <p>
        User reports of bugs and requests for enhancements are extremely
        important parts of FOP development, and we appreciate the time you take to help
        us track these issues down.
      </p>
      <ul>
        <li>
          To help us ensure that the bug database is as useful as it should be, please
          use the <link href="gethelp.html">Getting Help</link> checklist to determine whether a bug report should be entered.
        </li>
        <li>
          Review the <link href="http://issues.apache.org/bugzilla/page.cgi?id=bug-writing.html">Apache Bug
          Writing Guidelines</link> before submitting your report.
        </li>
        <li>
          Enter a new issue report at <link href="http://issues.apache.org/bugzilla/enter_bug.cgi?product=Fop">The
          FOP issue database (Bugzilla)</link>. You will be asked to login to an existing Bugzilla account or to
          create a new one. When entering the bug report, please make your description complete and concise.
          If the issue involves a specific input or output file, then you <strong>MUST</strong> include the
          following information in the bug report (preferably as one or more attachments):
          <ul>
            <li>
              an input XSL-FO file (an input XML plus XSLT file is not acceptable, unless and only if the
              issue being reported is related to the built-in XSLT transform processing convenience function provided
              by FOP); this input <strong>SHOULD</strong> be <em>maximally minimal</em>, which means that it should
              contain nothing more than the minimum needed to demonstrate the problem; if you do not take the effort
              to provide a maximally minimal input FO file, then you will be subsequently asked to do so before the
              bug is processed;
            </li>
            <li>
              a resulting output file, preferably in PDF format; if the issue being reported involves a different output
              format, then provide both a PDF output file and the output file for the output format for which the report
              applies;
            </li>
            <li>
              a copy of the FOP configuration file you used (e.g., fop.xconf);
            </li>
            <li>
              if FOP was invoked using the command line (or an equivalent), then a dump of both the input
              command line and any console output (stderr or stdout) produced; if the report involves an
              exception, then this <strong>MUST</strong> include the full stack back trace;
            </li>
            <li>
              information describing the version of FOP you are using and the platform (and OS) on which
              you are invoking FOP;
            </li>
            <li>
              if the report applies to the use of a specific font other than one of the built-in, base 14
              fonts, then information that describes where to obtain the font.
            </li>
          </ul>
        </li>
        <li>
          After submission, a copy of your bug report will be automatically
          sent to the FOP developer discussion list. If additional information is needed to
          process the bug, then the bug will be set to the <code>NEEDSINFO</code> state, and
          you will be asked to provide the additional information. You can avoid this extra
          step by being diligent about providing <strong>all</strong> of the information
          indicated above.
        </li>
      </ul>
    </section>
  </body>
</document>



