#**************************************************************
#
#  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.
#
#**************************************************************

# This file defines the list of extensions that are preregistered or bundled with the pack sets.
# At first office start the installation of extensions is completed.

# file:// URLs are interpreted relative to the solver/420/<platform>/bin/ directory to which
# built extensions are delivered by default.

# https:// URLs can be prefixed by an MD5 checksum. If that is present then it is an error if
# the file pointed to by the URL has a different MD5 checksum.
# When the downloaded file name is not the last part of the URL (everything after the final /) then
# the name has to be specified after the URL enclosed in double quotes. In this case, use a
# conventional filename like "dict-en.oxt" or "dict-en_us.oxt" for dictionaries when possible.


# Some extensions that are installed independently of the language.

# The presenter console extension
#[ language=all && ENABLE_XXX ]
#	file://XXX.oxt

# Asturian dictionary
[ language=ast ]
	12cd6a8ddcff6cd6dba788c6f526af26 https://sourceforge.net/projects/aoo-extensions/files/3932/4/ort-ast-20200918.oxt/download "dict-ast.oxt"

# Catalan dictionary
[ language=ca ]
	4cf4e4a9d85f14761d38943b7e1fd76d https://sourceforge.net/projects/aoo-extensions/files/1205/5/ca.3.0.0.oxt/download "dict-ca.oxt"

# Valencian AVL dictionary (this is incompatible with Catalan)
[ language=ca_XV ]
	d425579a9a2e26663abaecdd661be419 https://sourceforge.net/projects/aoo-extensions/files/1475/1/ca-valencia.3.0.0.oxt/download "dict-ca_xv.oxt"

# Valencian RACV dictionary (this is incompatible with Catalan)
[ language=ca_XR ]
	6112a73444a1ad3cf70736649e228f0f https://sourceforge.net/projects/aoo-extensions/files/1395/0/dict_valencian_llit.oxt/download "dict-ca_xr.oxt"

# Danish dictionary (incl. synonyms)
[ language=da ]
	1d5b284845cc66bff275085984800e39 https://sourceforge.net/projects/aoo-extensions/files/1429/10/da_dk-2.6.096.oxt/download "dict-da_dk.oxt"

# German dictionary
[ language=de || language=de_DE || language=nl || language=ru ]
	ea35a6a6761655107da3e99ee56c171f https://sourceforge.net/projects/aoo-extensions/files/1075/15/dict-de_de-frami_2017-01-12.oxt/download "dict-de_de.oxt"

# German (Austria) dictionary
[ language=de || language=de_AT || language=de_DE ]
	0cf6783cb0f1355ef3869aa9699700b3 https://sourceforge.net/projects/aoo-extensions/files/1697/12/dict-de_at-frami_2017-01-12.oxt/download "dict-de_at.oxt"

# German (Switzerland) dictionary
[ language=de || language=de_CH || language=de_DE ]
	48f7f27f22bf1006a6d9f91d55a7cffc https://sourceforge.net/projects/aoo-extensions/files/1699/12/dict-de_ch-frami_2017-01-12.oxt/download "dict-de_ch.oxt"

# English (en_AU, en_CA, en_GB, en_US, en_ZA) dictionary
[ language=en.* || language=de || language=it ]
	08edcbbddc098f84e9995a8ff76235f6 https://sourceforge.net/projects/aoo-extensions/files/17102/68/dict-en-20210801.oxt/download "dict-en.oxt"

# English (USA, en_US) dictionary
[ language==nl || language==ru ]
	e2eab80772ab1aa09716954219351a80 https://sourceforge.net/projects/aoo-extensions/files/1470/1/en_US.oxt/download "dict-en_us.oxt"

# Spanish dictionary
[ language=es || language=ca || language=ca_XV ]
	1b999fcef948148e269161a08e7acf20 https://sourceforge.net/projects/aoo-extensions/files/1657/4/es_es.oxt/download "dict-es_es.oxt"

# Estonian dictionary
[ language=et ]
	142568797ae1490a4477f4ab5fdc200a https://sourceforge.net/projects/aoo-extensions/files/1328/0/dict-et.oxt/download "dict-et.oxt"

# Basque dictionary
[ language=eu ]
	f408bb4a333bea2aec86bffaa4ffa229 https://sourceforge.net/projects/aoo-extensions/files/1383/2/xuxen_4_OOo3.oxt/download "dict-eu.oxt"

# French dictionary
[ language=fr || language=nl || language=de || language=de_DE || language=ca || language=ca_XV ]
	c9bc1278b4bd73cbf0666619ed6bcb8d https://sourceforge.net/projects/aoo-extensions/files/17340/5/lo-oo-ressources-linguistiques-fr-v5.3.oxt/download "dict-fr.oxt"

# Scottish Gaelic dictionary
[ language=gd ]
	b6d877594a0354984c934e069e97c268 https://sourceforge.net/projects/aoo-extensions/files/4587/13/hunspell-gd-3.1.oxt/download "dict-gd.oxt"

# Hungarian dictionary and grammar checker
[ language=hu ]
	d320e43e815c2dfd599dbfb7cd0e41fb https://sourceforge.net/projects/aoo-extensions/files/1283/9/dict-hu.oxt/download "dict-hu.oxt"
	76345f925e34fef2d29bade4f29108e9 https://sourceforge.net/projects/aoo-extensions/files/3423/4/lightproof-hu_HU-1.3.oxt/download "lightproof-hu_hu.oxt"

# Italian dictionary
[ language=it || language=de || language=de_DE ]
	b20c2bf3114bdca5749606ad707e19be https://sourceforge.net/projects/aoo-extensions/files/1204/14/dict-it.oxt/download "dict-it.oxt"

# Khmer dictionary
[ language=km ]
	a22266cfa40fb23a79be27a239321a3f https://sourceforge.net/projects/aoo-extensions/files/1009/1/km_spellchecker_OOo30_V_1.0.2.oxt/download "dict-km.oxt"

# Korean dictionary
[ language=ko ]
	c20c155c47174c1b0ec0a53618044ac3 https://sourceforge.net/projects/aoo-extensions/files/5968/0/Korean_spell-checker-0.5.6_OOo.oxt/download "dict-ko.oxt"

# Lithuanian dictionary
[ language=lt ]
	745e3da3824793c418ea2960f949eb5d https://sourceforge.net/projects/aoo-extensions/files/18950/0/lt_hunspell.oxt/download "dict-lt.oxt"

# Dutch dictionary
[ language=nl ]
	5c0de383ef649cffefc128cfb36b4d43 https://sourceforge.net/projects/aoo-extensions/files/1456/6/nl-dict-v2.00g.oxt/download "dict-nl.oxt"

# Norwegian dictionary
[ language=nb ]
	c06841f7f193e4f083482440999d801b https://sourceforge.net/projects/aoo-extensions/files/1216/2/dictionary-no-no-2.2.oxt/download "dict-no_no.oxt"

# Polish dictionary
[ language=pl ]
	a69f9221864b1360e38ff3f0b0cc9222 https://sourceforge.net/projects/aoo-extensions/files/806/4/pl-dict.oxt/download "dict-pl.oxt"

# Portuguese (European) dictionary
[ language=pt || language=pt_PT ]
	a1414b7be0cacb7a810166833a02fa66 https://sourceforge.net/projects/aoo-extensions/files/1196/41/oo3x-pt-pt-17.5.29.1.oxt/download "dict-pt_pt.oxt"

# Romanian dictionary
[ language=ro ]
	c7e22272fd8de1d50fe3b077153be274 https://sourceforge.net/projects/aoo-extensions/files/1392/10/dict-ro.1.7.oxt/download "dict-ro.oxt"

# Russian dictionary
[ language=ru ]
	93921f14809a22770f1bd89af65015bc https://sourceforge.net/projects/aoo-extensions/files/3233/3/dict_ru_ru-0.3.7.oxt/download "dict-ru.oxt"

# Slovak dictionary
[ language=sk ]
	5a7cec122a215c9f6a906ecb8ad46ee6 https://sourceforge.net/projects/aoo-extensions/files/1143/11/dict-sk.oxt/download "dict-sk.oxt"

# Slovenian dictionary
[ language=sl ]
	a95158fff7aa901938b9bc67c4937a88 https://sourceforge.net/projects/aoo-extensions/files/3280/10/pack-sl.oxt/download "dict-sl.oxt"

# Swedish dictionary
[ language=sv ]
	32ab4edf1496a7cf5469ee1643eb0128 https://sourceforge.net/projects/aoo-extensions/files/5959/1/dict-sv.oxt/download "dict-sv.oxt"

# Ukrainian dictionary
[ language=uk ]
	f43fe8dced70db8e92a01a241f223e25 https://sourceforge.net/projects/aoo-extensions/files/975/16/dict-uk_ua-5.3.1.oxt/download "dict-uk_ua.oxt"

