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

<container xmlns="http://symfony.com/schema/dic/services"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">

    <parameters>
        <parameter key="jms_translation.twig_extension.class">JMS\TranslationBundle\Twig\TranslationExtension</parameter>
        
        <parameter key="jms_translation.extractor_manager.class">JMS\TranslationBundle\Translation\ExtractorManager</parameter>
        <parameter key="jms_translation.extractor.file_extractor.class">JMS\TranslationBundle\Translation\Extractor\FileExtractor</parameter>
        <parameter key="jms_translation.extractor.file.default_php_extractor">JMS\TranslationBundle\Translation\Extractor\File\DefaultPhpFileExtractor</parameter>
        <parameter key="jms_translation.extractor.file.translation_container_extractor">JMS\TranslationBundle\Translation\Extractor\File\TranslationContainerExtractor</parameter>
        <parameter key="jms_translation.extractor.file.twig_extractor">JMS\TranslationBundle\Translation\Extractor\File\TwigFileExtractor</parameter>
        <parameter key="jms_translation.extractor.file.form_extractor.class">JMS\TranslationBundle\Translation\Extractor\File\FormExtractor</parameter>
        <parameter key="jms_translation.extractor.file.validation_extractor.class">JMS\TranslationBundle\Translation\Extractor\File\ValidationExtractor</parameter>
        <parameter key="jms_translation.extractor.file.authentication_message_extractor.class">JMS\TranslationBundle\Translation\Extractor\File\AuthenticationMessagesExtractor</parameter>
        
        <parameter key="jms_translation.loader.symfony.xliff_loader.class">JMS\TranslationBundle\Translation\Loader\Symfony\XliffLoader</parameter>
        <parameter key="jms_translation.loader.xliff_loader.class">JMS\TranslationBundle\Translation\Loader\XliffLoader</parameter>
        <parameter key="jms_translation.loader.symfony_adapter.class">JMS\TranslationBundle\Translation\Loader\SymfonyLoaderAdapter</parameter>
        <parameter key="jms_translation.loader_manager.class">JMS\TranslationBundle\Translation\LoaderManager</parameter>
        
        <parameter key="jms_translation.dumper.php_dumper.class">JMS\TranslationBundle\Translation\Dumper\PhpDumper</parameter>
        <parameter key="jms_translation.dumper.xliff_dumper.class">JMS\TranslationBundle\Translation\Dumper\XliffDumper</parameter>
        <parameter key="jms_translation.dumper.yaml_dumper.class">JMS\TranslationBundle\Translation\Dumper\YamlDumper</parameter>
        <parameter key="jms_translation.dumper.symfony_adapter.class">JMS\TranslationBundle\Translation\Dumper\SymfonyDumperAdapter</parameter>
        
        <parameter key="jms_translation.file_writer.class">JMS\TranslationBundle\Translation\FileWriter</parameter>
        
        <parameter key="jms_translation.updater.class">JMS\TranslationBundle\Translation\Updater</parameter>
        <parameter key="jms_translation.config_factory.class">JMS\TranslationBundle\Translation\ConfigFactory</parameter>
    </parameters>

    <services>
        <service id="jms_translation.updater" class="%jms_translation.updater.class%">
            <argument type="service" id="jms_translation.loader_manager" />
            <argument type="service" id="jms_translation.extractor_manager" />
            <argument type="service" id="logger" />
            <argument type="service" id="jms_translation.file_writer" />
        </service>
        
        <service id="jms_translation.config_factory" class="%jms_translation.config_factory.class%" />
        
        <service id="jms_translation.file_writer" class="%jms_translation.file_writer.class%" public="false" />
        
        <!-- Loaders -->
        <service id="jms_translation.loader.symfony_adapter" class="%jms_translation.loader.symfony_adapter.class%" public="false" abstract="true" />
        <service id="jms_translation.loader_manager" class="%jms_translation.loader_manager.class%" /><!-- public as needed by the TranslateController -->
        <service id="jms_translation.loader.xliff_loader" class="%jms_translation.loader.xliff_loader.class%" public="false">
            <tag name="jms_translation.loader" format="xliff" />
        </service>
        
        <!-- Dumpers -->
        <service id="jms_translation.dumper.php_dumper" class="%jms_translation.dumper.php_dumper.class%" public="false">
            <tag name="jms_translation.dumper" format="php" />
        </service>
        <service id="jms_translation.dumper.xliff_dumper" class="%jms_translation.dumper.xliff_dumper.class%" public="false">
            <call method="setSourceLanguage">
                <argument>%jms_translation.source_language%</argument>
            </call>
            <tag name="jms_translation.dumper" format="xliff" />
        </service>
        <service id="jms_translation.dumper.yaml_dumper" class="%jms_translation.dumper.yaml_dumper.class%" public="false">
            <tag name="jms_translation.dumper" format="yml" />
        </service>
        <service id="jms_translation.dumper.symfony_adapter" class="%jms_translation.dumper.symfony_adapter.class%" public="false" abstract="true" />
        
        <!-- Extractors -->
        <service id="jms_translation.extractor_manager" class="%jms_translation.extractor_manager.class%" public="false">
            <argument type="service" id="jms_translation.extractor.file_extractor" />
            <argument type="service" id="logger" />
        </service>
        
        <!-- File-based extractors -->
        <service id="jms_translation.extractor.file_extractor" class="%jms_translation.extractor.file_extractor.class%" public="false">
            <argument type="service" id="twig" />
            <argument type="service" id="logger" />
        </service>
        <service id="jms_translation.extractor.file.default_php_extractor" class="%jms_translation.extractor.file.default_php_extractor%" public="false">
            <argument type="service" id="jms_translation.doc_parser" />
            <tag name="jms_translation.file_visitor" />
        </service>
        <service id="jms_translation.extractor.file.form_extractor" class="%jms_translation.extractor.file.form_extractor.class%" public="false">
            <argument type="service" id="jms_translation.doc_parser" />
            <tag name="jms_translation.file_visitor" />
        </service>
        <service id="jms_translation.extractor.file.translation_container_extractor" class="%jms_translation.extractor.file.translation_container_extractor%" public="false">
            <tag name="jms_translation.file_visitor" />
        </service>
        <service id="jms_translation.extractor.file.twig_extractor" class="%jms_translation.extractor.file.twig_extractor%" public="false">
            <argument type="service" id="twig" />
            <tag name="jms_translation.file_visitor" />
        </service>
        <service id="jms_translation.extractor.file.validation_extractor" class="%jms_translation.extractor.file.validation_extractor.class%" public="false">
            <argument type="service" id="validator.mapping.class_metadata_factory" />
            <tag name="jms_translation.file_visitor" />
        </service>
        <service id="jms_translation.extractor.file.authentication_message_extractor" class="%jms_translation.extractor.file.authentication_message_extractor.class%" public="false">
            <argument type="service" id="jms_translation.doc_parser" />
            <tag name="jms_translation.file_visitor" />
        </service>
        
        <!-- Util -->
        <service id="jms_translation.doc_parser" class="Doctrine\Common\Annotations\DocParser" public="false">
            <call method="setImports">
                <argument type="collection">
                    <argument key="desc">JMS\TranslationBundle\Annotation\Desc</argument>
                    <argument key="meaning">JMS\TranslationBundle\Annotation\Meaning</argument>
                    <argument key="ignore">JMS\TranslationBundle\Annotation\Ignore</argument>
                </argument>
            </call>
            <call method="setIgnoreNotImportedAnnotations">
                <argument>true</argument>
            </call>
        </service>

        <service id="jms_translation.twig_extension" class="%jms_translation.twig_extension.class%">
            <argument type="service" id="translator" />
            <argument>%kernel.debug%</argument>
            <tag name="twig.extension" />
        </service>
    </services>
</container>