/// <exception cref="ArgumentNullException"><paramref name="svgElement" /> is <see langword="null" />.</exception>
        /// <exception cref="ArgumentNullException"><paramref name="sourceMatrix" /> is <see langword="null" />.</exception>
        /// <exception cref="ArgumentNullException"><paramref name="viewMatrix" /> is <see langword="null" />.</exception>
        /// <exception cref="ArgumentNullException"><paramref name="eplContainer" /> is <see langword="null" />.</exception>
        public override void Translate(T svgElement,
                                       Matrix sourceMatrix,
                                       Matrix viewMatrix,
                                       EplContainer eplContainer)
        {
            if (svgElement == null)
            {
                throw new ArgumentNullException(nameof(svgElement));
            }
            if (sourceMatrix == null)
            {
                throw new ArgumentNullException(nameof(sourceMatrix));
            }
            if (viewMatrix == null)
            {
                throw new ArgumentNullException(nameof(viewMatrix));
            }
            if (eplContainer == null)
            {
                throw new ArgumentNullException(nameof(eplContainer));
            }

            if (svgElement.Text == null)
            {
                return;
            }

            var text = this.RemoveIllegalCharacters(svgElement.Text);

            if (string.IsNullOrEmpty(text))
            {
                return;
            }

            this.GetPosition(svgElement,
                             sourceMatrix,
                             viewMatrix,
                             out var horizontalStart,
                             out var verticalStart,
                             out var sector,
                             out var fontSize);

            this.GetFontSelection(svgElement,
                                  fontSize,
                                  out var fontSelection,
                                  out var horizontalMultiplier,
                                  out var verticalMultiplier);

            this.AddTranslationToContainer(svgElement,
                                           horizontalStart,
                                           verticalStart,
                                           sector,
                                           fontSelection,
                                           horizontalMultiplier,
                                           verticalMultiplier,
                                           text,
                                           eplContainer);
        }
        /// <exception cref="ArgumentNullException"><paramref name="svgElement" /> is <see langword="null" />.</exception>
        /// <exception cref="ArgumentNullException"><paramref name="text" /> is <see langword="null" />.</exception>
        /// <exception cref="ArgumentNullException"><paramref name="eplContainer" /> is <see langword="null" />.</exception>
        protected virtual void AddTranslationToContainer([NotNull] T svgElement,
                                                         int horizontalStart,
                                                         int verticalStart,
                                                         int sector,
                                                         int fontSelection,
                                                         int horizontalMultiplier,
                                                         int verticalMultiplier,
                                                         [NotNull] string text,
                                                         [NotNull] EplContainer eplContainer)
        {
            if (svgElement == null)
            {
                throw new ArgumentNullException(nameof(svgElement));
            }
            if (text == null)
            {
                throw new ArgumentNullException(nameof(text));
            }
            if (eplContainer == null)
            {
                throw new ArgumentNullException(nameof(eplContainer));
            }

            ReverseImage reverseImage;

            if ((svgElement.Fill as SvgColourServer)?.Colour == Color.White)
            {
                reverseImage = ReverseImage.Reverse;
            }
            else
            {
                reverseImage = ReverseImage.Normal;
            }

            eplContainer.Body.Add(this.EplCommands.AsciiText(horizontalStart,
                                                             verticalStart,
                                                             sector,
                                                             fontSelection,
                                                             horizontalMultiplier,
                                                             verticalMultiplier,
                                                             reverseImage,
                                                             text));
        }