diff --git a/SOURCES/abiword-2.6.0-boolean.patch b/SOURCES/abiword-2.6.0-boolean.patch new file mode 100644 index 0000000..9f226c0 --- /dev/null +++ b/SOURCES/abiword-2.6.0-boolean.patch @@ -0,0 +1,13 @@ +diff -u -r abiword-2.6.0.orig/src/text/ptbl/xp/pd_Style.h abiword-2.6.0/src/text/ptbl/xp/pd_Style.h +--- abiword-2.6.0.orig/src/text/ptbl/xp/pd_Style.h 2008-03-18 23:16:20.000000000 +0100 ++++ abiword-2.6.0/src/text/ptbl/xp/pd_Style.h 2008-03-25 17:14:23.000000000 +0100 +@@ -23,6 +23,9 @@ + #ifndef PD_STYLE_H + #define PD_STYLE_H + ++#ifndef FALSE ++#define FALSE 0 ++#endif /* FALSE */ + #include "ut_types.h" + #include "pt_Types.h" + #include "ut_xml.h" diff --git a/SOURCES/abiword-2.6.0-windowshelppaths.patch b/SOURCES/abiword-2.6.0-windowshelppaths.patch new file mode 100644 index 0000000..45a1bbc --- /dev/null +++ b/SOURCES/abiword-2.6.0-windowshelppaths.patch @@ -0,0 +1,254 @@ +diff -u -r abiword-docs-2.6.0.orig/ABW/fr-FR/howto/howtoword.abw abiword-docs-2.6.0/ABW/fr-FR/howto/howtoword.abw +--- abiword-docs-2.6.0.orig/ABW/fr-FR/howto/howtoword.abw 2008-03-18 23:19:26.000000000 +0100 ++++ abiword-docs-2.6.0/ABW/fr-FR/howto/howtoword.abw 2008-03-25 16:17:20.000000000 +0100 +@@ -23,7 +23,7 @@ +

Il est presque inévitable qu'à un certain moment, vous aurez le besoin d'expédier un document que vous avez créé avec AbiWord à une personne utilisant Microsoft Word ou ouvrir un document créé avec Microsoft Word avec AbiWord. Heureusement, il est facile de réaliser ces transferts.

+

Visualiser un document AbiWord avec Microsoft Word

+

Jusqu'à ce que Microsoft annonce le support des fichiers d'AbiWord, les documents créés avec AbiWord nécessiteront d'être exportés dans un format que Word peut lire. L'enregistrement au format Rich Text Format permet de réaliser facilement cette exportation.

+-

++

+

+

Le format Rich Text est couramment utilisé par les produits Microsoft Office et ils n'auront aucune difficulté à importer les documents enregistrés ainsi.

+

Visualiser les documents Word avec AbiWord

+@@ -31,7 +31,7 @@ +

Si vous rencontrez des problèmes, demandez à l'utilisateur de Word d'enregistrer le document au format Rich Text Format (.rtf). Toutes les versions de Microsoft Word peuvent le faire et AbiWord peut ouvrir les fichiers RTF de manière fiable.

+ + +- ++ + iVBORw0KGgoAAAANSUhEUgAAAhwAAAKXCAYAAADJiZNnAAAABmJLR0QA/wD/AP+gvaeTAAAA + CXBIWXMAAAsSAAALEgHS3X78AAAAB3RJTUUH0gUSDDMylHTKNAAAIABJREFUeJzsvV+oJcl5 + 4PlVcwzngh6qG2TUxgtbl9lmu+7QuOvONu6usbBKEuw0eGGEdmE07MO4C4tZ2TMsMy9m9bY9 +diff -u -r abiword-docs-2.6.0.orig/ABW/fr-FR/interface/dialogreplace.abw abiword-docs-2.6.0/ABW/fr-FR/interface/dialogreplace.abw +--- abiword-docs-2.6.0.orig/ABW/fr-FR/interface/dialogreplace.abw 2008-03-18 23:19:26.000000000 +0100 ++++ abiword-docs-2.6.0/ABW/fr-FR/interface/dialogreplace.abw 2008-03-25 16:17:20.000000000 +0100 +@@ -16,7 +16,7 @@ + +
+

Dialogue remplacer

+-

++

+

Rechercher

+

Entrez le mot que vous désirez rechercher dans cette boîte. Il s'agit de la chaîne de recherche. Cette commande recherche la chaîne de caractères ou de nombres que vous entrez. Ainsi, si vous recherchez en, vous trouverez les deux lettres au milieu du mot dent tout autant que le mot en.

+

Respecter la casse

+@@ -33,7 +33,7 @@ +

Ce bouton ferme le dialogue Remplacer.

+
+ +- ++ + iVBORw0KGgoAAAANSUhEUgAAAdkAAACqCAIAAABu5KKOAAAaMElEQVR4nO2dX4gkx33Hfxfa + UAMXmDEyaPWknYcj2jFHtBMd6BaF6BzlQdgPtslDTn7KiRjspxDpIfjyEklvtgPByoOQYgg+ + P8TS6cGnS/BFa5DZPdAxu7Dy3JhE3CxEeJbo2G7wQf/ABZuHqq6urv4zPT3d23u33w/LUl1d +diff -u -r abiword-docs-2.6.0.orig/ABW/fr-FR/interface/workspace.abw abiword-docs-2.6.0/ABW/fr-FR/interface/workspace.abw +--- abiword-docs-2.6.0.orig/ABW/fr-FR/interface/workspace.abw 2008-03-18 23:19:25.000000000 +0100 ++++ abiword-docs-2.6.0/ABW/fr-FR/interface/workspace.abw 2008-03-25 16:17:20.000000000 +0100 +@@ -23,24 +23,24 @@ +
+

L'espace de travail d'AbiWord

+

AbiWord a une apparence très similaire à d'autres traitements de texte, ce qui, nous l'espérons, met à l'aise toute personne qui débute avec le logiciel.

+-

++

+

L'interface familière devrait permettre à la plupart des personnes de démarrer le travail immédiatement. Cependant, certaines caractéristiques sont peut-être nouvelles.

+

Titre de fenêtre

+-

++

+

La fenêtre de titre est similaire à cette de toute autre application, avec une différence toutefois. Notez le caractère * près de Document10. L'astérique signifie que Document10 a été modifié. Ceci fourni un manière simple d'identifier si le document doit être enregistré.

+

Les barres de fonction

+-

Voici les trois plus importantes barres de fonctions. La première, nommée barre de menu, est le meilleur endroit pour se familiariser avec AbiWord. Il est préférable d'y débuter l'exploration des menus pour saisir ce que AbiWord peut faire avec les documents.

++

Voici les trois plus importantes barres de fonctions. La première, nommée barre de menu, est le meilleur endroit pour se familiariser avec AbiWord. Il est préférable d'y débuter l'exploration des menus pour saisir ce que AbiWord peut faire avec les documents.

+

La seconde est la barre d'outils standard et la troisième (au bas) est la barre d'outils de mise en forme.

+

Manipuler les barres

+

AbiWord permet de cacher les barres. Si certaines manquent ou ne sont pas requises vérifiez le menu Affichage > Barres d'outils.

+-

++

+

Barre de saisie

+

+

Pour ceux qui exécutent AbiWord sous GNOME, La barre de saisie localisée à l'extrémité gauche de chaque barre d'outils représente une manières simple offerte à chacun de modifier l'interface à leur convenance. Cliquez la barre de saisie et déplacez-là. La barre d'outils suivra la souris, permettant même à la barre d'outil de survoler une partie quelconque de l'écran.

+

Barre d'état

+

+

La barre d'état permet une vue rapide de l'état du document. A la gauche, AbiWord note la page courante. La boîte du milieu, qui est habituellement vide, affiche un message d'aide rapide décrivant l'option de menu courante.

+-

++

+

Les règles

+

+

En employant les règles, il devient facile de fixer les marges de la page et les tabulations.

+@@ -49,7 +49,7 @@ +

+
+ +- ++ + iVBORw0KGgoAAAANSUhEUgAAAogAAAGNCAIAAAAdDhfDAAAgAElEQVR4nOy9bWwcx5ku+mjR + vqgJmMWMoSw4gh1oCFnIkLZhkhtBGkbBmjoOYDpZwKIdwGZ8FgnlBDYdX2Qt70EiO4u7trPY + WE5wEmuDxKKDbEQZiCXqIpaYQDozOpB2hoKU4QSSyTFsg0NsBDcRE5rGCeEuXDWg+6O6q6ur +@@ -732,7 +732,7 @@ + Wou0TTikLDRhjmgVAQUDQ4DAoNDRir5zy+NoJmoB6UympdYFSExwmp8h7V3X9DzWmFzStIMW + iGVuXG2lztIQVvgtffSrFKSfSwNqoDCo/g+anqxAe88lpQAAAABJRU5ErkJggg== + +- ++ + iVBORw0KGgoAAAANSUhEUgAAAikAAAEyCAIAAACwCNeMAAAACXBIWXMAAABEAAAARACdvuRJ + AABTv0lEQVR42u29f2wcx5nn/bXQflGzYF4MDSfgGEngIbJGKCbGSrw1LCoJTtRqcWHWC1hO + Foi8uRf2yA4SOTns2flj3yR3eC82Du+beA/5oQTrFWXsxT+AtS0DF1kXREdqYYekYYecQAo1 +@@ -1135,7 +1135,7 @@ + MThhNzQ3OWNiNDVjMWM4ZjU4ODEwMjAxODdiNmZkOGRmYmNlZGIwNjWQ4/dNAAAAAElFTkSu + QmCC + +- ++ + iVBORw0KGgoAAAANSUhEUgAAAnwAAABeCAIAAAA2dF4VAAAACXBIWXMAAABEAAAARACdvuRJ + AABD6UlEQVR42u29fYwc1Zkv/HNUXFVHzlWPBdG0BZG7BRY9DVZmOrGYmQVdZjbRzZi9EraJ + BEPeVRgDAjtIiU1WiSHRrk1WG5tEy8VEITNcZRk7UrDNVRhPInO7/cpst9FAz0SGno4ATVvB +@@ -1496,7 +1496,7 @@ + DARcAEBsLLAFAABFC65ZAT5ljHl7Cpt/HGtWAABrMLOCaDgEBABIgTUriEbi4lkAQPkIK4iC + QzsAgFT+AnafvftOpg+NAAAAAElFTkSuQmCC + +- ++ + iVBORw0KGgoAAAANSUhEUgAAAoYAAAAWCAIAAADSEcpEAAAACXBIWXMAAABEAAAARACdvuRJ + AAAKN0lEQVR42u2dXYjc1hXH/wEFjmACEriwAy10TAlxHEq9bgO2ScBx85AtLsROXtYkD0me + 4rSQ2n0o5CnYD/1wCiHbQogTKN0EanYWmnobanZcajxbutkZ8McqtCYa6IIGvFgXMqADvg99 +@@ -1550,7 +1550,7 @@ + N2NlNzE0YWQwMjdlM2M5MWZiMjk0ZTc2ZDNlNDU2ZmQxMjFjZmE4ODZiNWRlMGUzZTNmZjhm + ZTJhZTY0MmU4HyCiUgAAAABJRU5ErkJggg== + +- ++ + iVBORw0KGgoAAAANSUhEUgAAAm8AAACbCAIAAAC7yOv5AAAACXBIWXMAAABEAAAARACdvuRJ + AAAqpUlEQVR42u2df2hlx5XnT4cbqAcaeDJOkGB3icTSxFII69Zug92TMN2eXkgvXoiT/LEd + ZiBW40DayZCN88eS5J9J+4/9kVmSuGdYY7VhZ+3ABsuwiXuH9LZ6iSMpuEfS0G31M4nRE6yZ +diff -u -r abiword-docs-2.6.0.orig/ABW/pl-PL/howto/howtoword.abw abiword-docs-2.6.0/ABW/pl-PL/howto/howtoword.abw +--- abiword-docs-2.6.0.orig/ABW/pl-PL/howto/howtoword.abw 2008-03-18 23:19:15.000000000 +0100 ++++ abiword-docs-2.6.0/ABW/pl-PL/howto/howtoword.abw 2008-03-25 16:17:21.000000000 +0100 +@@ -24,7 +24,7 @@ +

Podgląd dokumentów AbiWorda w programie Microsoft Word

+

Jakkolwiek Microsoft zapowiada wsparcie dla plików AbiWorda, to przede wszystkim dokumenty tworzone w AbiWordzie powinny być eksportowane do formatu czytelnego dla programu Microsoft Word. Najłatwiej to zrobić przez zapisanie pliku w postaci Rich Text Format.

+

+-

++

+

+

Rich Text Format często jest używany przez pakiet oprogramowania biurowego firmy Microsoft i nie będzie problemów z importem dokumentów zapisanych w ten sposób.

+

Podgląd dokumentów Microsoft Word w AbiWordzie

+@@ -32,7 +32,7 @@ +

Jeśli napotykasz problemy, to poproś użytkownika programu Microsoft Word, aby zapisywał dokumenty jako Rich Text Format (.rtf). Wszystkie wersje programu Microsoft Word mogą zapisywać pliki w tym formacie, a AbiWord potrafi wiernie odczytywać pliki typu RTF.

+ + +- ++ + iVBORw0KGgoAAAANSUhEUgAAAl0AAAGYCAIAAAGAKvBwAAAACXBIWXMAAAsSAAALEgHS3X78 + AAAACXRFWHRDb21tZW50AACJKo0GAAAgAElEQVR4nOxdCXQUxbru6Z59Jvu+IU9Qr7jh8Yrg + Coq4IKiIinAFFFxYghCQhASyEQj7GgKB7CsJgYCAEJLM9ARCUNGrjyvi9TxChCBclsBlMWzp +diff -u -r abiword-docs-2.6.0.orig/ABW/pl-PL/interface/workspace.abw abiword-docs-2.6.0/ABW/pl-PL/interface/workspace.abw +--- abiword-docs-2.6.0.orig/ABW/pl-PL/interface/workspace.abw 2008-03-18 23:19:16.000000000 +0100 ++++ abiword-docs-2.6.0/ABW/pl-PL/interface/workspace.abw 2008-03-25 16:17:21.000000000 +0100 +@@ -25,24 +25,24 @@ +

Obszar roboczy AbiWorda

+

Obszar roboczy jest podobny do tych, jakie znamy z innych edytorów tekstu. Dlatego każdy nowy użytkownik AbiWorda może się czuć jak u siebie w domu.

+

+-

++

+

+

Znajomy interfejs pozwala większości użytkownikom od razu rozpocząć pracę. Tym niemniej niektóre możliwości będą nowością.

+

+

Okno tytułu

+

+-

++

+

+

Okno tytułu jest podobne do okien innych aplikacji, z jedną jednak różnicą. Zwóć uwagę na gwiazdkę * obok “Dokument_10“. Gwiazdka oznacza, że “Dokument_10“ został zmodyfikowany. W ten prosty sposób AbiWord podpowiada ci, że dokument powinien być zapisany.

+

Paski funkcji

+-

++

+

+

Oto trzy podstawowe paski funkcji. Pierwszy, nazywany Paskiem Menu, to najlepsze miejsce, by zapoznać się z AbiWordem. Najlepiej po prostu przejrzyj każde menu, wtedy poznasz wszystkie komendy, jakich AbiWord może użyć do dokumentów.

+

Drugi to pasek “Standardowy”, trzeci z wyżej pokazanych (na dole) to pasek "Formatowanie".

+

Paski robocze

+

AbiWord pozwala na ukrywanie pasków narzędzi. Jeśli któregoś brakuje albo nie jest potrzebny, sprawdź w Widok > Paski narzędzi.

+

+-

++

+

Pasek uchwytu

+

+

+@@ -50,14 +50,14 @@ +

Użytkownicy, którzy uruchamiają AbiWorda w środowisku GNOME, znajdą pasek uchwytu umieszczony na skraju lewej części każdego z pasków narzędziowych, który pozwala w prosty sposób zmodyfikować interfejs wedle życzenia. Kliknij na pasek uchwytu i przeciągnij. Pasek narzędziowy będzie przesuwać się wzdłuż toru myszki, może nawet wisieć nad dowolną częścią ekranu.

+

Pasek statusu

+

+-

++

+

+

W pasku statusu znajdziesz skrótowy opis statusu dokumentu. W lewej części paska AbiWord wyświetla kolejny numer strony oraz liczbę wszystkich stron. Następnie w środkowej części, która najczęściej jest pusta, wyświetlany jest krótki pomocniczy opis bieżącej opcji menu. W prawej części paska podany jest tryb pracy klawiatury (+INS, czyli tryb wstawiania, albo -ins, czyli tryb zastępowania) oraz nazwa aktualnego szablonu.

+

+-

++

+

Linijka

+

+-

++

+

+

Używając linijki możesz w łatwy sposób definiować na stronie marginesy oraz tabulatory.

+ +@@ -65,7 +65,7 @@ +

+ + +- ++ + iVBORw0KGgoAAAANSUhEUgAAApwAAAFhCAIAAAElyt0+AAAACXBIWXMAAAsSAAALEgHS3X78 + AAAACXRFWHRDb21tZW50AACJKo0GAAAgAElEQVR4nOxdCXwURdbvLPC54IeIuMoKArKcUQgi + d2JABIGVKxwGVrmPGMQQzklmJpcCIUBMgpBwJBzBEI4glwR0RTySzISEzAyZJIC6IB6suwLK +@@ -1458,7 +1458,7 @@ + Wou0TTikLDRhjmgVAQUDQ4DAoNDRir5zy+NoJmoB6UympdYFSExwmp8h7V3X9DzWmFzStIMW + iGVuXG2lztIQVvgtffSrFKSfSwNqoDCo/g+anqxAe88lpQAAAABJRU5ErkJggg== + +- ++ + iVBORw0KGgoAAAANSUhEUgAAAp8AAAAYCAIAAAFEpzGAAAAACXBIWXMAAAsSAAALEgHS3X78 + AAAACXRFWHRDb21tZW50AACJKo0GAAAgAElEQVR4nOx9d1RUWbZ38TqYMAdUkAKabCBoS5As + qKAiKIIgWck5JwkigkgWEFSiiIqCtpjaHFqSIlSBobvtoHaY6fj19Dezpue9Wa++fc6+99at +@@ -1824,7 +1824,7 @@ + U3NkC/pNXf3TzsJ2jxwsz3aUR7tKcWkNGacs2/619xjliewpfDI4XsC01wCb6ZPN6En3gjNT + F/m4k8smfLv/D9XFSL9vOncQAAAAAElFTkSuQmCC + +- ++ + iVBORw0KGgoAAAANSUhEUgAAAp0AAADuCAIAAAGDmRu5AAAACXBIWXMAAAsSAAALEgHS3X78 + AAAACXRFWHRDb21tZW50AACJKo0GAAAgAElEQVR4nOxdCVQUx7oeAi5EcXlZTKKXQUUJmgii + kVUkUURwQdwAgwiIwKCAKLLIooiiILKIgiKCgrsoKhHUuAvMsM4gi8bk5ZpEk6OJeZrz7kty +@@ -2753,7 +2753,7 @@ + rHHd5lpt9kxeQWueBlaZZ/Fw+ux83+U9jEtmQ0dDO9V/An0RGn6kluj/H0TjWnMwPK11AAAA + AElFTkSuQmCC + +- ++ + iVBORw0KGgoAAAANSUhEUgAAApwAAAAXCAIAAAFexjhWAAAACXBIWXMAAAsSAAALEgHS3X78 + AAAACXRFWHRDb21tZW50AACJKo0GAAAQ2ElEQVR4nO1dC1fbuBIOr+7v3W0pPUtS2P61S3Cc + 0NiOQ7g/5HZpu6fkzswnjR628yKQkPU5g4+QZVmR5q0ZuTPJhkWRFvmoCXJq0Hz3hSAvgn/L +@@ -2837,7 +2837,7 @@ + pHc9YRw/VddzPPJlb69v8xK8bi3Qo7dknmEXttcXuibeNbhLgrjSHv6qx6vuxdUlifPRnA9/ + vvh8+bGUMol5AkbjCX+D/v/6OPv+i4Ym1QAAAABJRU5ErkJggg== + +- ++ + iVBORw0KGgoAAAANSUhEUgAAAp8AAABWCAIAAAFx9VqcAAAACXBIWXMAAAsSAAALEgHS3X78 + AAAACXRFWHRDb21tZW50AACJKo0GAAAgAElEQVR4nOx9CXxU1bn4HRJwa23rv699z7a2tX1t + ta226nOBWLVqfW3t5trF1rpVpVpbBFlmEpBFUURZFZCloICgoIKAooBCJpN1lsxkwhJIWAOU +@@ -3416,7 +3416,7 @@ + bOnGe+2M3XYot2UDS4L5O8omnlXu+gHXqLwXOB02sXB53k22Z9RfqVlmje7/A8GWRyS/OvHV + AAAAAElFTkSuQmCC + +- ++ + iVBORw0KGgoAAAANSUhEUgAAA1IAAAAhCAIAAAErHT00AAAACXBIWXMAAAsSAAALEgHS3X78 + AAAACXRFWHRDb21tZW50AACJKo0GAAAN60lEQVR4nO1djXLbOA6WNnmmvb1r76l2u0lrqd2H + c+OkzkRy7Tj3KJ26tg8kJIrWD0VLlAjZwHyjcWSGhiASBEkADN69/xejD4Jt8jWO7uL4A3xA +@@ -3486,7 +3486,7 @@ + 5Nm7YpO32pdkR7qtS7ijYei3Sa21MD/MD/PD/DA/18gPH/dai3qzrxHWK0Y91/kYVcAsR85m + FvqatoL+5yYxmH0MBoPBYFwa2MizxP8Bf0pzQLOvs0QAAAAASUVORK5CYII= + +- ++ + iVBORw0KGgoAAAANSUhEUgAAAVQAAACgCAIAAAGrgzPPAAAACXBIWXMAAAsSAAALEgHS3X78 + AAAACXRFWHRDb21tZW50AACJKo0GAAAgAElEQVR4nLRcC3CURbb+h8lr8k4IRALOPwmQ18S8 + ABHxcVnBSMTwlofZSEiCGALy2EgkExRlQQQf4FvR0t3VXXdXry513dq61i2rbkIICZkZEhK3 diff --git a/SOURCES/abiword-2.8.3-desktop.patch b/SOURCES/abiword-2.8.3-desktop.patch new file mode 100644 index 0000000..d908ad4 --- /dev/null +++ b/SOURCES/abiword-2.8.3-desktop.patch @@ -0,0 +1,12 @@ +diff -u -r abiword-2.8.3.orig/abiword.desktop abiword-2.8.3/abiword.desktop +--- abiword-2.8.3.orig/abiword.desktop 2010-04-02 19:59:58.000000000 +0200 ++++ abiword-2.8.3/abiword.desktop 2010-04-08 09:07:01.000000000 +0200 +@@ -6,7 +6,7 @@ + Categories=Office;WordProcessor;GNOME;GTK;X-Red-Hat-Base; + StartupNotify=true + X-Desktop-File-Install-Version=0.9 +-MimeType=application/x-abiword;text/x-abiword;text/x-xml-abiword;text/plain;application/msword;application/rtf;application/vnd.plain;application/xhtml+xml;text/html;application/x-crossmark;application/docbook+xml;application/x-t602;application/vnd.oasis.opendocument.text;application/vnd.oasis.opendocument.text-template;application/vnd.oasis.opendocument.text-web;application/vnd.sun.xml.writer;application/vnd.stardivision.writer;text/vnd.wap.wml;application/wordperfect6;application/wordperfect5.1;application/vnd.wordperfect;application/x-abicollab; ++MimeType=application/x-abiword;text/x-abiword;text/x-xml-abiword;text/plain;application/msword;application/rtf;application/vnd.plain;application/xhtml+xml;text/html;application/x-crossmark;application/docbook+xml;application/x-t602;application/vnd.oasis.opendocument.text;application/vnd.oasis.opendocument.text-template;application/vnd.oasis.opendocument.text-web;application/vnd.sun.xml.writer;application/vnd.stardivision.writer;text/vnd.wap.wml;application/wordperfect6;application/wordperfect5.1;application/vnd.wordperfect;application/x-abicollab;application/x-applix-word;application/x-mswrite;application/x-kword;application/x-mif; + Name=AbiWord + GenericName=Word Processor + Comment=Compose, edit, and view documents diff --git a/SOURCES/abiword-3.0.0-librevenge.patch b/SOURCES/abiword-3.0.0-librevenge.patch new file mode 100644 index 0000000..d85cb1e --- /dev/null +++ b/SOURCES/abiword-3.0.0-librevenge.patch @@ -0,0 +1,1185 @@ +Index: plugins/wpg/xp/ie_impGraphic_WPG.cpp +=================================================================== +--- plugins/wpg/xp/ie_impGraphic_WPG.cpp (revision 34460) ++++ plugins/wpg/xp/ie_impGraphic_WPG.cpp (working copy) +@@ -31,7 +31,7 @@ + #include + #include + #include +-#include ++#include + #include "xap_Module.h" + + using libwpg::WPGraphics; +@@ -38,30 +38,35 @@ + + ABI_PLUGIN_DECLARE("WPG") + +-class AbiWordPerfectGraphicsInputStream : public WPXInputStream ++class AbiWordPerfectGraphicsInputStream : public librevenge::RVNGInputStream + { + public: + AbiWordPerfectGraphicsInputStream(GsfInput *input); + ~AbiWordPerfectGraphicsInputStream(); + +- virtual bool isOLEStream(); +- virtual WPXInputStream * getDocumentOLEStream(); +- virtual WPXInputStream * getDocumentOLEStream(const char * name); ++ virtual bool isStructured(); ++ virtual unsigned subStreamCount(); ++ virtual const char* subStreamName(unsigned); ++ bool existsSubStream(const char*); ++ virtual librevenge::RVNGInputStream* getSubStreamByName(const char*); ++ virtual librevenge::RVNGInputStream* getSubStreamById(unsigned); + virtual const unsigned char *read(unsigned long numBytes, unsigned long &numBytesRead); +- virtual int seek(long offset, WPX_SEEK_TYPE seekType); ++ virtual int seek(long offset, librevenge::RVNG_SEEK_TYPE seekType); + virtual long tell(); +- virtual bool atEOS(); ++ virtual bool isEnd(); + + private: + + GsfInput *m_input; + GsfInfile *m_ole; ++ std::map m_substreams; + }; + + AbiWordPerfectGraphicsInputStream::AbiWordPerfectGraphicsInputStream(GsfInput *input) : +- WPXInputStream(), ++ librevenge::RVNGInputStream(), + m_input(input), +- m_ole(NULL) ++ m_ole(NULL), ++ m_substreams() + { + g_object_ref(G_OBJECT(input)); + } +@@ -86,50 +91,120 @@ + return buf; + } + +-int AbiWordPerfectGraphicsInputStream::seek(long offset, WPX_SEEK_TYPE seekType) ++int AbiWordPerfectGraphicsInputStream::seek(long offset, librevenge::RVNG_SEEK_TYPE seekType) + { + GSeekType gsfSeekType = G_SEEK_SET; + switch(seekType) + { +- case WPX_SEEK_CUR: ++ case librevenge::RVNG_SEEK_CUR: + gsfSeekType = G_SEEK_CUR; + break; +- case WPX_SEEK_SET: ++ case librevenge::RVNG_SEEK_SET: + gsfSeekType = G_SEEK_SET; + break; ++ case librevenge::RVNG_SEEK_END: ++ gsfSeekType = G_SEEK_END; ++ break; + } + + return gsf_input_seek(m_input, offset, gsfSeekType); + } + +-bool AbiWordPerfectGraphicsInputStream::isOLEStream() ++bool AbiWordPerfectGraphicsInputStream::isStructured() + { + if (!m_ole) + m_ole = GSF_INFILE(gsf_infile_msole_new (m_input, NULL)); + +- if (m_ole != NULL) ++ if (!m_ole) ++ m_ole = GSF_INFILE(gsf_infile_zip_new (m_input, NULL)); ++ ++ if (m_ole) + return true; + + return false; + } + +-WPXInputStream * AbiWordPerfectGraphicsInputStream::getDocumentOLEStream() ++unsigned AbiWordPerfectGraphicsInputStream::subStreamCount() + { +- return getDocumentOLEStream("PerfectOffice_MAIN"); ++ if (!m_ole) ++ m_ole = GSF_INFILE(gsf_infile_msole_new (m_input, NULL)); ++ ++ if (!m_ole) ++ m_ole = GSF_INFILE(gsf_infile_zip_new (m_input, NULL)); ++ ++ if (m_ole) ++ { ++ int numChildren = gsf_infile_num_children(m_ole); ++ if (numChildren > 0) ++ return numChildren; ++ return 0; ++ } ++ ++ return 0; + } + +-WPXInputStream * AbiWordPerfectGraphicsInputStream::getDocumentOLEStream(const char * name) ++const char * AbiWordPerfectGraphicsInputStream::subStreamName(unsigned id) + { +- WPXInputStream *documentStream = NULL; ++ if (!m_ole) ++ m_ole = GSF_INFILE(gsf_infile_msole_new (m_input, NULL)); + + if (!m_ole) ++ m_ole = GSF_INFILE(gsf_infile_zip_new (m_input, NULL)); ++ ++ if (m_ole) ++ { ++ if ((int)id >= gsf_infile_num_children(m_ole)) ++ { ++ return 0; ++ } ++ std::map::iterator i = m_substreams.lower_bound(id); ++ if (i == m_substreams.end() || m_substreams.key_comp()(id, i->first)) ++ { ++ std::string name = gsf_infile_name_by_index(m_ole, (int)id); ++ i = m_substreams.insert(i, std::map::value_type(id, name)); ++ } ++ return i->second.c_str(); ++ } ++ ++ return 0; ++} ++ ++bool AbiWordPerfectGraphicsInputStream::existsSubStream(const char * name) ++{ ++ if (!m_ole) + m_ole = GSF_INFILE(gsf_infile_msole_new (m_input, NULL)); + ++ if (!m_ole) ++ m_ole = GSF_INFILE(gsf_infile_zip_new (m_input, NULL)); ++ + if (m_ole) + { + GsfInput *document = gsf_infile_child_by_name(m_ole, name); + if (document) + { ++ g_object_unref(G_OBJECT (document)); ++ return true; ++ } ++ } ++ ++ return false; ++} ++ ++librevenge::RVNGInputStream * AbiWordPerfectGraphicsInputStream::getSubStreamByName(const char * name) ++{ ++ librevenge::RVNGInputStream *documentStream = NULL; ++ ++ if (!m_ole) ++ m_ole = GSF_INFILE(gsf_infile_msole_new (m_input, NULL)); ++ ++ if (!m_ole) ++ m_ole = GSF_INFILE(gsf_infile_zip_new (m_input, NULL)); ++ ++ if (m_ole) ++ { ++ GsfInput *document = gsf_infile_child_by_name(m_ole, name); ++ if (document) ++ { + documentStream = new AbiWordPerfectGraphicsInputStream(document); + g_object_unref(G_OBJECT (document)); // the only reference should be encapsulated within the new stream + } +@@ -138,12 +213,35 @@ + return documentStream; + } + ++librevenge::RVNGInputStream * AbiWordPerfectGraphicsInputStream::getSubStreamById(unsigned id) ++{ ++ librevenge::RVNGInputStream *documentStream = NULL; ++ ++ if (!m_ole) ++ m_ole = GSF_INFILE(gsf_infile_msole_new (m_input, NULL)); ++ ++ if (!m_ole) ++ m_ole = GSF_INFILE(gsf_infile_zip_new (m_input, NULL)); ++ ++ if (m_ole) ++ { ++ GsfInput *document = gsf_infile_child_by_index(m_ole, (int)id); ++ if (document) ++ { ++ documentStream = new AbiWordPerfectGraphicsInputStream(document); ++ g_object_unref(G_OBJECT (document)); // the only reference should be encapsulated within the new stream ++ } ++ } ++ ++ return documentStream; ++} ++ + long AbiWordPerfectGraphicsInputStream::tell() + { + return gsf_input_tell(m_input); + } + +-bool AbiWordPerfectGraphicsInputStream::atEOS() ++bool AbiWordPerfectGraphicsInputStream::isEnd() + { + return gsf_input_eof(m_input); + } +@@ -244,14 +342,24 @@ + UT_Error IE_Imp_WordPerfectGraphics::importGraphic(GsfInput *input, FG_Graphic **ppfg) + { + AbiWordPerfectGraphicsInputStream gsfInput(input); +- WPXString svgOutput; +- if (WPGraphics::generateSVG(&gsfInput, svgOutput)) ++ librevenge::RVNGString svgOutput; ++ librevenge::RVNGStringVector vec; ++ librevenge::RVNGSVGDrawingGenerator generator(vec, ""); ++ ++ if (!libwpg::WPGraphics::parse(&gsfInput, &generator) || vec.empty() || vec[0].empty()) + { +- GsfInput * svgInput = gsf_input_memory_new((const guint8*)svgOutput.cstr(), svgOutput.len(), false); +- UT_Error result = IE_ImpGraphic::loadGraphic(svgInput, IE_ImpGraphic::fileTypeForSuffix(".svg"), ppfg); +- g_object_unref(svgInput); +- return result; ++ return UT_ERROR; + } +- return UT_ERROR; ++ ++ svgOutput.append("\n"); ++ svgOutput.append("\n"); ++ svgOutput.append(vec[0]); ++ svgOutput.append("\n"); ++ ++ GsfInput * svgInput = gsf_input_memory_new((const guint8*)svgOutput.cstr(), svgOutput.len(), false); ++ UT_Error result = IE_ImpGraphic::loadGraphic(svgInput, IE_ImpGraphic::fileTypeForSuffix(".svg"), ppfg); ++ g_object_unref(svgInput); ++ return result; + } + +Index: plugins/wpg/plugin.m4 +=================================================================== +--- plugins/wpg/plugin.m4 (revision 34460) ++++ plugins/wpg/plugin.m4 (working copy) +@@ -1,5 +1,5 @@ + +-wpg_pkgs="$gsf_req libwpg-0.2 >= 0.2.0 libwpd-0.9 >= 0.9.0 libwpd-stream-0.9 >= 0.9.0" ++wpg_pkgs="libwpg-0.3 $gsf_req" + wpg_deps="no" + + if test "$enable_wpg" != ""; then +Index: plugins/wordperfect/xp/ie_imp_WordPerfect.h +=================================================================== +--- plugins/wordperfect/xp/ie_imp_WordPerfect.h (revision 34460) ++++ plugins/wordperfect/xp/ie_imp_WordPerfect.h (working copy) +@@ -30,7 +30,7 @@ + #define IE_IMP_WP_H + + #include +-#include ++#include + #include "ie_imp.h" + #include "ut_string.h" + #include "ut_string_class.h" +@@ -92,7 +92,7 @@ + IE_Imp ** ppie); + }; + +-class IE_Imp_WordPerfect : public IE_Imp, public WPXDocumentInterface ++class IE_Imp_WordPerfect : public IE_Imp, public librevenge::RVNGTextInterface + { + public: + IE_Imp_WordPerfect(PD_Document * pDocument); +@@ -101,69 +101,83 @@ + virtual void pasteFromBuffer(PD_DocumentRange * pDocRange, + UT_uint8 * pData, UT_uint32 lenData, const char * szEncoding = 0); + +- virtual void setDocumentMetaData(const WPXPropertyList &propList); ++ virtual void setDocumentMetaData(const librevenge::RVNGPropertyList &propList); + +- virtual void startDocument(); +- virtual void endDocument(); ++ virtual void startDocument(const librevenge::RVNGPropertyList &propList); ++ virtual void endDocument(); + +- virtual void openPageSpan(const WPXPropertyList &propList); +- virtual void closePageSpan() {} +- virtual void openHeader(const WPXPropertyList &propList); +- virtual void closeHeader(); +- virtual void openFooter(const WPXPropertyList &propList); +- virtual void closeFooter(); ++ virtual void defineEmbeddedFont(const librevenge::RVNGPropertyList & /* propList */) {} + +- virtual void openParagraph(const WPXPropertyList &propList, const WPXPropertyListVector &tabStops); +- virtual void closeParagraph() {} ++ virtual void definePageStyle(const librevenge::RVNGPropertyList &) {} ++ virtual void openPageSpan(const librevenge::RVNGPropertyList &propList); ++ virtual void closePageSpan() {} ++ virtual void openHeader(const librevenge::RVNGPropertyList &propList); ++ virtual void closeHeader(); ++ virtual void openFooter(const librevenge::RVNGPropertyList &propList); ++ virtual void closeFooter(); + +- virtual void openSpan(const WPXPropertyList &propList); +- virtual void closeSpan() {} ++ virtual void defineSectionStyle(const librevenge::RVNGPropertyList &) {} ++ virtual void openSection(const librevenge::RVNGPropertyList &propList); ++ virtual void closeSection() {} + +- virtual void openSection(const WPXPropertyList &propList, const WPXPropertyListVector &columns); +- virtual void closeSection() {} ++ virtual void defineParagraphStyle(const librevenge::RVNGPropertyList &) {} ++ virtual void openParagraph(const librevenge::RVNGPropertyList &propList); ++ virtual void closeParagraph() {} + +- virtual void insertTab(); +- virtual void insertText(const WPXString &text); +- virtual void insertLineBreak(); ++ virtual void defineCharacterStyle(const librevenge::RVNGPropertyList &) {} ++ virtual void openSpan(const librevenge::RVNGPropertyList &propList); ++ virtual void closeSpan() {} + +- virtual void defineOrderedListLevel(const WPXPropertyList &propList); +- virtual void defineUnorderedListLevel(const WPXPropertyList &propList); +- virtual void openOrderedListLevel(const WPXPropertyList &propList); +- virtual void openUnorderedListLevel(const WPXPropertyList &propList); +- virtual void closeOrderedListLevel(); +- virtual void closeUnorderedListLevel(); +- virtual void openListElement(const WPXPropertyList &propList, const WPXPropertyListVector &tabStops); +- virtual void closeListElement() {} ++ virtual void openLink(const librevenge::RVNGPropertyList & /* propList */) {} ++ virtual void closeLink() {} + +- virtual void openFootnote(const WPXPropertyList &propList); +- virtual void closeFootnote(); +- virtual void openEndnote(const WPXPropertyList &propList); +- virtual void closeEndnote(); ++ virtual void insertTab(); ++ virtual void insertText(const librevenge::RVNGString &text); ++ virtual void insertSpace(); ++ virtual void insertLineBreak(); ++ virtual void insertField(const librevenge::RVNGPropertyList & /* propList */) {} + +- virtual void openTable(const WPXPropertyList &propList, const WPXPropertyListVector &columns); +- virtual void openTableRow(const WPXPropertyList &propList); +- virtual void closeTableRow() {} +- virtual void openTableCell(const WPXPropertyList &propList); +- virtual void closeTableCell() {} +- virtual void insertCoveredTableCell(const WPXPropertyList & /*propList*/) {} +- virtual void closeTable(); ++ virtual void openOrderedListLevel(const librevenge::RVNGPropertyList &propList); ++ virtual void openUnorderedListLevel(const librevenge::RVNGPropertyList &propList); ++ virtual void closeOrderedListLevel(); ++ virtual void closeUnorderedListLevel(); ++ virtual void openListElement(const librevenge::RVNGPropertyList &propList); ++ virtual void closeListElement() {} + +- virtual void definePageStyle(const WPXPropertyList&) {} +- virtual void defineParagraphStyle(const WPXPropertyList&, const WPXPropertyListVector&) {} +- virtual void defineCharacterStyle(const WPXPropertyList&) {} +- virtual void defineSectionStyle(const WPXPropertyList&, const WPXPropertyListVector&) {} +- virtual void insertSpace() {} +- virtual void insertField(const WPXString&, const WPXPropertyList&) {} +- virtual void openComment(const WPXPropertyList&) {} +- virtual void closeComment() {} +- virtual void openTextBox(const WPXPropertyList&) {} +- virtual void closeTextBox() {} +- virtual void openFrame(const WPXPropertyList&) {} +- virtual void closeFrame() {} +- virtual void insertBinaryObject(const WPXPropertyList&, const WPXBinaryData&) {} +- virtual void insertEquation(const WPXPropertyList&, const WPXString&) {} ++ virtual void openFootnote(const librevenge::RVNGPropertyList &propList); ++ virtual void closeFootnote(); ++ virtual void openEndnote(const librevenge::RVNGPropertyList &propList); ++ virtual void closeEndnote(); ++ virtual void openComment(const librevenge::RVNGPropertyList & /* propList */) {} ++ virtual void closeComment() {} ++ virtual void openTextBox(const librevenge::RVNGPropertyList & /* propList */) {} ++ virtual void closeTextBox() {} + ++ virtual void openTable(const librevenge::RVNGPropertyList &propList); ++ virtual void openTableRow(const librevenge::RVNGPropertyList &propList); ++ virtual void closeTableRow() {} ++ virtual void openTableCell(const librevenge::RVNGPropertyList &propList); ++ virtual void closeTableCell() {} ++ virtual void insertCoveredTableCell(const librevenge::RVNGPropertyList & /* propList */) {} ++ virtual void closeTable(); + ++ virtual void openFrame(const librevenge::RVNGPropertyList & /* propList */) {} ++ virtual void closeFrame() {} ++ ++ virtual void openGroup(const librevenge::RVNGPropertyList & /* propList */) {} ++ virtual void closeGroup() {} ++ ++ virtual void defineGraphicStyle(const librevenge::RVNGPropertyList & /* propList */) {} ++ virtual void drawRectangle(const librevenge::RVNGPropertyList & /* propList */) {} ++ virtual void drawEllipse(const librevenge::RVNGPropertyList & /* propList */) {} ++ virtual void drawPolygon(const librevenge::RVNGPropertyList & /* propList */) {} ++ virtual void drawPolyline(const librevenge::RVNGPropertyList & /* propList */) {} ++ virtual void drawPath(const librevenge::RVNGPropertyList & /* propList */) {} ++ virtual void drawConnector(const librevenge::RVNGPropertyList & /* propList */) {} ++ ++ virtual void insertBinaryObject(const librevenge::RVNGPropertyList & /* propList */) {} ++ virtual void insertEquation(const librevenge::RVNGPropertyList & /* propList */) {} ++ + protected: + virtual UT_Error _loadFile(GsfInput * input); + UT_Error _appendSection(int numColumns, const float, const float); +Index: plugins/wordperfect/xp/ie_impexp_WordPerfect.cpp +=================================================================== +--- plugins/wordperfect/xp/ie_impexp_WordPerfect.cpp (revision 34460) ++++ plugins/wordperfect/xp/ie_impexp_WordPerfect.cpp (working copy) +@@ -35,7 +35,6 @@ + ABI_PLUGIN_DECLARE("WordPerfect") + + static IE_Imp_WordPerfect_Sniffer * m_ImpSniffer = 0; +-static IE_Exp_WordPerfect_Sniffer * m_ExpSniffer = 0; + + #ifdef HAVE_LIBWPS + static IE_Imp_MSWorks_Sniffer * m_MSWorks_ImpSniffer = 0; +@@ -49,13 +48,7 @@ + m_ImpSniffer = new IE_Imp_WordPerfect_Sniffer (); + } + +- if (!m_ExpSniffer) +- { +- m_ExpSniffer = new IE_Exp_WordPerfect_Sniffer (); +- } +- + UT_ASSERT (m_ImpSniffer); +- UT_ASSERT (m_ExpSniffer); + + #ifdef HAVE_LIBWPS + if (!m_MSWorks_ImpSniffer) +@@ -79,7 +72,7 @@ + mi->usage = "No Usage"; + + IE_Imp::registerImporter (m_ImpSniffer); +- //IE_Exp::registerExporter (m_ExpSniffer); ++ + return 1; + } + +@@ -93,18 +86,11 @@ + mi->usage = 0; + + UT_ASSERT (m_ImpSniffer); +- UT_ASSERT (m_ExpSniffer); + + IE_Imp::unregisterImporter (m_ImpSniffer); + delete m_ImpSniffer; + m_ImpSniffer = 0; + +- /* +- IE_Exp::unregisterExporter (m_ExpSniffer); +- delete m_ExpSniffer; +- m_ExpSniffer = 0; +- */ +- + #ifdef HAVE_LIBWPS + IE_Imp::unregisterImporter (m_MSWorks_ImpSniffer); + delete m_MSWorks_ImpSniffer; +Index: plugins/wordperfect/xp/ie_imp_WordPerfect.cpp +=================================================================== +--- plugins/wordperfect/xp/ie_imp_WordPerfect.cpp (revision 34460) ++++ plugins/wordperfect/xp/ie_imp_WordPerfect.cpp (working copy) +@@ -31,6 +31,8 @@ + #include + #include + #include ++#include ++#include + #include + #include + #include +@@ -60,42 +62,47 @@ + + // Stream class + +-#include ++#include ++#include + + #include + #include + #include ++#include + + #ifdef HAVE_LIBWPS + #include + #endif + +-class AbiWordperfectInputStream : public WPXInputStream ++class AbiWordperfectInputStream : public librevenge::RVNGInputStream + { + public: + AbiWordperfectInputStream(GsfInput *input); + ~AbiWordperfectInputStream(); + +- virtual bool isOLEStream(); +- virtual WPXInputStream * getDocumentOLEStream(); +- +- virtual WPXInputStream * getDocumentOLEStream(const char * name); +- ++ virtual bool isStructured(); ++ virtual unsigned subStreamCount(); ++ virtual const char* subStreamName(unsigned); ++ bool existsSubStream(const char*); ++ virtual librevenge::RVNGInputStream* getSubStreamByName(const char*); ++ virtual librevenge::RVNGInputStream* getSubStreamById(unsigned); + virtual const unsigned char *read(unsigned long numBytes, unsigned long &numBytesRead); +- virtual int seek(long offset, WPX_SEEK_TYPE seekType); ++ virtual int seek(long offset, librevenge::RVNG_SEEK_TYPE seekType); + virtual long tell(); +- virtual bool atEOS(); ++ virtual bool isEnd(); + + private: + + GsfInput *m_input; + GsfInfile *m_ole; ++ std::map m_substreams; + }; + + AbiWordperfectInputStream::AbiWordperfectInputStream(GsfInput *input) : +- WPXInputStream(), ++ librevenge::RVNGInputStream(), + m_input(input), +- m_ole(NULL) ++ m_ole(NULL), ++ m_substreams() + { + g_object_ref(G_OBJECT(input)); + } +@@ -120,50 +127,120 @@ + return buf; + } + +-int AbiWordperfectInputStream::seek(long offset, WPX_SEEK_TYPE seekType) ++int AbiWordperfectInputStream::seek(long offset, librevenge::RVNG_SEEK_TYPE seekType) + { + GSeekType gsfSeekType = G_SEEK_SET; + switch(seekType) + { +- case WPX_SEEK_CUR: ++ case librevenge::RVNG_SEEK_CUR: + gsfSeekType = G_SEEK_CUR; + break; +- case WPX_SEEK_SET: ++ case librevenge::RVNG_SEEK_SET: + gsfSeekType = G_SEEK_SET; + break; ++ case librevenge::RVNG_SEEK_END: ++ gsfSeekType = G_SEEK_END; ++ break; + } + + return gsf_input_seek(m_input, offset, gsfSeekType); + } + +-bool AbiWordperfectInputStream::isOLEStream() ++bool AbiWordperfectInputStream::isStructured() + { + if (!m_ole) + m_ole = GSF_INFILE(gsf_infile_msole_new (m_input, NULL)); + +- if (m_ole != NULL) ++ if (!m_ole) ++ m_ole = GSF_INFILE(gsf_infile_zip_new (m_input, NULL)); ++ ++ if (m_ole) + return true; + + return false; + } + +-WPXInputStream * AbiWordperfectInputStream::getDocumentOLEStream() ++unsigned AbiWordperfectInputStream::subStreamCount() + { +- return getDocumentOLEStream("PerfectOffice_MAIN"); ++ if (!m_ole) ++ m_ole = GSF_INFILE(gsf_infile_msole_new (m_input, NULL)); ++ ++ if (!m_ole) ++ m_ole = GSF_INFILE(gsf_infile_zip_new (m_input, NULL)); ++ ++ if (m_ole) ++ { ++ int numChildren = gsf_infile_num_children(m_ole); ++ if (numChildren > 0) ++ return numChildren; ++ return 0; ++ } ++ ++ return 0; + } + +-WPXInputStream * AbiWordperfectInputStream::getDocumentOLEStream(const char * name) ++const char * AbiWordperfectInputStream::subStreamName(unsigned id) + { +- WPXInputStream *documentStream = NULL; ++ if (!m_ole) ++ m_ole = GSF_INFILE(gsf_infile_msole_new (m_input, NULL)); + + if (!m_ole) ++ m_ole = GSF_INFILE(gsf_infile_zip_new (m_input, NULL)); ++ ++ if (m_ole) ++ { ++ if ((int)id >= gsf_infile_num_children(m_ole)) ++ { ++ return 0; ++ } ++ std::map::iterator i = m_substreams.lower_bound(id); ++ if (i == m_substreams.end() || m_substreams.key_comp()(id, i->first)) ++ { ++ std::string name = gsf_infile_name_by_index(m_ole, (int)id); ++ i = m_substreams.insert(i, std::map::value_type(id, name)); ++ } ++ return i->second.c_str(); ++ } ++ ++ return 0; ++} ++ ++bool AbiWordperfectInputStream::existsSubStream(const char * name) ++{ ++ if (!m_ole) + m_ole = GSF_INFILE(gsf_infile_msole_new (m_input, NULL)); + ++ if (!m_ole) ++ m_ole = GSF_INFILE(gsf_infile_zip_new (m_input, NULL)); ++ + if (m_ole) + { + GsfInput *document = gsf_infile_child_by_name(m_ole, name); + if (document) + { ++ g_object_unref(G_OBJECT (document)); ++ return true; ++ } ++ } ++ ++ return false; ++} ++ ++librevenge::RVNGInputStream * AbiWordperfectInputStream::getSubStreamByName(const char * name) ++{ ++ librevenge::RVNGInputStream *documentStream = NULL; ++ ++ if (!m_ole) ++ m_ole = GSF_INFILE(gsf_infile_msole_new (m_input, NULL)); ++ ++ if (!m_ole) ++ m_ole = GSF_INFILE(gsf_infile_zip_new (m_input, NULL)); ++ ++ if (m_ole) ++ { ++ GsfInput *document = gsf_infile_child_by_name(m_ole, name); ++ if (document) ++ { + documentStream = new AbiWordperfectInputStream(document); + g_object_unref(G_OBJECT (document)); // the only reference should be encapsulated within the new stream + } +@@ -172,12 +249,35 @@ + return documentStream; + } + ++librevenge::RVNGInputStream * AbiWordperfectInputStream::getSubStreamById(unsigned id) ++{ ++ librevenge::RVNGInputStream *documentStream = NULL; ++ ++ if (!m_ole) ++ m_ole = GSF_INFILE(gsf_infile_msole_new (m_input, NULL)); ++ ++ if (!m_ole) ++ m_ole = GSF_INFILE(gsf_infile_zip_new (m_input, NULL)); ++ ++ if (m_ole) ++ { ++ GsfInput *document = gsf_infile_child_by_index(m_ole, (int)id); ++ if (document) ++ { ++ documentStream = new AbiWordperfectInputStream(document); ++ g_object_unref(G_OBJECT (document)); // the only reference should be encapsulated within the new stream ++ } ++ } ++ ++ return documentStream; ++} ++ + long AbiWordperfectInputStream::tell() + { + return gsf_input_tell(m_input); + } + +-bool AbiWordperfectInputStream::atEOS() ++bool AbiWordperfectInputStream::isEnd() + { + return gsf_input_eof(m_input); + } +@@ -247,13 +347,13 @@ + { + AbiWordperfectInputStream gsfInput(input); + +- WPDConfidence confidence = WPDocument::isFileFormatSupported(&gsfInput); +- ++ libwpd::WPDConfidence confidence = libwpd::WPDocument::isFileFormatSupported(&gsfInput); ++ + switch (confidence) + { +- case WPD_CONFIDENCE_NONE: ++ case libwpd::WPD_CONFIDENCE_NONE: + return UT_CONFIDENCE_ZILCH; +- case WPD_CONFIDENCE_EXCELLENT: ++ case libwpd::WPD_CONFIDENCE_EXCELLENT: + return UT_CONFIDENCE_PERFECT; + default: + return UT_CONFIDENCE_ZILCH; +@@ -312,9 +412,9 @@ + UT_Error IE_Imp_WordPerfect::_loadFile(GsfInput * input) + { + AbiWordperfectInputStream gsfInput(input); +- WPDResult error = WPDocument::parse(&gsfInput, static_cast(this), NULL); ++ libwpd::WPDResult error = libwpd::WPDocument::parse(&gsfInput, static_cast(this), NULL); + +- if (error != WPD_OK) ++ if (error != libwpd::WPD_OK) + { + UT_DEBUGMSG(("AbiWordPerfect: ERROR: %i!\n", (int)error)); + return UT_IE_IMPORTERROR; +@@ -329,7 +429,7 @@ + // nada + } + +-void IE_Imp_WordPerfect::setDocumentMetaData(const WPXPropertyList &propList) ++void IE_Imp_WordPerfect::setDocumentMetaData(const librevenge::RVNGPropertyList &propList) + { + if (propList["dc:author"]) + getDoc()->setMetaDataProp(PD_META_KEY_CREATOR, propList["dc:author"]->getStr().cstr()); +@@ -339,15 +439,15 @@ + getDoc()->setMetaDataProp(PD_META_KEY_PUBLISHER, propList["dc:publisher"]->getStr().cstr()); + if (propList["dc:type"]) + getDoc()->setMetaDataProp(PD_META_KEY_TYPE, propList["dc:category"]->getStr().cstr()); +- if (propList["libwpd:keywords"]) +- getDoc()->setMetaDataProp(PD_META_KEY_KEYWORDS, propList["libwpd:keywords"]->getStr().cstr()); ++ if (propList["librevenge:keywords"]) ++ getDoc()->setMetaDataProp(PD_META_KEY_KEYWORDS, propList["librevenge:keywords"]->getStr().cstr()); + if (propList["dc:language"]) + getDoc()->setMetaDataProp(PD_META_KEY_LANGUAGE, propList["dc:language"]->getStr().cstr()); +- if (propList["libwpd:abstract"]) +- getDoc()->setMetaDataProp(PD_META_KEY_DESCRIPTION, propList["libwpd:abstract"]->getStr().cstr()); ++ if (propList["librevenge:abstract"]) ++ getDoc()->setMetaDataProp(PD_META_KEY_DESCRIPTION, propList["librevenge:abstract"]->getStr().cstr()); + } + +-void IE_Imp_WordPerfect::startDocument() ++void IE_Imp_WordPerfect::startDocument(const librevenge::RVNGPropertyList & /* propList */) + { + UT_DEBUGMSG(("AbiWordPerfect: startDocument\n")); + } +@@ -357,7 +457,7 @@ + UT_DEBUGMSG(("AbiWordPerfect: endDocument\n")); + } + +-void IE_Imp_WordPerfect::openPageSpan(const WPXPropertyList &propList) ++void IE_Imp_WordPerfect::openPageSpan(const librevenge::RVNGPropertyList &propList) + { + if (m_bHdrFtrOpenCount) return; // HACK + UT_DEBUGMSG(("AbiWordPerfect: openPageSpan\n")); +@@ -378,7 +478,7 @@ + + } + +-void IE_Imp_WordPerfect::openHeader(const WPXPropertyList & /*propList*/) ++void IE_Imp_WordPerfect::openHeader(const librevenge::RVNGPropertyList & /*propList*/) + { + m_bHdrFtrOpenCount++; + +@@ -420,7 +520,7 @@ + */ + } + +-void IE_Imp_WordPerfect::openFooter(const WPXPropertyList & /*propList*/) ++void IE_Imp_WordPerfect::openFooter(const librevenge::RVNGPropertyList & /*propList*/) + { + m_bHdrFtrOpenCount++; + // see above comments re: openHeader +@@ -432,7 +532,7 @@ + // see above comments re: closeHeader + } + +-void IE_Imp_WordPerfect::openParagraph(const WPXPropertyList &propList, const WPXPropertyListVector &tabStops) ++void IE_Imp_WordPerfect::openParagraph(const librevenge::RVNGPropertyList &propList) + { + if (m_bHdrFtrOpenCount) return; // HACK + UT_DEBUGMSG(("AbiWordPerfect: openParagraph()\n")); +@@ -478,13 +578,15 @@ + (int)(m_topMargin*72), (int)(m_bottomMargin*72), m_leftMarginOffset, m_rightMarginOffset, m_textIndent, lineSpacing); + propBuffer += tmpBuffer; + +- if (tabStops.count() > 0) // Append the tabstop information ++ const librevenge::RVNGPropertyListVector *tabStops = propList.child("style:tab-stops"); ++ ++ if (tabStops && tabStops->count()) // Append the tabstop information + { + propBuffer += "; tabstops:"; + tmpBuffer = ""; +- WPXPropertyListVector::Iter i(tabStops); +- for (i.rewind(); i.next();) +- { ++ librevenge::RVNGPropertyListVector::Iter i(*tabStops); ++ for (i.rewind(); i.next();) ++ { + propBuffer += tmpBuffer; + if (i()["style:position"]) + { +@@ -515,8 +617,8 @@ + propBuffer += "0"; + + tmpBuffer = ","; +- } +- } ++ } ++ } + + + +@@ -543,7 +645,7 @@ + } + } + +-void IE_Imp_WordPerfect::openSpan(const WPXPropertyList &propList) ++void IE_Imp_WordPerfect::openSpan(const librevenge::RVNGPropertyList &propList) + { + if (m_bHdrFtrOpenCount) return; // HACK + UT_DEBUGMSG(("AbiWordPerfect: Appending current text properties\n")); +@@ -614,13 +716,14 @@ + X_CheckDocumentError(appendFmt(propsArray)); + } + +-void IE_Imp_WordPerfect::openSection(const WPXPropertyList &propList, const WPXPropertyListVector &columns) ++void IE_Imp_WordPerfect::openSection(const librevenge::RVNGPropertyList &propList) + { + if (m_bHdrFtrOpenCount) return; // HACK + UT_DEBUGMSG(("AbiWordPerfect: openSection\n")); + + float marginLeft = 0.0f, marginRight = 0.0f; +- int columnsCount = ((columns.count() == 0) ? 1 : columns.count()); ++ const librevenge::RVNGPropertyListVector *columns = propList.child("style:columns"); ++ int columnsCount = ((!columns || !columns->count()) ? 1 : columns->count()); + + // TODO: support spaceAfter + if (propList["fo:start-indent"]) +@@ -647,7 +750,7 @@ + X_CheckDocumentError(appendSpan(&ucs,1)); + } + +-void IE_Imp_WordPerfect::insertText(const WPXString &text) ++void IE_Imp_WordPerfect::insertText(const librevenge::RVNGString &text) + { + if (m_bHdrFtrOpenCount) return; // HACK + if (text.len()) +@@ -658,6 +761,15 @@ + } + } + ++void IE_Imp_WordPerfect::insertSpace() ++{ ++ if (m_bHdrFtrOpenCount) return; // HACK ++ UT_DEBUGMSG(("AbiWordPerfect: insertSpace\n")); ++ ++ UT_UCS4Char ucs = UCS_SPACE; ++ X_CheckDocumentError(appendSpan(&ucs,1)); ++} ++ + void IE_Imp_WordPerfect::insertLineBreak() + { + if (m_bHdrFtrOpenCount) return; // HACK +@@ -668,12 +780,11 @@ + } + + +- +-void IE_Imp_WordPerfect::defineOrderedListLevel(const WPXPropertyList &propList) ++void IE_Imp_WordPerfect::openOrderedListLevel(const librevenge::RVNGPropertyList &propList) + { + if (m_bHdrFtrOpenCount) return; // HACK +- UT_DEBUGMSG(("AbiWordPerfect: defineOrderedListLevel\n")); +- ++ UT_DEBUGMSG(("AbiWordPerfect: openOrderedListLevel\n")); ++ + int listID = 0, startingNumber = 0, level = 1; + char listType = '1'; + UT_UTF8String textBeforeNumber, textAfterNumber; +@@ -680,12 +791,12 @@ + float listLeftOffset = 0.0f; + float listMinLabelWidth = 0.0f; + +- if (propList["libwpd:id"]) +- listID = propList["libwpd:id"]->getInt(); ++ if (propList["librevenge:id"]) ++ listID = propList["librevenge:id"]->getInt(); + if (propList["text:start-value"]) + startingNumber = propList["text:start-value"]->getInt(); +- if (propList["libwpd:level"]) +- level = propList["libwpd:level"]->getInt(); ++ if (propList["librevenge:level"]) ++ level = propList["librevenge:level"]->getInt(); + if (propList["style:num-prefix"]) + textBeforeNumber += propList["style:num-prefix"]->getStr().cstr(); + if (propList["style:num-suffix"]) +@@ -716,22 +827,38 @@ + m_pCurrentListDefinition->setListMinLabelWidth(level, listMinLabelWidth); + _updateDocumentOrderedListDefinition(m_pCurrentListDefinition, level, listType, textBeforeNumber, textAfterNumber, startingNumber); + } ++ ++ m_iCurrentListLevel++; + } + +-void IE_Imp_WordPerfect::defineUnorderedListLevel(const WPXPropertyList &propList) ++void IE_Imp_WordPerfect::closeOrderedListLevel() + { + if (m_bHdrFtrOpenCount) return; // HACK +- UT_DEBUGMSG(("AbiWordPerfect: defineUnorderedListLevel\n")); ++ UT_DEBUGMSG(("AbiWordPerfect: closeOrderedListLevel (level: %i)\n", m_iCurrentListLevel)); ++ UT_ASSERT(m_iCurrentListLevel > 0); ++ ++ // every time we close a list level, the level above it is normally renumbered to start at "1" ++ // again. this code takes care of that. ++ if (m_iCurrentListLevel < (WP6_NUM_LIST_LEVELS-1)) ++ m_pCurrentListDefinition->setLevelNumber(m_iCurrentListLevel + 1, 0); ++ ++ m_iCurrentListLevel--; ++} + ++void IE_Imp_WordPerfect::openUnorderedListLevel(const librevenge::RVNGPropertyList &propList) ++{ ++ if (m_bHdrFtrOpenCount) return; // HACK ++ UT_DEBUGMSG(("AbiWordPerfect: openUNorderedListLevel\n")); ++ + int listID = 0, level = 1; +- WPXString textBeforeNumber, textAfterNumber; ++ librevenge::RVNGString textBeforeNumber, textAfterNumber; + float listLeftOffset = 0.0f; + float listMinLabelWidth = 0.0f; + +- if (propList["libwpd:id"]) +- listID = propList["libwpd:id"]->getInt(); +- if (propList["libwpd:level"]) +- level = propList["libwpd:level"]->getInt(); ++ if (propList["librevenge:id"]) ++ listID = propList["librevenge:id"]->getInt(); ++ if (propList["librevenge:level"]) ++ level = propList["librevenge:level"]->getInt(); + if (propList["text:space-before"]) + listLeftOffset = propList["text:space-before"]->getDouble(); + if (propList["text:min-label-width"]) +@@ -752,39 +879,10 @@ + m_pCurrentListDefinition->setListMinLabelWidth(level, listMinLabelWidth); + _updateDocumentUnorderedListDefinition(m_pCurrentListDefinition, level); + } +-} + +-//void IE_Imp_WordPerfect::openOrderedListLevel(const int listID) +-void IE_Imp_WordPerfect::openOrderedListLevel(const WPXPropertyList & /*propList*/) +-{ +- if (m_bHdrFtrOpenCount) return; // HACK +- UT_DEBUGMSG(("AbiWordPerfect: openOrderedListLevel\n")); +- + m_iCurrentListLevel++; + } + +-void IE_Imp_WordPerfect::closeOrderedListLevel() +-{ +- if (m_bHdrFtrOpenCount) return; // HACK +- UT_DEBUGMSG(("AbiWordPerfect: closeOrderedListLevel (level: %i)\n", m_iCurrentListLevel)); +- UT_ASSERT(m_iCurrentListLevel > 0); +- +- // every time we close a list level, the level above it is normally renumbered to start at "1" +- // again. this code takes care of that. +- if (m_iCurrentListLevel < (WP6_NUM_LIST_LEVELS-1)) +- m_pCurrentListDefinition->setLevelNumber(m_iCurrentListLevel + 1, 0); +- +- m_iCurrentListLevel--; +-} +- +-void IE_Imp_WordPerfect::openUnorderedListLevel(const WPXPropertyList & /*propList*/) +-{ +- if (m_bHdrFtrOpenCount) return; // HACK +- UT_DEBUGMSG(("AbiWordPerfect: openUNorderedListLevel\n")); +- +- m_iCurrentListLevel++; +-} +- + void IE_Imp_WordPerfect::closeUnorderedListLevel() + { + if (m_bHdrFtrOpenCount) return; // HACK +@@ -796,7 +894,7 @@ + + // ASSUMPTION: We assume that unordered lists will always pass a number of "0". unpredictable behaviour + // may result otherwise +-void IE_Imp_WordPerfect::openListElement(const WPXPropertyList &propList, const WPXPropertyListVector & /*tabStops*/) ++void IE_Imp_WordPerfect::openListElement(const librevenge::RVNGPropertyList &propList) + { + if (m_bHdrFtrOpenCount) return; // HACK + UT_DEBUGMSG(("AbiWordPerfect: openListElement\n")); +@@ -885,7 +983,7 @@ + X_CheckDocumentError(appendSpan(&ucs,1)); + } + +-void IE_Imp_WordPerfect::openFootnote(const WPXPropertyList & /*propList*/) ++void IE_Imp_WordPerfect::openFootnote(const librevenge::RVNGPropertyList & /*propList*/) + { + if (m_bHdrFtrOpenCount) return; // HACK + +@@ -934,7 +1032,7 @@ + X_CheckDocumentError(appendStrux(PTX_EndFootnote,NULL)); + } + +-void IE_Imp_WordPerfect::openEndnote(const WPXPropertyList & /*propList*/) ++void IE_Imp_WordPerfect::openEndnote(const librevenge::RVNGPropertyList & /*propList*/) + { + if (m_bHdrFtrOpenCount) return; // HACK + const gchar** propsArray = NULL; +@@ -975,7 +1073,7 @@ + X_CheckDocumentError(appendStrux(PTX_EndEndnote,NULL)); + } + +-void IE_Imp_WordPerfect::openTable(const WPXPropertyList &propList, const WPXPropertyListVector &columns) ++void IE_Imp_WordPerfect::openTable(const librevenge::RVNGPropertyList &propList) + { + if (m_bHdrFtrOpenCount) return; // HACK + // TODO: handle 'marginLeftOffset' and 'marginRightOffset' +@@ -1000,14 +1098,18 @@ + } + } + +- propBuffer += "table-column-props:"; +- WPXPropertyListVector::Iter i(columns); +- for (i.rewind(); i.next();) ++ const librevenge::RVNGPropertyListVector *columns = propList.child("librevenge:table-columns"); ++ if (columns) + { +- UT_String tmpBuffer; +- if (i()["style:column-width"]) +- UT_String_sprintf(tmpBuffer, "%s/", i()["style:column-width"]->getStr().cstr()); +- propBuffer += tmpBuffer; ++ propBuffer += "table-column-props:"; ++ librevenge::RVNGPropertyListVector::Iter i(*columns); ++ for (i.rewind(); i.next();) ++ { ++ UT_String tmpBuffer; ++ if (i()["style:column-width"]) ++ UT_String_sprintf(tmpBuffer, "%s/", i()["style:column-width"]->getStr().cstr()); ++ propBuffer += tmpBuffer; ++ } + } + + const gchar* propsArray[3]; +@@ -1018,7 +1120,7 @@ + X_CheckDocumentError(appendStrux(PTX_SectionTable, propsArray)); + } + +-void IE_Imp_WordPerfect::openTableRow(const WPXPropertyList & /*propList*/) ++void IE_Imp_WordPerfect::openTableRow(const librevenge::RVNGPropertyList & /*propList*/) + { + if (m_bHdrFtrOpenCount) return; // HACK + UT_DEBUGMSG(("AbiWordPerfect: openRow\n")); +@@ -1030,14 +1132,14 @@ + m_bInCell = false; + } + +-void IE_Imp_WordPerfect::openTableCell(const WPXPropertyList &propList) ++void IE_Imp_WordPerfect::openTableCell(const librevenge::RVNGPropertyList &propList) + { + if (m_bHdrFtrOpenCount) return; // HACK + int col =0, row = 0, colSpan = 0, rowSpan = 0; +- if (propList["libwpd:column"]) +- col = propList["libwpd:column"]->getInt(); +- if (propList["libwpd:row"]) +- row = propList["libwpd:row"]->getInt(); ++ if (propList["librevenge:column"]) ++ col = propList["librevenge:column"]->getInt(); ++ if (propList["librevenge:row"]) ++ row = propList["librevenge:row"]->getInt(); + if (propList["table:number-columns-spanned"]) + colSpan = propList["table:number-columns-spanned"]->getInt(); + if (propList["table:number-rows-spanned"]) +@@ -1247,9 +1349,9 @@ + virtual UT_Error _loadFile(GsfInput * input) + { + AbiWordperfectInputStream gsfInput(input); +- WPSResult error = WPSDocument::parse(&gsfInput, static_cast(this)); ++ libwps::WPSResult error = libwps::WPSDocument::parse(&gsfInput, static_cast(this)); + +- if (error != WPS_OK) ++ if (error != libwps::WPS_OK) + { + UT_DEBUGMSG(("AbiMSWorks: ERROR: %i!\n", (int)error)); + return UT_IE_IMPORTERROR; +@@ -1286,13 +1388,17 @@ + { + AbiWordperfectInputStream gsfInput(input); + +- WPSConfidence confidence = WPSDocument::isFileFormatSupported(&gsfInput); ++ libwps::WPSKind kind; ++ libwps::WPSConfidence confidence = libwps::WPSDocument::isFileFormatSupported(&gsfInput, kind); ++ ++ if (kind != libwps::WPS_TEXT) ++ confidence = libwps::WPS_CONFIDENCE_NONE; + + switch (confidence) + { +- case WPS_CONFIDENCE_NONE: ++ case libwps::WPS_CONFIDENCE_NONE: + return UT_CONFIDENCE_ZILCH; +- case WPS_CONFIDENCE_EXCELLENT: ++ case libwps::WPS_CONFIDENCE_EXCELLENT: + return UT_CONFIDENCE_PERFECT; + default: + return UT_CONFIDENCE_ZILCH; +Index: plugins/wordperfect/xp/Makefile.am +=================================================================== +--- plugins/wordperfect/xp/Makefile.am (revision 34460) ++++ plugins/wordperfect/xp/Makefile.am (working copy) +@@ -6,8 +6,6 @@ + -DABI_BUILD_VERSION=\"$(VERSION)\" + + libxp_la_SOURCES = \ +- ie_exp_WordPerfect.cpp \ +- ie_exp_WordPerfect.h \ + ie_impexp_WordPerfect.cpp \ + ie_impexp_WordPerfect.h \ + ie_imp_WordPerfect.cpp \ +Index: plugins/wordperfect/xp/ie_impexp_WordPerfect.h +=================================================================== +--- plugins/wordperfect/xp/ie_impexp_WordPerfect.h (revision 34460) ++++ plugins/wordperfect/xp/ie_impexp_WordPerfect.h (working copy) +@@ -24,7 +24,6 @@ + */ + + #include "ie_imp_WordPerfect.h" +-#include "ie_exp_WordPerfect.h" + #include "xap_Module.h" + + #define IE_MIMETYPE_WP_51 "application/wordperfect5.1" +Index: plugins/wordperfect/plugin.m4 +=================================================================== +--- plugins/wordperfect/plugin.m4 (revision 34460) ++++ plugins/wordperfect/plugin.m4 (working copy) +@@ -1,6 +1,6 @@ + +-wordperfect_pkgs="libwpg-0.2 >= 0.2.0 libwpd-0.9 >= 0.9.0 libwpd-stream-0.9 >= 0.9.0 $gsf_req" +-wordperfect_wps_pkgs='libwps-0.2 >= 0.1.0' ++wordperfect_pkgs="libwpd-0.10 $gsf_req" ++wordperfect_wps_pkgs='libwps-0.3' + wordperfect_deps="no" + + WORDPERFECT_CFLAGS= +@@ -29,7 +29,7 @@ + + PKG_CHECK_EXISTS([ $wordperfect_wps_pkgs ], + [ +- wp_deps_pkgs="$wp_deps_pkgs $wordperfect_wps_pkgs" ++ wp_deps_pkgs="$wordperfect_wps_pkgs $wp_deps_pkgs" + WPS_DEFINE=" -DHAVE_LIBWPS" + ]) + diff --git a/SOURCES/abiword-3.0.2-explicit-python.patch b/SOURCES/abiword-3.0.2-explicit-python.patch new file mode 100644 index 0000000..49ff7b1 --- /dev/null +++ b/SOURCES/abiword-3.0.2-explicit-python.patch @@ -0,0 +1,8 @@ +Index: abiword-3.0.2/src/gi-overrides/Makefile.am +=================================================================== +--- abiword-3.0.2.orig/src/gi-overrides/Makefile.am ++++ abiword-3.0.2/src/gi-overrides/Makefile.am +@@ -1,2 +1,2 @@ +-overridesdir = `python -c "import gi; print gi._overridesdir"` ++overridesdir = `$(PYTHON) -c "import gi; print(gi._overridesdir)"` + overrides_PYTHON = Abi.py diff --git a/SOURCES/abiword-3.0.4-pygobject.patch b/SOURCES/abiword-3.0.4-pygobject.patch new file mode 100644 index 0000000..0926131 --- /dev/null +++ b/SOURCES/abiword-3.0.4-pygobject.patch @@ -0,0 +1,22 @@ +From 51787d61993cb3981c18e4cf174fc229734fba1e Mon Sep 17 00:00:00 2001 +From: Jean Brefort +Date: Sun, 6 Dec 2015 11:04:10 +0000 +Subject: [PATCH] Update python override code. Fixes #13745 and #13746, thanks + to David Gutteridge. + +git-svn-id: svn+ssh://svn.abisource.com/svnroot/abiword/trunk@35171 bcba8976-2d24-0410-9c9c-aab3bd5fdfd6 +--- + src/gi-overrides/Abi.py | 2 ++ + 2 files changed, 3 insertions(+), 1 deletion(-) + +diff --git a/src/gi-overrides/Abi.py b/src/gi-overrides/Abi.py +index 666fd61bf4..e3b61b9bf1 100644 +--- a/src/gi-overrides/Abi.py ++++ b/src/gi-overrides/Abi.py +@@ -1,4 +1,6 @@ + import sys ++import gi ++gi.require_version('Gtk', '3.0') + from gi.repository import Gtk + from ..overrides import override + from ..importer import modules diff --git a/SOURCES/abiword.keys b/SOURCES/abiword.keys new file mode 100644 index 0000000..9612750 --- /dev/null +++ b/SOURCES/abiword.keys @@ -0,0 +1,7 @@ +application/x-abiword + open=abiword %f + view=abiword %f + +application/x-abicollab + open=abiword %f + view=abiword %f diff --git a/SOURCES/abiword.mime b/SOURCES/abiword.mime new file mode 100644 index 0000000..5374de7 --- /dev/null +++ b/SOURCES/abiword.mime @@ -0,0 +1,5 @@ +application/x-abiword + ext: abw + +application/x-abicollab + ext: abicollab diff --git a/SOURCES/abiword.xml b/SOURCES/abiword.xml new file mode 100644 index 0000000..9266c57 --- /dev/null +++ b/SOURCES/abiword.xml @@ -0,0 +1,8 @@ + + + + AbiWord Collaborative Document + + + + diff --git a/SPECS/abiword.spec b/SPECS/abiword.spec new file mode 100644 index 0000000..3c77e00 --- /dev/null +++ b/SPECS/abiword.spec @@ -0,0 +1,340 @@ +%define bigversion 3.0 +%define docsversion 3.0.1 + +Name: abiword +Version: 3.0.4 +Release: 1%{?dist} +Epoch: 1 +Summary: Word processing program +License: GPLv2+ +URL: http://www.abisource.com/ + +Source0: http://abisource.com/downloads/abiword/%{version}/source/abiword-%{version}.tar.gz +Source1: http://abisource.com/downloads/abiword/%{version}/source/abiword-docs-%{docsversion}.tar.gz +Source11: abiword.mime +Source12: abiword.keys +Source13: abiword.xml + +Patch0: abiword-2.6.0-windowshelppaths.patch +Patch1: abiword-2.8.3-desktop.patch +Patch2: abiword-2.6.0-boolean.patch +Patch3: abiword-3.0.0-librevenge.patch +Patch4: abiword-3.0.2-explicit-python.patch +Patch5: abiword-3.0.4-pygobject.patch + +BuildRequires: aiksaurus-devel +BuildRequires: aiksaurus-gtk-devel +BuildRequires: asio-devel +BuildRequires: bison +BuildRequires: boost-devel +BuildRequires: bzip2-devel +BuildRequires: cairo-devel +BuildRequires: dbus-glib-devel +BuildRequires: desktop-file-utils +BuildRequires: enchant-devel +BuildRequires: flex +BuildRequires: fribidi-devel +BuildRequires: gcc-c++ +BuildRequires: gobject-introspection-devel +BuildRequires: goffice-devel +BuildRequires: gtk3-devel +# Probably because it's gtk2 based +#BuildRequires: gtkmathview-devel +BuildRequires: libgsf-devel +BuildRequires: libpng-devel +BuildRequires: librevenge-devel +BuildRequires: librsvg2-devel +BuildRequires: libsoup-devel +BuildRequires: libwmf-devel +BuildRequires: libwpd-devel +BuildRequires: libwpg-devel +BuildRequires: libxslt-devel +BuildRequires: link-grammar-devel +BuildRequires: loudmouth-devel +BuildRequires: ots-devel +BuildRequires: pkgconf-pkg-config +BuildRequires: pkgconfig(libwps-0.4) +BuildRequires: poppler-devel +BuildRequires: popt-devel +BuildRequires: python3-gobject +BuildRequires: python3-devel +BuildRequires: python3-setuptools +BuildRequires: readline-devel +BuildRequires: t1lib-devel +BuildRequires: telepathy-glib-devel +BuildRequires: wv-devel +BuildRequires: zlib-devel + +Requires: libabiword = %{epoch}:%{version}-%{release} +Requires: python3-gobject-base + +%description +AbiWord is a cross-platform Open Source word processor. It is full-featured, +while still remaining lean. + + +%package -n libabiword +Summary: Library for developing applications based on AbiWord's core + +%description -n libabiword +Library for developing applications based on AbiWord's core. + + +%package -n libabiword-devel +Summary: Files for developing with libabiword +Requires: libabiword = %{epoch}:%{version}-%{release} + +%description -n libabiword-devel +Includes and definitions for developing with libabiword. + + +%package -n python3-abiword +%{?python_provide:%python_provide python3-abiword} +Summary: Python bindings for developing with libabiword +Requires: libabiword = %{epoch}:%{version}-%{release} + +%description -n python3-abiword +Python bindings for developing with libabiword + + +%prep +# setup abiword +%setup -q -a 1 + +# patch abiword +%patch1 -p1 -b .desktop +%patch2 -p1 -b .boolean +%patch3 -p0 -b .librevenge +%patch4 -p1 -b .explicit_python +%patch5 -p1 -b .pygo + +# setup abiword documentation +pushd abiword-docs-%{docsversion} +%patch0 -p1 -b .windowshelppaths +# some of the help dirs have bad perms (#109261) +find . -type d -exec chmod -c o+rx {} \; +popd + +%build +%configure --enable-plugins --enable-clipart --enable-templates --enable-introspection + +%{make_build} V=1 + +# build the documentation +pushd abiword-docs-%{docsversion} +ABI_DOC_PROG=$(pwd)/../%{name}-%{version}/src/abiword ./make-html.sh +popd + +%install +%{make_install} + +# install the documentation +pushd abiword-docs-%{docsversion} +mkdir -p $RPM_BUILD_ROOT/%{_datadir}/%{name}-%{bigversion}/AbiWord/help +cp -rp help/* $RPM_BUILD_ROOT/%{_datadir}/%{name}-%{bigversion}/AbiWord/help/ +popd + +install -p -m 0644 -D %{SOURCE11} $RPM_BUILD_ROOT%{_datadir}/mime-info/abiword.mime +install -p -m 0644 -D %{SOURCE12} $RPM_BUILD_ROOT%{_datadir}/mime-info/abiword.keys +install -p -m 0644 -D %{SOURCE13} $RPM_BUILD_ROOT%{_datadir}/mime/packages/abiword.xml + +# Remove libtool archives and static libs +find %{buildroot} -name '*.la' -delete +find %{buildroot} -name '*.a' -delete + +%ldconfig_scriptlets -n libabiword + +%files +%{_bindir}/abiword +%{_datadir}/appdata/*.appdata.xml +%{_datadir}/applications/*.desktop +%{_datadir}/mime-info/abiword.mime +%{_datadir}/mime-info/abiword.keys +%{_datadir}/mime/packages/abiword.xml +%{_datadir}/icons/hicolor/*/apps/abiword.png +%{_datadir}/icons/hicolor/scalable/apps/abiword.svg +# Abiword help +%{_datadir}/%{name}-%{bigversion}/AbiWord +%{_mandir}/man1/abiword.1.gz + +%files -n libabiword +%license COPYING COPYRIGHT.TXT +%{_libdir}/libabiword-%{bigversion}.so +%{_libdir}/libAiksaurusGtk3* +%{_libdir}/%{name}-%{bigversion} +%{_libdir}/girepository-1.0/Abi-3.0.typelib +%{_datadir}/%{name}-%{bigversion} +%{_datadir}/dbus-1/services/org.freedesktop.Telepathy.Client.AbiCollab.service +%{_datadir}/telepathy/clients/AbiCollab.client +# Abiword help - included in GUI app +%exclude %{_datadir}/%{name}-%{bigversion}/AbiWord + +%files -n libabiword-devel +%{_includedir}/%{name}-%{bigversion} +%{_libdir}/pkgconfig/%{name}-%{bigversion}.pc +%{_datadir}/gir-1.0/Abi-3.0.gir + +%files -n python3-abiword +%pycached %{python3_sitearch}/gi/overrides/Abi.py + +%changelog +* Sun Feb 2 2020 Peter Robinson 1:3.0.4-4 +- More packaging cleanups and fixes + +* Wed Jan 29 2020 Peter Robinson 1:3.0.4-3 +- Packaging cleanups and fixes + +* Tue Jan 28 2020 Fedora Release Engineering - 1:3.0.4-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild + +* Fri Nov 29 2019 Peter Robinson 1:3.0.4-1 +- Update to 3.0.4 +- Move to python3 gobject introspection bindings +- Disable gtkmathview plugins until requires issue is fixed + +* Wed Jul 24 2019 Fedora Release Engineering - 1:3.0.2-21 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild + +* Sun Feb 17 2019 Igor Gnatenko - 1:3.0.2-20 +- Rebuild for readline 8.0 + +* Fri Feb 01 2019 Caolán McNamara - 1:3.0.2-19 +- Rebuilt for fixed libwmf soname + +* Fri Feb 01 2019 Björn Esser - 1:3.0.2-18 +- Add patch to explicitly use python2 (#1671692) + +* Fri Feb 01 2019 Björn Esser - 1:3.0.2-17 +- Rebuilt for libwmf soname bump + +* Thu Jan 31 2019 Fedora Release Engineering - 1:3.0.2-16 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild + +* Tue Jul 17 2018 Miro Hrončok - 1:3.0.2-15 +- Update Python macros to new packaging standards + (See https://fedoraproject.org/wiki/Changes/Move_usr_bin_python_into_separate_package) + +* Thu Jul 12 2018 Fedora Release Engineering - 1:3.0.2-14 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild + +* Wed Feb 28 2018 Caolán McNamara - 1:3.0.2-13 +- rebuild for fribidi + +* Wed Feb 07 2018 Iryna Shcherbina - 1:3.0.2-12 +- Update Python 2 dependency declarations to new packaging standards + (See https://fedoraproject.org/wiki/FinalizingFedoraSwitchtoPython3) + +* Wed Feb 07 2018 Fedora Release Engineering - 1:3.0.2-11 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild + +* Sun Jan 07 2018 Igor Gnatenko - 1:3.0.2-10 +- Remove obsolete scriptlets + +* Sat Aug 19 2017 Zbigniew Jędrzejewski-Szmek - 1:3.0.2-9 +- Python 2 binary package renamed to python2-abiword + See https://fedoraproject.org/wiki/FinalizingFedoraSwitchtoPython3 + +* Wed Aug 02 2017 Fedora Release Engineering - 1:3.0.2-8 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild + +* Wed Jul 26 2017 Fedora Release Engineering - 1:3.0.2-7 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild + +* Mon May 15 2017 Fedora Release Engineering - 1:3.0.2-6 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_27_Mass_Rebuild + +* Fri Feb 10 2017 Fedora Release Engineering - 1:3.0.2-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild + +* Thu Jan 12 2017 Igor Gnatenko - 1:3.0.2-4 +- Rebuild for readline 7.x + +* Wed Dec 7 2016 Peter Robinson 1:3.0.2-3 +- Fix the black drawing regression with Gtk3.22 + +* Tue Nov 29 2016 Peter Robinson 1:3.0.2-2 +- Run ldconfig for libabiword + +* Tue Nov 29 2016 Peter Robinson 1:3.0.2-1 +- Update to 3.0.2 stable + +* Tue Jul 19 2016 Fedora Release Engineering - 1:3.0.1-12 +- https://fedoraproject.org/wiki/Changes/Automatic_Provides_for_Python_RPM_Packages + +* Sun Apr 10 2016 Peter Robinson 1:3.0.1-11 +- fix parallel build (thanks yselkowi) rhbz 1214395 + +* Sun Apr 10 2016 Peter Robinson 1:3.0.1-10 +- Add patches to fix building with newer gnutls and gcc6 +- Add patch to fix Wordperfect support + +* Wed Feb 03 2016 Fedora Release Engineering - 1:3.0.1-9 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild + +* Wed Jul 29 2015 Fedora Release Engineering - 1:3.0.1-8 +- Rebuilt for https://fedoraproject.org/wiki/Changes/F23Boost159 + +* Wed Jul 22 2015 David Tardon - 1:3.0.1-7 +- rebuild for Boost 1.58 + +* Tue Jun 16 2015 Fedora Release Engineering - 1:3.0.1-6 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild + +* Sat Jun 06 2015 David Tardon - 1:3.0.1-5 +- really enable WordPerfect import +- enable MS Works import + +* Sat May 02 2015 Kalev Lember - 1:3.0.1-4 +- Rebuilt for GCC 5 C++11 ABI change + +* Thu Mar 26 2015 Richard Hughes - 1:3.0.1-3 +- Add an AppData file for the software center + +* Tue Jan 27 2015 Petr Machata - 1:3.0.1-2 +- Rebuild for boost 1.57.0 + +* Wed Dec 24 2014 Peter Robinson 1:3.0.1-1 +- Update to 3.0.1 stable + +* Fri Aug 15 2014 Fedora Release Engineering - 1:3.0.0-14 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild + +* Tue Jul 22 2014 Kalev Lember - 1:3.0.0-13 +- Rebuilt for gobject-introspection 1.41.4 + +* Tue Jul 08 2014 Rex Dieter 1:3.0.0-12 +- update scriptlets (mimeinfo mostly) + +* Mon Jun 30 2014 Jon Ciesla - 1:3.0.0-11 +- Corrected and second patches from Linas Vepstas. + +* Tue Jun 24 2014 Jon Ciesla - 1:3.0.0-10 +- Rebuild for new link-grammar, with patch for API change. +- Add librevenge BuildRequires, modified patch for current librevenge header placement. + +* Fri Jun 06 2014 Fedora Release Engineering - 1:3.0.0-9 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild + +* Tue May 27 2014 David Tardon - 1:3.0.0-8 +- switch to librevenge-based import libs + +* Fri May 23 2014 Petr Machata - 1:3.0.0-7 +- Rebuild for boost 1.55.0 + +* Tue Apr 22 2014 Tomáš Mráz - 1:3.0.0-6 +- Rebuild for new libgcrypt + +* Sat Feb 22 2014 Peter Robinson 1:3.0.0-5 +- Add patch to fix redraw issues of ruler + +* Mon Nov 4 2013 Peter Robinson 1:3.0.0-4 +- Add patch to fix libabiword_init annotation + +* Fri Oct 25 2013 Peter Robinson 1:3.0.0-3 +- Update icon cache on install/update/erase + +* Wed Oct 16 2013 Peter Robinson 1:3.0.0-2 +- Enable gobject-introspection and python bindings + +* Mon Oct 14 2013 Peter Robinson 1:3.0.0-1 +- Update to 3.0.0 stable