@@ -333,6 +333,7 @@ $config = [
     'service_manager' => [
         'allow_override' => true,
         'factories' => [
+            'MarkdownConverter' => 'VuFind\Service\MarkdownFactory',
             'ProxyManager\Configuration' => 'VuFind\Service\ProxyConfigFactory',
             'VuFind\AjaxHandler\PluginManager' => 'VuFind\ServiceManager\AbstractPluginManagerFactory',
             'VuFind\Auth\EmailAuthenticator' => 'VuFind\Auth\EmailAuthenticatorFactory',
<?php
namespace VuFind\Module\Config;

$config = [
    'router' => [
        'routes' => [
            'default' => [
                'type'    => 'Zend\Router\Http\Segment',
                'options' => [
                    'route'    => '/[:controller[/[:action]]]',
                    'constraints' => [
                        'controller' => '[a-zA-Z][a-zA-Z0-9_-]*',
                        'action'     => '[a-zA-Z][a-zA-Z0-9_-]*',
                    ],
                    'defaults' => [
                        'controller' => 'index',
                        'action'     => 'Home',
                    ],
                ],
            ],
            'alma-webhook' => [
                'type'    => 'Zend\Router\Http\Segment',
                'options' => [
                    'route'    => '/Alma/Webhook/[:almaWebhookAction]',
                    'constraints' => [
                        'controller' => '[a-zA-Z][a-zA-Z0-9_-]*',
                        'action'     => '[a-zA-Z][a-zA-Z0-9_-]*',
                    ],
                    'defaults' => [
                        'controller' => 'Alma',
                        'action' => 'Webhook',
                    ],
                ],
            ],
            'content-page' => [
                'type'    => 'Zend\Router\Http\Segment',
                'options' => [
                    'route'    => '/Content/[:page]',
                    'constraints' => [
                        'page'     => '[a-zA-Z][a-zA-Z0-9_-]*',
                    ],
                    'defaults' => [
                        'controller' => 'Content',
                        'action'     => 'Content',
                    ]
                ],
            ],
            'shortlink' => [
                'type'    => 'Zend\Router\Http\Segment',
                'options' => [
                    'route'    => '/short/[:id]',
                    'constraints' => [
                        'id'     => '[a-zA-Z0-9]+',
                    ],
                    'defaults' => [
                        'controller' => 'Shortlink',
                        'action'     => 'redirect',
                    ]
                ],
            ],
            'legacy-alphabrowse-results' => [
                'type' => 'Zend\Router\Http\Literal',
                'options' => [
                    'route'    => '/AlphaBrowse/Results',
                    'defaults' => [
                        'controller' => 'Alphabrowse',
                        'action'     => 'Home',
                    ]
                ]
            ],
            'legacy-bookcover' => [
                'type' => 'Zend\Router\Http\Literal',
                'options' => [
                    'route'    => '/bookcover.php',
                    'defaults' => [
                        'controller' => 'Cover',
                        'action'     => 'Show',
                    ]
                ]
            ],
            'legacy-summonrecord' => [
                'type' => 'Zend\Router\Http\Literal',
                'options' => [
                    'route'    => '/Summon/Record',
                    'defaults' => [
                        'controller' => 'SummonRecord',
                        'action'     => 'Home',
                    ]
                ]
            ],
            'legacy-worldcatrecord' => [
                'type' => 'Zend\Router\Http\Literal',
                'options' => [
                    'route'    => '/WorldCat/Record',
                    'defaults' => [
                        'controller' => 'WorldcatRecord',
                        'action'     => 'Home',
                    ]
                ]
            ],
            'soap-shibboleth-logout-notification-handler' => [
                'type' => 'Zend\Router\Http\Literal',
                'options' => [
                    'route' => '/soap/shiblogout',
                    'defaults' => [
                        'controller' => 'ShibbolethLogoutNotification',
                        'action' => 'index'
                    ]
                ],
                'child_routes' => [
                    'get' => [
                        'type' => 'method',
                        'options' => [
                            'verb' => 'get',
                            'defaults' => [
                                'action' => 'get'
                            ],
                        ],
                    ],
                    'post' => [
                        'type' => 'method',
                        'options' => [
                            'verb' => 'post',
                            'defaults' => [
                                'action' => 'post'
                            ]
                        ]
                    ]
                ]
            ]
        ],
    ],
    'controllers' => [
        'factories' => [
            'VuFind\Controller\AjaxController' => 'VuFind\Controller\AjaxControllerFactory',
            'VuFind\Controller\AlmaController' => 'VuFind\Controller\AbstractBaseFactory',
            'VuFind\Controller\AlphabrowseController' => 'VuFind\Controller\AbstractBaseFactory',
            'VuFind\Controller\AuthorController' => 'VuFind\Controller\AbstractBaseFactory',
            'VuFind\Controller\AuthorityController' => 'VuFind\Controller\AbstractBaseFactory',
            'VuFind\Controller\BrowseController' => 'VuFind\Controller\AbstractBaseWithConfigFactory',
            'VuFind\Controller\BrowZineController' => 'VuFind\Controller\AbstractBaseFactory',
            'VuFind\Controller\CartController' => 'VuFind\Controller\CartControllerFactory',
            'VuFind\Controller\ChannelsController' => 'VuFind\Controller\ChannelsControllerFactory',
            'VuFind\Controller\CollectionController' => 'VuFind\Controller\AbstractBaseWithConfigFactory',
            'VuFind\Controller\CollectionsController' => 'VuFind\Controller\AbstractBaseWithConfigFactory',
            'VuFind\Controller\CombinedController' => 'VuFind\Controller\AbstractBaseFactory',
            'VuFind\Controller\ConfirmController' => 'VuFind\Controller\AbstractBaseFactory',
            'VuFind\Controller\ContentController' => 'VuFind\Controller\AbstractBaseFactory',
            'VuFind\Controller\CoverController' => 'VuFind\Controller\CoverControllerFactory',
            'VuFind\Controller\EdsController' => 'VuFind\Controller\AbstractBaseFactory',
            'VuFind\Controller\EdsrecordController' => 'VuFind\Controller\AbstractBaseFactory',
            'VuFind\Controller\EITController' => 'VuFind\Controller\AbstractBaseFactory',
            'VuFind\Controller\EITrecordController' => 'VuFind\Controller\AbstractBaseFactory',
            'VuFind\Controller\ErrorController' => 'VuFind\Controller\AbstractBaseFactory',
            'VuFind\Controller\ExternalAuthController' => 'VuFind\Controller\AbstractBaseFactory',
            'VuFind\Controller\FeedbackController' => 'VuFind\Controller\AbstractBaseFactory',
            'VuFind\Controller\Search2Controller' => 'VuFind\Controller\AbstractBaseFactory',
            'VuFind\Controller\Search2recordController' => 'VuFind\Controller\AbstractBaseFactory',
            'VuFind\Controller\Search2collectionController' => 'VuFind\Controller\AbstractBaseWithConfigFactory',
            'VuFind\Controller\HelpController' => 'VuFind\Controller\AbstractBaseFactory',
            'VuFind\Controller\HierarchyController' => 'VuFind\Controller\AbstractBaseFactory',
            'VuFind\Controller\IndexController' => 'VuFind\Controller\IndexControllerFactory',
            'VuFind\Controller\InstallController' => 'VuFind\Controller\AbstractBaseFactory',
            'VuFind\Controller\LibGuidesController' => 'VuFind\Controller\AbstractBaseFactory',
            'VuFind\Controller\LibraryCardsController' => 'VuFind\Controller\AbstractBaseFactory',
            'VuFind\Controller\MissingrecordController' => 'VuFind\Controller\AbstractBaseFactory',
            'VuFind\Controller\MyResearchController' => 'VuFind\Controller\AbstractBaseFactory',
            'VuFind\Controller\OaiController' => 'VuFind\Controller\AbstractBaseFactory',
            'VuFind\Controller\OverdriveController' => 'VuFind\Controller\AbstractBaseFactory',
            'VuFind\Controller\Pazpar2Controller' => 'VuFind\Controller\AbstractBaseFactory',
            'VuFind\Controller\PrimoController' => 'VuFind\Controller\AbstractBaseFactory',
            'VuFind\Controller\PrimorecordController' => 'VuFind\Controller\AbstractBaseFactory',
            'VuFind\Controller\QRCodeController' => 'VuFind\Controller\QRCodeControllerFactory',
            'VuFind\Controller\RecordController' => 'VuFind\Controller\AbstractBaseWithConfigFactory',
            'VuFind\Controller\RecordsController' => 'VuFind\Controller\AbstractBaseFactory',
            'VuFind\Controller\RelaisController' => 'VuFind\Controller\AbstractBaseFactory',
            'VuFind\Controller\SearchController' => 'VuFind\Controller\AbstractBaseFactory',
            'VuFind\Controller\ShibbolethLogoutNotificationController' => 'VuFind\Controller\AbstractBaseFactory',
            'VuFind\Controller\ShortlinkController' => 'VuFind\Controller\AbstractBaseWithConfigFactory',
            'VuFind\Controller\SummonController' => 'VuFind\Controller\AbstractBaseFactory',
            'VuFind\Controller\SummonrecordController' => 'VuFind\Controller\AbstractBaseFactory',
            'VuFind\Controller\TagController' => 'VuFind\Controller\AbstractBaseFactory',
            'VuFind\Controller\UpgradeController' => 'VuFind\Controller\UpgradeControllerFactory',
            'VuFind\Controller\WebController' => 'VuFind\Controller\AbstractBaseFactory',
            'VuFind\Controller\WorldcatController' => 'VuFind\Controller\AbstractBaseFactory',
            'VuFind\Controller\WorldcatrecordController' => 'VuFind\Controller\AbstractBaseFactory',
        ],
        'initializers' => [
            'VuFind\ServiceManager\ServiceInitializer',
        ],
        'aliases' => [
            'AJAX' => 'VuFind\Controller\AjaxController',
            'ajax' => 'VuFind\Controller\AjaxController',
            'Alma' => 'VuFind\Controller\AlmaController',
            'alma' => 'VuFind\Controller\AlmaController',
            'Alphabrowse' => 'VuFind\Controller\AlphabrowseController',
            'alphabrowse' => 'VuFind\Controller\AlphabrowseController',
            'Author' => 'VuFind\Controller\AuthorController',
            'author' => 'VuFind\Controller\AuthorController',
            'Authority' => 'VuFind\Controller\AuthorityController',
            'authority' => 'VuFind\Controller\AuthorityController',
            'Browse' => 'VuFind\Controller\BrowseController',
            'browse' => 'VuFind\Controller\BrowseController',
            'BrowZine' => 'VuFind\Controller\BrowZineController',
            'browzine' => 'VuFind\Controller\BrowZineController',
            'Cart' => 'VuFind\Controller\CartController',
            'cart' => 'VuFind\Controller\CartController',
            'Channels' => 'VuFind\Controller\ChannelsController',
            'channels' => 'VuFind\Controller\ChannelsController',
            'Collection' => 'VuFind\Controller\CollectionController',
            'collection' => 'VuFind\Controller\CollectionController',
            'Collections' => 'VuFind\Controller\CollectionsController',
            'collections' => 'VuFind\Controller\CollectionsController',
            'Combined' => 'VuFind\Controller\CombinedController',
            'combined' => 'VuFind\Controller\CombinedController',
            'Confirm' => 'VuFind\Controller\ConfirmController',
            'confirm' => 'VuFind\Controller\ConfirmController',
            'Content' => 'VuFind\Controller\ContentController',
            'content' => 'VuFind\Controller\ContentController',
            'Cover' => 'VuFind\Controller\CoverController',
            'cover' => 'VuFind\Controller\CoverController',
            'EDS' => 'VuFind\Controller\EdsController',
            'eds' => 'VuFind\Controller\EdsController',
            'EdsRecord' => 'VuFind\Controller\EdsrecordController',
            'edsrecord' => 'VuFind\Controller\EdsrecordController',
            'EIT' => 'VuFind\Controller\EITController',
            'eit' => 'VuFind\Controller\EITController',
            'EITRecord' => 'VuFind\Controller\EITrecordController',
            'eitrecord' => 'VuFind\Controller\EITrecordController',
            'Error' => 'VuFind\Controller\ErrorController',
            'error' => 'VuFind\Controller\ErrorController',
            'ExternalAuth' => 'VuFind\Controller\ExternalAuthController',
            'externalauth' => 'VuFind\Controller\ExternalAuthController',
            'Feedback' => 'VuFind\Controller\FeedbackController',
            'feedback' => 'VuFind\Controller\FeedbackController',
            'Search2' => 'VuFind\Controller\Search2Controller',
            'search2' => 'VuFind\Controller\Search2Controller',
            'Search2Collection' => 'VuFind\Controller\Search2collectionController',
            'search2collection' => 'VuFind\Controller\Search2collectionController',
            'Search2Record' => 'VuFind\Controller\Search2recordController',
            'search2record' => 'VuFind\Controller\Search2recordController',
            'Help' => 'VuFind\Controller\HelpController',
            'help' => 'VuFind\Controller\HelpController',
            'Hierarchy' => 'VuFind\Controller\HierarchyController',
            'hierarchy' => 'VuFind\Controller\HierarchyController',
            'Index' => 'VuFind\Controller\IndexController',
            'index' => 'VuFind\Controller\IndexController',
            'Install' => 'VuFind\Controller\InstallController',
            'install' => 'VuFind\Controller\InstallController',
            'LibGuides' => 'VuFind\Controller\LibGuidesController',
            'libguides' => 'VuFind\Controller\LibGuidesController',
            'LibraryCards' => 'VuFind\Controller\LibraryCardsController',
            'librarycards' => 'VuFind\Controller\LibraryCardsController',
            'MissingRecord' => 'VuFind\Controller\MissingrecordController',
            'missingrecord' => 'VuFind\Controller\MissingrecordController',
            'MyResearch' => 'VuFind\Controller\MyResearchController',
            'myresearch' => 'VuFind\Controller\MyResearchController',
            'OAI' => 'VuFind\Controller\OaiController',
            'oai' => 'VuFind\Controller\OaiController',
            'Overdrive' => 'VuFind\Controller\OverdriveController',
            'overdrive' => 'VuFind\Controller\OverdriveController',
            'Pazpar2' => 'VuFind\Controller\Pazpar2Controller',
            'pazpar2' => 'VuFind\Controller\Pazpar2Controller',
            'Primo' => 'VuFind\Controller\PrimoController',
            'primo' => 'VuFind\Controller\PrimoController',
            'PrimoRecord' => 'VuFind\Controller\PrimorecordController',
            'primorecord' => 'VuFind\Controller\PrimorecordController',
            'QRCode' => 'VuFind\Controller\QRCodeController',
            'qrcode' => 'VuFind\Controller\QRCodeController',
            'Record' => 'VuFind\Controller\RecordController',
            'record' => 'VuFind\Controller\RecordController',
            'Records' => 'VuFind\Controller\RecordsController',
            'records' => 'VuFind\Controller\RecordsController',
            'Relais' => 'VuFind\Controller\RelaisController',
            'relais' => 'VuFind\Controller\RelaisController',
            'Search' => 'VuFind\Controller\SearchController',
            'search' => 'VuFind\Controller\SearchController',
            'ShibbolethLogoutNotification' => 'VuFind\Controller\ShibbolethLogoutNotificationController',
            'shibbolethlogoutnotification' => 'VuFind\Controller\ShibbolethLogoutNotificationController',
            'Shortlink' => 'VuFind\Controller\ShortlinkController',
            'shortlink' => 'VuFind\Controller\ShortlinkController',
            'Summon' => 'VuFind\Controller\SummonController',
            'summon' => 'VuFind\Controller\SummonController',
            'SummonRecord' => 'VuFind\Controller\SummonrecordController',
            'summonrecord' => 'VuFind\Controller\SummonrecordController',
            'Tag' => 'VuFind\Controller\TagController',
            'tag' => 'VuFind\Controller\TagController',
            'Upgrade' => 'VuFind\Controller\UpgradeController',
            'upgrade' => 'VuFind\Controller\UpgradeController',
            'Web' => 'VuFind\Controller\WebController',
            'web' => 'VuFind\Controller\WebController',
            'Worldcat' => 'VuFind\Controller\WorldcatController',
            'worldcat' => 'VuFind\Controller\WorldcatController',
            'WorldcatRecord' => 'VuFind\Controller\WorldcatrecordController',
            'worldcatrecord' => 'VuFind\Controller\WorldcatrecordController',
        ],
    ],
    'controller_plugins' => [
        'factories' => [
            'VuFind\Controller\Plugin\DbUpgrade' => 'Zend\ServiceManager\Factory\InvokableFactory',
            'VuFind\Controller\Plugin\Favorites' => 'VuFind\Controller\Plugin\FavoritesFactory',
            'VuFind\Controller\Plugin\Followup' => 'VuFind\Controller\Plugin\FollowupFactory',
            'VuFind\Controller\Plugin\Holds' => 'VuFind\Controller\Plugin\AbstractRequestBaseFactory',
            'VuFind\Controller\Plugin\ILLRequests' => 'VuFind\Controller\Plugin\AbstractRequestBaseFactory',
            'VuFind\Controller\Plugin\NewItems' => 'VuFind\Controller\Plugin\NewItemsFactory',
            'VuFind\Controller\Plugin\Permission' => 'VuFind\Controller\Plugin\PermissionFactory',
            'VuFind\Controller\Plugin\Recaptcha' => 'VuFind\Controller\Plugin\RecaptchaFactory',
            'VuFind\Controller\Plugin\Renewals' => 'Zend\ServiceManager\Factory\InvokableFactory',
            'VuFind\Controller\Plugin\Reserves' => 'VuFind\Controller\Plugin\ReservesFactory',
            'VuFind\Controller\Plugin\ResultScroller' => 'VuFind\Controller\Plugin\ResultScrollerFactory',
            'VuFind\Controller\Plugin\StorageRetrievalRequests' => 'VuFind\Controller\Plugin\AbstractRequestBaseFactory',
            'Zend\Mvc\Plugin\FlashMessenger\FlashMessenger' => 'VuFind\Controller\Plugin\FlashMessengerFactory',
        ],
        'initializers' => [
            'VuFind\ServiceManager\ServiceInitializer',
        ],
        'aliases' => [
            'dbUpgrade' => 'VuFind\Controller\Plugin\DbUpgrade',
            'favorites' => 'VuFind\Controller\Plugin\Favorites',
            'flashMessenger' => 'Zend\Mvc\Plugin\FlashMessenger\FlashMessenger',
            'followup' => 'VuFind\Controller\Plugin\Followup',
            'holds' => 'VuFind\Controller\Plugin\Holds',
            'ILLRequests' => 'VuFind\Controller\Plugin\ILLRequests',
            'newItems' => 'VuFind\Controller\Plugin\NewItems',
            'permission' => 'VuFind\Controller\Plugin\Permission',
            'recaptcha' => 'VuFind\Controller\Plugin\Recaptcha',
            'renewals' => 'VuFind\Controller\Plugin\Renewals',
            'reserves' => 'VuFind\Controller\Plugin\Reserves',
            'resultScroller' => 'VuFind\Controller\Plugin\ResultScroller',
            'storageRetrievalRequests' => 'VuFind\Controller\Plugin\StorageRetrievalRequests',
        ],
    ],
    'service_manager' => [
        'allow_override' => true,
        'factories' => [
            'ProxyManager\Configuration' => 'VuFind\Service\ProxyConfigFactory',
            'VuFind\AjaxHandler\PluginManager' => 'VuFind\ServiceManager\AbstractPluginManagerFactory',
            'VuFind\Auth\EmailAuthenticator' => 'VuFind\Auth\EmailAuthenticatorFactory',
            'VuFind\Auth\ILSAuthenticator' => 'VuFind\Auth\ILSAuthenticatorFactory',
            'VuFind\Auth\Manager' => 'VuFind\Auth\ManagerFactory',
            'VuFind\Auth\PluginManager' => 'VuFind\ServiceManager\AbstractPluginManagerFactory',
            'VuFind\Autocomplete\PluginManager' => 'VuFind\ServiceManager\AbstractPluginManagerFactory',
            'VuFind\Autocomplete\Suggester' => 'VuFind\Autocomplete\SuggesterFactory',
            'VuFind\Cache\Manager' => 'VuFind\Cache\ManagerFactory',
            'VuFind\Cart' => 'VuFind\CartFactory',
            'VuFind\ChannelProvider\ChannelLoader' => 'VuFind\ChannelProvider\ChannelLoaderFactory',
            'VuFind\ChannelProvider\PluginManager' => 'VuFind\ServiceManager\AbstractPluginManagerFactory',
            'VuFind\Config\AccountCapabilities' => 'VuFind\Config\AccountCapabilitiesFactory',
            'VuFind\Config\PluginManager' => 'VuFind\Config\PluginManagerFactory',
            'VuFind\Config\SearchSpecsReader' => 'VuFind\Config\YamlReaderFactory',
            'VuFind\Config\YamlReader' => 'VuFind\Config\YamlReaderFactory',
            'VuFind\Connection\Relais' => 'VuFind\Connection\RelaisFactory',
            'VuFind\Connection\WorldCatUtils' => 'VuFind\Connection\WorldCatUtilsFactory',
            'VuFind\Content\PluginManager' => 'VuFind\ServiceManager\AbstractPluginManagerFactory',
            'VuFind\Content\AuthorNotes\PluginManager' => 'VuFind\ServiceManager\AbstractPluginManagerFactory',
            'VuFind\Content\Covers\PluginManager' => 'VuFind\ServiceManager\AbstractPluginManagerFactory',
            'VuFind\Content\Excerpts\PluginManager' => 'VuFind\ServiceManager\AbstractPluginManagerFactory',
            'VuFind\Content\Reviews\PluginManager' => 'VuFind\ServiceManager\AbstractPluginManagerFactory',
            'VuFind\Content\Summaries\PluginManager' => 'VuFind\ServiceManager\AbstractPluginManagerFactory',
            'VuFind\Content\TOC\PluginManager' => 'VuFind\ServiceManager\AbstractPluginManagerFactory',
            'VuFind\ContentBlock\BlockLoader' => 'VuFind\ContentBlock\BlockLoaderFactory',
            'VuFind\ContentBlock\PluginManager' => 'VuFind\ServiceManager\AbstractPluginManagerFactory',
            'VuFind\Cookie\CookieManager' => 'VuFind\Cookie\CookieManagerFactory',
            'VuFind\Cover\CachingProxy' => 'VuFind\Cover\CachingProxyFactory',
            'VuFind\Cover\Generator' => 'VuFind\Cover\GeneratorFactory',
            'VuFind\Cover\Layer\PluginManager' => 'VuFind\ServiceManager\AbstractPluginManagerFactory',
            'VuFind\Cover\Loader' => 'VuFind\Cover\LoaderFactory',
            'VuFind\Cover\Router' => 'VuFind\Cover\RouterFactory',
            'VuFind\Crypt\HMAC' => 'VuFind\Crypt\HMACFactory',
            'VuFind\Date\Converter' => 'VuFind\Service\DateConverterFactory',
            'VuFind\Db\AdapterFactory' => 'VuFind\Service\ServiceWithConfigIniFactory',
            'VuFind\Db\Row\PluginManager' => 'VuFind\ServiceManager\AbstractPluginManagerFactory',
            'VuFind\Db\Table\PluginManager' => 'VuFind\ServiceManager\AbstractPluginManagerFactory',
            'VuFind\DigitalContent\OverdriveConnector' => 'VuFind\DigitalContent\OverdriveConnectorFactory',
            'VuFind\DoiLinker\PluginManager' => 'VuFind\ServiceManager\AbstractPluginManagerFactory',
            'VuFind\Export' => 'VuFind\ExportFactory',
            'VuFind\Favorites\FavoritesService' => 'VuFind\Favorites\FavoritesServiceFactory',
            'VuFind\Form\Form' => 'VuFind\Form\FormFactory',
            'VuFind\GeoFeatures\BasemapConfig' => 'VuFind\GeoFeatures\AbstractConfigFactory',
            'VuFind\GeoFeatures\MapTabConfig' => 'VuFind\GeoFeatures\AbstractConfigFactory',
            'VuFind\GeoFeatures\MapSelectionConfig' => 'VuFind\GeoFeatures\AbstractConfigFactory',
            'VuFind\Hierarchy\Driver\PluginManager' => 'VuFind\ServiceManager\AbstractPluginManagerFactory',
            'VuFind\Hierarchy\TreeDataFormatter\PluginManager' => 'VuFind\ServiceManager\AbstractPluginManagerFactory',
            'VuFind\Hierarchy\TreeDataSource\PluginManager' => 'VuFind\ServiceManager\AbstractPluginManagerFactory',
            'VuFind\Hierarchy\TreeRenderer\PluginManager' => 'VuFind\ServiceManager\AbstractPluginManagerFactory',
            'VuFind\Http\PhpEnvironment\Request' => 'Zend\ServiceManager\Factory\InvokableFactory',
            'VuFind\ILS\Connection' => 'VuFind\ILS\ConnectionFactory',
            'VuFind\ILS\Driver\PluginManager' => 'VuFind\ServiceManager\AbstractPluginManagerFactory',
            'VuFind\ILS\Logic\Holds' => 'VuFind\ILS\Logic\LogicFactory',
            'VuFind\ILS\Logic\TitleHolds' => 'VuFind\ILS\Logic\LogicFactory',
            'VuFind\ILS\HoldSettings' => 'VuFind\ILS\HoldSettingsFactory',
            'VuFind\Log\Logger' => 'VuFind\Log\LoggerFactory',
            'VuFind\Mailer\Mailer' => 'VuFind\Mailer\Factory',
            'VuFind\MetadataVocabulary\PluginManager' => 'VuFind\ServiceManager\AbstractPluginManagerFactory',
            'VuFind\Net\IpAddressUtils' => 'Zend\ServiceManager\Factory\InvokableFactory',
            'VuFind\OAI\Server' => 'VuFind\OAI\ServerFactory',
            'VuFind\OAI\Server\Auth' => 'VuFind\OAI\ServerFactory',
            'VuFind\QRCode\Loader' => 'VuFind\QRCode\LoaderFactory',
            'VuFind\Recommend\PluginManager' => 'VuFind\ServiceManager\AbstractPluginManagerFactory',
            'VuFind\Record\Cache' => 'VuFind\Record\CacheFactory',
            'VuFind\Record\FallbackLoader\PluginManager' => 'VuFind\ServiceManager\AbstractPluginManagerFactory',
            'VuFind\Record\Loader' => 'VuFind\Record\LoaderFactory',
            'VuFind\Record\Router' => 'VuFind\Service\ServiceWithConfigIniFactory',
            'VuFind\RecordDriver\PluginManager' => 'VuFind\ServiceManager\AbstractPluginManagerFactory',
            'VuFind\RecordTab\PluginManager' => 'VuFind\ServiceManager\AbstractPluginManagerFactory',
            'VuFind\RecordTab\TabManager' => 'VuFind\RecordTab\TabManagerFactory',
            'VuFind\Related\PluginManager' => 'VuFind\ServiceManager\AbstractPluginManagerFactory',
            'VuFind\Resolver\Driver\PluginManager' => 'VuFind\ServiceManager\AbstractPluginManagerFactory',
            'VuFind\Role\PermissionManager' => 'VuFind\Role\PermissionManagerFactory',
            'VuFind\Role\PermissionDeniedManager' => 'VuFind\Role\PermissionDeniedManagerFactory',
            'VuFind\Search\BackendManager' => 'VuFind\Search\BackendManagerFactory',
            'VuFind\Search\History' => 'VuFind\Search\HistoryFactory',
            'VuFind\Search\Memory' => 'VuFind\Search\MemoryFactory',
            'VuFind\Search\FacetCache\PluginManager' => 'VuFind\ServiceManager\AbstractPluginManagerFactory',
            'VuFind\Search\Factory\UrlQueryHelperFactory' => 'Zend\ServiceManager\Factory\InvokableFactory',
            'VuFind\Search\Options\PluginManager' => 'VuFind\ServiceManager\AbstractPluginManagerFactory',
            'VuFind\Search\Params\PluginManager' => 'VuFind\ServiceManager\AbstractPluginManagerFactory',
            'VuFind\Search\Results\PluginManager' => 'VuFind\ServiceManager\AbstractPluginManagerFactory',
            'VuFind\Search\Solr\HierarchicalFacetHelper' => 'Zend\ServiceManager\Factory\InvokableFactory',
            'VuFind\Search\SearchRunner' => 'VuFind\Search\SearchRunnerFactory',
            'VuFind\Search\SearchTabsHelper' => 'VuFind\Search\SearchTabsHelperFactory',
            'VuFind\Service\ReCaptcha' => 'VuFind\Service\ReCaptchaFactory',
            'VuFind\Session\PluginManager' => 'VuFind\ServiceManager\AbstractPluginManagerFactory',
            'VuFind\Session\Settings' => 'Zend\ServiceManager\Factory\InvokableFactory',
            'VuFind\SMS\SMSInterface' => 'VuFind\SMS\Factory',
            'VuFind\Solr\Writer' => 'VuFind\Solr\WriterFactory',
            'VuFind\Tags' => 'VuFind\TagsFactory',
            'VuFind\UrlShortener\PluginManager' => 'VuFind\ServiceManager\AbstractPluginManagerFactory',
            'VuFind\UrlShortener\UrlShortenerInterface' => 'VuFind\UrlShortener\ServiceFactory',
            'VuFind\Validator\Csrf' => 'VuFind\Validator\CsrfFactory',
            'VuFindHttp\HttpService' => 'VuFind\Service\HttpServiceFactory',
            'VuFindSearch\Service' => 'VuFind\Service\SearchServiceFactory',
            'Zend\Db\Adapter\Adapter' => 'VuFind\Db\AdapterFactory',
            'Zend\Http\PhpEnvironment\RemoteAddress' => 'VuFind\Http\PhpEnvironment\RemoteAddressFactory',
            'Zend\Mvc\I18n\Translator' => 'VuFind\I18n\Translator\TranslatorFactory',
            'Zend\Session\SessionManager' => 'VuFind\Session\ManagerFactory',
        ],
        'delegators' => [
            'VuFind\Http\PhpEnvironment\Request' => [ \Zend\Mvc\Console\Service\ConsoleRequestDelegatorFactory::class ],
        ],
        'initializers' => [
            'VuFind\ServiceManager\ServiceInitializer',
        ],
        'aliases' => [
            'Request' => 'VuFind\Http\PhpEnvironment\Request',
            'VuFind\AccountCapabilities' => 'VuFind\Config\AccountCapabilities',
            'VuFind\AuthManager' => 'VuFind\Auth\Manager',
            'VuFind\AuthPluginManager' => 'VuFind\Auth\PluginManager',
            'VuFind\AutocompletePluginManager' => 'VuFind\Autocomplete\PluginManager',
            'VuFind\CacheManager' => 'VuFind\Cache\Manager',
            'VuFind\ChannelProviderPluginManager' => 'VuFind\ChannelProvider\PluginManager',
            'VuFind\Config' => 'VuFind\Config\PluginManager',
            'VuFind\ContentPluginManager' => 'VuFind\Content\PluginManager',
            'VuFind\ContentAuthorNotesPluginManager' => 'VuFind\Content\AuthorNotes\PluginManager',
            'VuFind\ContentCoversPluginManager' => 'VuFind\Content\Covers\PluginManager',
            'VuFind\ContentExcerptsPluginManager' => 'VuFind\Content\Excerpts\PluginManager',
            'VuFind\ContentReviewsPluginManager' => 'VuFind\Content\Reviews\PluginManager',
            'VuFind\ContentSummariesPluginManager' => 'VuFind\Content\Summaries\PluginManager',
            'VuFind\ContentTOCPluginManager' => 'VuFind\Content\TOC\PluginManager',
            'VuFind\CookieManager' => 'VuFind\Cookie\CookieManager',
            'VuFind\DateConverter' => 'VuFind\Date\Converter',
            'VuFind\DbAdapter' => 'Zend\Db\Adapter\Adapter',
            'VuFind\DbAdapterFactory' => 'VuFind\Db\AdapterFactory',
            'VuFind\DbRowPluginManager' => 'VuFind\Db\Row\PluginManager',
            'VuFind\DbTablePluginManager' => 'VuFind\Db\Table\PluginManager',
            'VuFind\HierarchicalFacetHelper' => 'VuFind\Search\Solr\HierarchicalFacetHelper',
            'VuFind\HierarchyDriverPluginManager' => 'VuFind\Hierarchy\Driver\PluginManager',
            'VuFind\HierarchyTreeDataFormatterPluginManager' => 'VuFind\Hierarchy\TreeDataFormatter\PluginManager',
            'VuFind\HierarchyTreeDataSourcePluginManager' => 'VuFind\Hierarchy\TreeDataSource\PluginManager',
            'VuFind\HierarchyTreeRendererPluginManager' => 'VuFind\Hierarchy\TreeRenderer\PluginManager',
            'VuFind\HMAC' => 'VuFind\Crypt\HMAC',
            'VuFind\Http' => 'VuFindHttp\HttpService',
            'VuFind\ILSAuthenticator' => 'VuFind\Auth\ILSAuthenticator',
            'VuFind\ILSConnection' => 'VuFind\ILS\Connection',
            'VuFind\ILSDriverPluginManager' => 'VuFind\ILS\Driver\PluginManager',
            'VuFind\ILSHoldLogic' => 'VuFind\ILS\Logic\Holds',
            'VuFind\ILSHoldSettings' => 'VuFind\ILS\HoldSettings',
            'VuFind\ILSTitleHoldLogic' => 'VuFind\ILS\Logic\TitleHolds',
            'VuFind\IpAddressUtils' => 'VuFind\Net\IpAddressUtils',
            'VuFind\Logger' => 'VuFind\Log\Logger',
            'VuFind\Mailer' => 'VuFind\Mailer\Mailer',
            'VuFind\ProxyConfig' => 'ProxyManager\Configuration',
            'VuFind\Recaptcha' => 'VuFind\Service\ReCaptcha',
            'VuFind\RecommendPluginManager' => 'VuFind\Recommend\PluginManager',
            'VuFind\RecordCache' => 'VuFind\Record\Cache',
            'VuFind\RecordDriverPluginManager' => 'VuFind\RecordDriver\PluginManager',
            'VuFind\RecordLoader' => 'VuFind\Record\Loader',
            'VuFind\RecordRouter' => 'VuFind\Record\Router',
            'VuFind\RecordTabPluginManager' => 'VuFind\RecordTab\PluginManager',
            'VuFind\RelatedPluginManager' => 'VuFind\Related\PluginManager',
            'VuFind\ResolverDriverPluginManager' => 'VuFind\Resolver\Driver\PluginManager',
            'VuFind\Search' => 'VuFindSearch\Service',
            'VuFind\SearchOptionsPluginManager' => 'VuFind\Search\Options\PluginManager',
            'VuFind\SearchParamsPluginManager' => 'VuFind\Search\Params\PluginManager',
            'VuFind\SearchResultsPluginManager' => 'VuFind\Search\Results\PluginManager',
            'VuFind\SearchRunner' => 'VuFind\Search\SearchRunner',
            'VuFind\SearchSpecsReader' => 'VuFind\Config\SearchSpecsReader',
            'VuFind\SearchTabsHelper' => 'VuFind\Search\SearchTabsHelper',
            'VuFind\SessionManager' => 'Zend\Session\SessionManager',
            'VuFind\SessionPluginManager' => 'VuFind\Session\PluginManager',
            'VuFind\SMS' => 'VuFind\SMS\SMSInterface',
            'VuFind\Translator' => 'Zend\Mvc\I18n\Translator',
            'VuFind\WorldCatUtils' => 'VuFind\Connection\WorldCatUtils',
            'VuFind\YamlReader' => 'VuFind\Config\YamlReader',
            'Zend\Validator\Csrf' => 'VuFind\Validator\Csrf',
        ],
    ],
    'translator' => [],
    'view_helpers' => [
        'initializers' => [
            'VuFind\ServiceManager\ServiceInitializer',
        ],
    ],
    'view_manager' => [
        'display_not_found_reason' => APPLICATION_ENV == 'development',
        'display_exceptions'       => APPLICATION_ENV == 'development',
        'not_found_template'       => 'error/404',
        'exception_template'       => 'error/index',
        'template_path_stack'      => [],
        'whoops_no_catch' => [
            'VuFind\Exception\RecordMissing',
        ],
    ],
    // This section contains all VuFind-specific settings (i.e. configurations
    // unrelated to specific Zend Framework 2 components).
    'vufind' => [
        // The config reader is a special service manager for loading .ini files:
        'config_reader' => [ /* see VuFind\Config\PluginManager for defaults */ ],
        // PostgreSQL sequence mapping
        'pgsql_seq_mapping'  => [
            'auth_hash'        => ['id', 'auth_hash_id_seq'],
            'comments'         => ['id', 'comments_id_seq'],
            'external_session' => ['id', 'external_session_id_seq'],
            'oai_resumption'   => ['id', 'oai_resumption_id_seq'],
            'record'           => ['id', 'record_id_seq'],
            'resource'         => ['id', 'resource_id_seq'],
            'resource_tags'    => ['id', 'resource_tags_id_seq'],
            'search'           => ['id', 'search_id_seq'],
            'session'          => ['id', 'session_id_seq'],
            'shortlinks'       => ['id', 'shortlinks_id_seq'],
            'tags'             => ['id', 'tags_id_seq'],
            'user'             => ['id', 'user_id_seq'],
            'user_card'        => ['id', 'user_card_id_seq'],
            'user_list'        => ['id', 'user_list_id_seq'],
            'user_resource'    => ['id', 'user_resource_id_seq'],
        ],
        // This section contains service manager configurations for all VuFind
        // pluggable components:
        'plugin_managers' => [
            'ajaxhandler' => [ /* see VuFind\AjaxHandler\PluginManager for defaults */ ],
            'auth' => [ /* see VuFind\Auth\PluginManager for defaults */ ],
            'autocomplete' => [ /* see VuFind\Autocomplete\PluginManager for defaults */ ],
            'channelprovider' => [ /* see VuFind\ChannelProvider\PluginManager for defaults */ ],
            'content' => [ /* see VuFind\Content\PluginManager for defaults */ ],
            'content_authornotes' => [ /* see VuFind\Content\AuthorNotes\PluginManager for defaults */ ],
            'content_covers' => [ /* see VuFind\Content\Covers\PluginManager for defaults */ ],
            'content_excerpts' => [ /* see VuFind\Content\Excerpts\PluginManager for defaults */ ],
            'content_reviews' => [ /* see VuFind\Content\Reviews\PluginManager for defaults */ ],
            'content_summaries' => [ /* see VuFind\Content\Summaries\PluginManager for defaults */ ],
            'content_toc' => [ /* see VuFind\Content\TOC\PluginManager for defaults */ ],
            'contentblock' => [ /* see VuFind\ContentBlock\PluginManager for defaults */ ],
            'cover_layer' => [ /* see VuFind\Cover\Layer\PluginManager for defaults */ ],
            'db_row' => [ /* see VuFind\Db\Row\PluginManager for defaults */ ],
            'db_table' => [ /* see VuFind\Db\Table\PluginManager for defaults */ ],
            'doilinker' => [ /* see VuFind\DoiLinker\PluginManager for defaults */ ],
            'hierarchy_driver' => [ /* see VuFind\Hierarchy\Driver\PluginManager for defaults */ ],
            'hierarchy_treedataformatter' => [ /* see VuFind\Hierarchy\TreeDataFormatter\PluginManager for defaults */ ],
            'hierarchy_treedatasource' => [ /* see VuFind\Hierarchy\TreeDataSource\PluginManager for defaults */ ],
            'hierarchy_treerenderer' => [ /* see VuFind\Hierarchy\TreeRenderer\PluginManager for defaults */ ],
            'ils_driver' => [ /* See VuFind\ILS\Driver\PluginManager for defaults */ ],
            'metadatavocabulary' => [ /* See VuFind\MetadataVocabulary\PluginManager for defaults */],
            'recommend' => [ /* See VuFind\Recommend\PluginManager for defaults */ ],
            'record_fallbackloader' => [ /* See VuFind\Record\FallbackLoader\PluginManager for defaults */ ],
            'recorddriver' => [ /* See VuFind\RecordDriver\PluginManager for defaults */ ],
            'recordtab' => [ /* See VuFind\RecordTab\PluginManager for defaults */ ],
            'related' => [ /* See VuFind\Related\PluginManager for defaults */ ],
            'resolver_driver' => [ /* See VuFind\Resolver\Driver\PluginManager for defaults */ ],
            'search_backend' => [ /* See VuFind\Search\BackendRegistry for defaults */ ],
            'search_facetcache' => [ /* See VuFind\Search\FacetCache\PluginManager for defaults */ ],
            'search_options' => [ /* See VuFind\Search\Options\PluginManager for defaults */ ],
            'search_params' => [ /* See VuFind\Search\Params\PluginManager for defaults */ ],
            'search_results' => [ /* See VuFind\Search\Results\PluginManager for defaults */ ],
            'session' => [ /* see VuFind\Session\PluginManager for defaults */ ],
            'urlshortener' => [ /* see VuFind\UrlShortener\PluginManager for defaults */ ],
        ],
    ],
    // Authorization configuration:
    'zfc_rbac' => [
        'identity_provider' => 'VuFind\Auth\Manager',
        'guest_role' => 'guest',
        'role_provider' => [
            'VuFind\Role\DynamicRoleProvider' => [
                'map_legacy_settings' => true,
            ],
        ],
        'role_provider_manager' => [
            'factories' => [
                'VuFind\Role\DynamicRoleProvider' => 'VuFind\Role\DynamicRoleProviderFactory',
            ],
        ],
        'vufind_permission_provider_manager' => [ /* see VuFind\Role\PermissionProvider\PluginManager for defaults */ ],
    ],
];

// Define record view routes -- route name => controller
$recordRoutes = [
    'record' => 'Record',
    'collection' => 'Collection',
    'edsrecord' => 'EdsRecord',
    'eitrecord' => 'EITRecord',
    'missingrecord' => 'MissingRecord',
    'primorecord' => 'PrimoRecord',
    'solrauthrecord' => 'Authority',
    'summonrecord' => 'SummonRecord',
    'worldcatrecord' => 'WorldcatRecord',
    'search2record' => 'Search2Record',
    'search2collection' => 'Search2Collection',
    'search2collectionrecord' => 'Search2Record',
];

// Define dynamic routes -- controller => [route name => action]
$dynamicRoutes = [
    'Feedback' => ['feedback-form' => 'Form/[:id]'],
    'MyResearch' => ['userList' => 'MyList/[:id]', 'editList' => 'EditList/[:id]'],
    'LibraryCards' => ['editLibraryCard' => 'editCard/[:id]'],
];

// Define static routes -- Controller/Action strings
$staticRoutes = [
    'Alphabrowse/Home', 'Author/FacetList', 'Author/Home', 'Author/Search',
    'Authority/FacetList', 'Authority/Home', 'Authority/Record', 'Authority/Search',
    'Browse/Author', 'Browse/Dewey', 'Browse/Era', 'Browse/Genre', 'Browse/Home',
    'Browse/LCC', 'Browse/Region', 'Browse/Tag', 'Browse/Topic', 'Cart/doExport',
    'BrowZine/Home', 'BrowZine/Search',
    'Cart/Email', 'Cart/Export', 'Cart/Home', 'Cart/MyResearchBulk',
    'Cart/Processor', 'Cart/Save', 'Cart/SearchResultsBulk',
    'Channels/Home', 'Channels/Record', 'Channels/Search',
    'Collections/ByTitle',
    'Collections/Home', 'Combined/Home', 'Combined/Results', 'Combined/SearchBox',
    'Confirm/Confirm', 'Cover/Show', 'Cover/Unavailable',
    'EDS/Advanced', 'EDS/Home', 'EDS/Search',
    'EIT/Advanced', 'EIT/Home', 'EIT/Search',
    'Error/PermissionDenied', 'Error/Unavailable',
    'Feedback/Email', 'Feedback/Home', 'Help/Home',
    'Install/Done', 'Install/FixBasicConfig', 'Install/FixCache',
    'Install/FixDatabase', 'Install/FixDependencies', 'Install/FixILS',
    'Install/FixSecurity', 'Install/FixSolr', 'Install/FixSSLCerts', 'Install/Home',
    'Install/PerformSecurityFix', 'Install/ShowSQL',
    'LibGuides/Home', 'LibGuides/Results',
    'LibraryCards/Home', 'LibraryCards/SelectCard',
    'LibraryCards/DeleteCard',
    'MyResearch/Account', 'MyResearch/ChangeEmail', 'MyResearch/ChangePassword',
    'MyResearch/CheckedOut', 'MyResearch/Delete', 'MyResearch/DeleteAccount',
    'MyResearch/DeleteList', 'MyResearch/Edit', 'MyResearch/Email',
    'MyResearch/EmailNotVerified', 'MyResearch/Favorites',
    'MyResearch/Fines', 'MyResearch/HistoricLoans', 'MyResearch/Holds',
    'MyResearch/Home', 'MyResearch/ILLRequests', 'MyResearch/Logout',
    'MyResearch/NewPassword', 'MyResearch/Profile',
    'MyResearch/Recover', 'MyResearch/SaveSearch',
    'MyResearch/StorageRetrievalRequests',
    'MyResearch/Unsubscribe', 'MyResearch/UserLogin',
    'MyResearch/Verify', 'MyResearch/VerifyEmail', 'OAI/Server',
    'Overdrive/MyContent','Overdrive/Hold',
    'Pazpar2/Home', 'Pazpar2/Search',
    'Primo/Advanced', 'Primo/Home', 'Primo/Search',
    'QRCode/Show', 'QRCode/Unavailable', 'Records/Home',
    'Relais/Login', 'Relais/Request',
    'Search/Advanced', 'Search/CollectionFacetList',
    'Search/EditMemory', 'Search/Email',
    'Search/FacetList', 'Search/History', 'Search/Home', 'Search/NewItem',
    'Search/OpenSearch', 'Search/Reserves', 'Search/ReservesFacetList',
    'Search/Results', 'Search/Suggest',
    'Search2/Advanced', 'Search2/FacetList', 'Search2/Home', 'Search2/Results',
    'Summon/Advanced', 'Summon/FacetList', 'Summon/Home', 'Summon/Search',
    'Tag/Home',
    'Upgrade/Home', 'Upgrade/FixAnonymousTags', 'Upgrade/FixDuplicateTags',
    'Upgrade/FixConfig', 'Upgrade/FixDatabase', 'Upgrade/FixMetadata',
    'Upgrade/GetDBCredentials', 'Upgrade/GetDbEncodingPreference',
    'Upgrade/GetSourceDir', 'Upgrade/GetSourceVersion', 'Upgrade/Reset',
    'Upgrade/ShowSQL',
    'Web/Home', 'Web/FacetList', 'Web/Results',
    'Worldcat/Advanced', 'Worldcat/Home', 'Worldcat/Search'
];

$routeGenerator = new \VuFind\Route\RouteGenerator();
$routeGenerator->addRecordRoutes($config, $recordRoutes);
$routeGenerator->addDynamicRoutes($config, $dynamicRoutes);
$routeGenerator->addStaticRoutes($config, $staticRoutes);

// Add the home route last
$config['router']['routes']['home'] = [
    'type' => 'Zend\Router\Http\Literal',
    'options' => [
        'route'    => '/',
        'defaults' => [
            'controller' => 'index',
            'action'     => 'Home',
        ]
    ]
];

return $config;

Service names should correspond to class or interface names, so I think this should actually be `League\CommonMark\GithubFlavoredMarkdownConverter` (or maybe better yet, `\League\CommonMark\ConverterInterface`). If you think it's important to have a short service name, you can make `MarkdownConverter` an alias, though I think that's probably just extra unnecessary complexity.