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

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

<html xmlns="http://www.w3.org/1999/xhtml" xmlns:xi="http://www.w3.org/2001/XInclude" xml:lang="fr">
  <head>
    <title>Extension Apache SIS™ pour OpenOffice / LibreOffice</title>
    <meta charset="UTF-8"/>
    <link rel="stylesheet" type="text/css" href="../openoffice.css"/>
  </head>
  <body>
    <h1>Extension Apache <abbr>SIS</abbr>™ pour OpenOffice / LibreOffice</h1>
    <p>
      <a href="../../">Apache <abbr>SIS</abbr></a> est une boîte à outils offrant quelques uns des services trouvés dans les systèmes d’informations géographiques.
      <abbr title="Spatial Information System">SIS</abbr> est développé comme projet libre sous licence Apache 2
      et peut servir de fondation à des projets indépendants.
      L’extension (<cite>add-in</cite>) pour <a href="http://www.openoffice.org">OpenOffice</a> ou
      <a href="http://www.libreoffice.org/">LibreOffice</a> décrit ici est un pont permettant
      d’accéder à une partie des fonctionnalités de Apache <abbr>SIS</abbr> à partir du tableur Calc.
      Dans un premier temps, seul le module de transformation de coordonnées est ainsi rendu (partiellement) accessible,
      mais nous espérons ajouter des ponts vers d’autres fonctionnalités progressivement.
    </p>

    <ul>
      <li><a href="install.html">Installation de l’extension Apache <abbr>SIS</abbr> pour OpenOffice / LibreOffice</a></li>
      <li><a href="formula.html">Formules ajoutées par l’extension dans Calc</a></li>
      <li><a href="../example.ods">Exemple de feuille de calculs utilisant les formules de l’extension</a></li>
    </ul>
  </body>
</html>
