<?xml version="1.0" encoding="UTF-8"?>

<!--
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.
-->

<faqs id="FAQ" title="Frequently Asked Questions">
  <part id="General">
    <faq id="What would a patch plugin even be used for">
      <question>What would a patch plugin even be used for?</question>
      <answer>
        <p>
          In certain environments direct source modification is not allowed so to make alterations to the source you
          need some patch application process. This plugin seeks to address those situations.
        </p>
      </answer>
    </faq>
    <faq id="Why doesn't this work on Windows">
      <question>Why doesn't this work on Windows?</question>
      <answer>
        <p>
          This plugin wraps the <a href="http://www.gnu.org/software/patch/">GNU patch tool</a>, which must be in your
          <tt>PATH</tt> in order to function properly. A Windows installation usually does not ship with this tool so
          you will need to install it manually. You might be able to get this plugin working within
          <a href="http://cygwin.com/">Cygwin</a> or by using the port
          <a href="http://gnuwin32.sourceforge.net/packages/patch.htm">Patch for Windows</a>.
        </p>
      </answer>
    </faq>
  </part>
</faqs>
