#! /bin/sh
. "${srcdir=.}/init.sh"; path_prepend_ . ../src

# Test 'bulk' mode of msgfmt --xml.

cat <<\EOF > mf.appdata.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE component PUBLIC "" "" [
<!ENTITY author1 "Giovanni Campagna">
<!ENTITY author2 "Daiki Ueno">
<!ENTITY author3 "Bilal Elmoussaoui">
]>
<component type="desktop" xmlns:gt="https://www.gnu.org/s/gettext/ns/its/extensions/1.0">
  <id>org.gnome.Characters.desktop</id>
  <name>GNOME Characters</name>
  <summary>Character map application</summary>
  <licence>CC0</licence>
  <description>
    <p>
      Characters is a simple utility application to find and insert
      unusual characters.  It allows you to quickly find the character
      you are looking for by searching for keywords.
    </p>
    <p>
      You can also browse characters by categories, such as
      Punctuation, Pictures, etc.
    </p>
    <p gt:escape="yes">
      Did you know that the copyright sign (&#xa9;, U+00A9) can be written in HTML
      as &amp;#xa9;,
      as &amp;#169;,
      or as &amp;copy;?
    </p>
    <p>Written by &author1;, &author2;, and &author3;.</p>
    <p gt:escape="no">Escape gallery: operator x&amp;y, standard XML entities &amp; &quot; &apos; &amp; &lt; &gt;, character reference &#xa9;, escaped character reference &amp;#xa9;, entity references &copy; &author1;</p>
    <p gt:escape="yes">Escape gallery: operator x&amp;y, standard XML entities &amp; &quot; &apos; &amp; &lt; &gt;, character reference &#xa9;, escaped character reference &amp;#xa9;, entity references &copy; &author1;</p>
  </description>
  <url type="homepage">https://wiki.gnome.org/Design/Apps/CharacterMap</url>
  <updatecontact>dueno_at_src.gnome.org</updatecontact>
</component>
EOF

test -d po || mkdir po

cat <<\EOF > po/fr.po
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2014-03-17 07:36+0900\n"
"PO-Revision-Date: 2014-03-17 08:40+0900\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"

msgid ""
"Characters is a simple utility application to find and insert unusual "
"characters. It allows you to quickly find the character you are looking for "
"by searching for keywords."
msgstr ""
"Caractères est un utilitaire pour chercher et insérer des caractères "
"inhabituels. Il vous permet de trouver rapidement le caractère que vous "
"cherchez par le biais de mots-clés."

msgid ""
"You can also browse characters by categories, such as Punctuation, Pictures, "
"etc."
msgstr ""
"Vous pouvez aussi naviguer dans les caractères par catégories, comme par "
"Ponctuation, Images, etc."

msgid ""
"Did you know that the copyright sign (©, U+00A9) can be written in HTML as "
"&#xa9;, as &#169;, or as &copy;?"
msgstr ""
"Saviez-vous que le signe de copyright (©, U+00A9) peut être écrit en HTML "
"comme &#xa9;, comme &#169; ou comme &copy; ?"

msgid "Written by &author1;, &author2;, and &author3;."
msgstr "Écrit par &author1;, &author2;, et &author3;."

msgid ""
"Escape gallery: operator x&y, standard XML entities & \" ' & < >, character "
"reference ©, escaped character reference &#xa9;, entity references &copy; "
"&author1;"
msgstr ""
"Exposition d'échappements: operateur x&y, entités XML standard & \" ' & < >, "
"caractère ©, caractère échappé &#xa9;, entités &copy; &author1;"
EOF

cat <<\EOF > po/de.po
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2014-03-17 07:36+0900\n"
"PO-Revision-Date: 2014-03-17 08:40+0900\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"

msgid ""
"Characters is a simple utility application to find and insert unusual "
"characters. It allows you to quickly find the character you are looking for by "
"searching for keywords."
msgstr ""
"Zeichen ist ein einfaches Hilfsprogramm zum Auffinden und Einsetzen von selten "
"verwendeten Zeichen. Sie können schnell das gesuchte Zeichen finden, indem Sie "
"nach Schlüsselwörtern suchen."

msgid ""
"You can also browse characters by categories, such as Punctuation, Pictures, "
"etc."
msgstr ""
"Sie können ebenfalls nach Kategorie suchen, wie z.B. nach Zeichensetzung oder "
"Bildern."

msgid ""
"Did you know that the copyright sign (©, U+00A9) can be written in HTML as "
"&#xa9;, as &#169;, or as &copy;?"
msgstr ""
"Wussten Sie, dass das Copyright-Zeichen (©, U+00A9) in HTML als "
"&#xa9;, als &#169;, oder als &copy; "
"geschrieben werden kann?"

msgid "Written by &author1;, &author2;, and &author3;."
msgstr "Geschrieben von &author1;, &author2; und &author3;."

msgid ""
"Escape gallery: operator x&y, standard XML entities & \" ' & < >, character "
"reference ©, escaped character reference &#xa9;, entity references &copy; "
"&author1;"
msgstr ""
"Escape-Beispiele: Operator x&y, Standard-XML Entitäten & \" ' & < >, Zeichen "
"©, escaptes Zeichen &#xa9;, Entitäten &copy; &author1;"
EOF

cat <<\EOF > mf.appdata.xml.ok
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE component PUBLIC "" "" [
<!ENTITY author1 "Giovanni Campagna">
<!ENTITY author2 "Daiki Ueno">
<!ENTITY author3 "Bilal Elmoussaoui">
]>
<component xmlns:gt="https://www.gnu.org/s/gettext/ns/its/extensions/1.0" type="desktop">
  <id>org.gnome.Characters.desktop</id>
  <name>GNOME Characters</name>
  <summary>Character map application</summary>
  <licence>CC0</licence>
  <description>
    <p>
      Characters is a simple utility application to find and insert
      unusual characters.  It allows you to quickly find the character
      you are looking for by searching for keywords.
    </p>
    <p xml:lang="fr">Caractères est un utilitaire pour chercher et insérer des caractères inhabituels. Il vous permet de trouver rapidement le caractère que vous cherchez par le biais de mots-clés.</p>
    <p xml:lang="de">Zeichen ist ein einfaches Hilfsprogramm zum Auffinden und Einsetzen von selten verwendeten Zeichen. Sie können schnell das gesuchte Zeichen finden, indem Sie nach Schlüsselwörtern suchen.</p>
    <p>
      You can also browse characters by categories, such as
      Punctuation, Pictures, etc.
    </p>
    <p xml:lang="fr">Vous pouvez aussi naviguer dans les caractères par catégories, comme par Ponctuation, Images, etc.</p>
    <p xml:lang="de">Sie können ebenfalls nach Kategorie suchen, wie z.B. nach Zeichensetzung oder Bildern.</p>
    <p gt:escape="yes">
      Did you know that the copyright sign (©, U+00A9) can be written in HTML
      as &amp;#xa9;,
      as &amp;#169;,
      or as &amp;copy;?
    </p>
    <p gt:escape="yes" xml:lang="fr">Saviez-vous que le signe de copyright (©, U+00A9) peut être écrit en HTML comme &amp;#xa9;, comme &amp;#169; ou comme &amp;copy; ?</p>
    <p gt:escape="yes" xml:lang="de">Wussten Sie, dass das Copyright-Zeichen (©, U+00A9) in HTML als &amp;#xa9;, als &amp;#169;, oder als &amp;copy; geschrieben werden kann?</p>
    <p>Written by &author1;, &author2;, and &author3;.</p>
    <p xml:lang="fr">Écrit par &author1;, &author2;, et &author3;.</p>
    <p xml:lang="de">Geschrieben von &author1;, &author2; und &author3;.</p>
    <p gt:escape="no">Escape gallery: operator x&amp;y, standard XML entities &amp; " ' &amp; &lt; &gt;, character reference ©, escaped character reference &amp;#xa9;, entity references &copy; &author1;</p>
    <p gt:escape="no" xml:lang="fr">Exposition d'échappements: operateur x&y, entités XML standard & " ' & &lt; &gt;, caractère ©, caractère échappé &amp;#xa9;, entités &copy; &author1;</p>
    <p gt:escape="no" xml:lang="de">Escape-Beispiele: Operator x&y, Standard-XML Entitäten & " ' & &lt; &gt;, Zeichen ©, escaptes Zeichen &amp;#xa9;, Entitäten &copy; &author1;</p>
    <p gt:escape="yes">Escape gallery: operator x&amp;y, standard XML entities &amp; " ' &amp; &lt; &gt;, character reference ©, escaped character reference &amp;#xa9;, entity references &copy; &author1;</p>
    <p gt:escape="yes" xml:lang="fr">Exposition d'échappements: operateur x&amp;y, entités XML standard &amp; " ' &amp; &lt; &gt;, caractère ©, caractère échappé &amp;#xa9;, entités &amp;copy; &amp;author1;</p>
    <p gt:escape="yes" xml:lang="de">Escape-Beispiele: Operator x&amp;y, Standard-XML Entitäten &amp; " ' &amp; &lt; &gt;, Zeichen ©, escaptes Zeichen &amp;#xa9;, Entitäten &amp;copy; &amp;author1;</p>
  </description>
  <url type="homepage">https://wiki.gnome.org/Design/Apps/CharacterMap</url>
  <updatecontact>dueno_at_src.gnome.org</updatecontact>
</component>
EOF

cat <<\EOF > mf.appdata.xml.desired.ok
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE component PUBLIC "" "" [
<!ENTITY author1 "Giovanni Campagna">
<!ENTITY author2 "Daiki Ueno">
<!ENTITY author3 "Bilal Elmoussaoui">
]>
<component xmlns:gt="https://www.gnu.org/s/gettext/ns/its/extensions/1.0" type="desktop">
  <id>org.gnome.Characters.desktop</id>
  <name>GNOME Characters</name>
  <summary>Character map application</summary>
  <licence>CC0</licence>
  <description>
    <p>
      Characters is a simple utility application to find and insert
      unusual characters.  It allows you to quickly find the character
      you are looking for by searching for keywords.
    </p>
    <p xml:lang="fr">Caractères est un utilitaire pour chercher et insérer des caractères inhabituels. Il vous permet de trouver rapidement le caractère que vous cherchez par le biais de mots-clés.</p>
    <p>
      You can also browse characters by categories, such as
      Punctuation, Pictures, etc.
    </p>
    <p xml:lang="fr">Vous pouvez aussi naviguer dans les caractères par catégories, comme par Ponctuation, Images, etc.</p>
    <p gt:escape="yes">
      Did you know that the copyright sign (©, U+00A9) can be written in HTML
      as &amp;#xa9;,
      as &amp;#169;,
      or as &amp;copy;?
    </p>
    <p gt:escape="yes" xml:lang="fr">Saviez-vous que le signe de copyright (©, U+00A9) peut être écrit en HTML comme &amp;#xa9;, comme &amp;#169; ou comme &amp;copy; ?</p>
    <p>Written by &author1;, &author2;, and &author3;.</p>
    <p xml:lang="fr">Écrit par &author1;, &author2;, et &author3;.</p>
    <p gt:escape="no">Escape gallery: operator x&amp;y, standard XML entities &amp; " ' &amp; &lt; &gt;, character reference ©, escaped character reference &amp;#xa9;, entity references &copy; &author1;</p>
    <p gt:escape="no" xml:lang="fr">Exposition d'échappements: operateur x&y, entités XML standard & " ' & &lt; &gt;, caractère ©, caractère échappé &amp;#xa9;, entités &copy; &author1;</p>
    <p gt:escape="yes">Escape gallery: operator x&amp;y, standard XML entities &amp; " ' &amp; &lt; &gt;, character reference ©, escaped character reference &amp;#xa9;, entity references &copy; &author1;</p>
    <p gt:escape="yes" xml:lang="fr">Exposition d'échappements: operateur x&amp;y, entités XML standard &amp; " ' &amp; &lt; &gt;, caractère ©, caractère échappé &amp;#xa9;, entités &amp;copy; &amp;author1;</p>
  </description>
  <url type="homepage">https://wiki.gnome.org/Design/Apps/CharacterMap</url>
  <updatecontact>dueno_at_src.gnome.org</updatecontact>
</component>
EOF

unset LINGUAS

: ${MSGFMT=msgfmt}

# Sanity checks for contradicting options.

${MSGFMT} --xml --template=mf.appdata.xml -d po -o mf.appdata.xml.out \
          >/dev/null 2>/dev/null \
  Exit 1

test -d po/LINGUAS || mkdir po/LINGUAS

${MSGFMT} --xml --template=mf.appdata.xml -d po -o mf.appdata.xml.out \
          >/dev/null 2>/dev/null \
  Exit 1

rm -fr po/LINGUAS

cat <<\EOF > po/LINGUAS
de
fr
EOF

${MSGFMT} --xml --template=mf.appdata.xml -d po \
          >/dev/null 2>/dev/null \
  && Exit 1

${MSGFMT} --xml --template=mf.appdata.xml -d po -o mf.appdata.xml.out -l fr \
          >/dev/null 2>/dev/null \
  && Exit 1

${MSGFMT} --xml --template=mf.appdata.xml -d po -o mf.appdata.xml.out po/fr.po \
          >/dev/null 2>/dev/null \
  && Exit 1

# Proceed to the .desktop file generation.

${MSGFMT} --xml --template=mf.appdata.xml -d po -o mf.appdata.xml.out || Exit 1
: ${DIFF=diff}
${DIFF} mf.appdata.xml.ok mf.appdata.xml.out
test $? = 0 || Exit 1

# Restrict the desired languages with the LINGUAS envvar.

LINGUAS="fr ja" ${MSGFMT} --xml --template=mf.appdata.xml -d po -o mf.appdata.xml.desired.out || Exit 1

: ${DIFF=diff}
${DIFF} mf.appdata.xml.desired.ok mf.appdata.xml.desired.out
test $? = 0 || Exit 1
