/// <exception cref="ArgumentNullException"><paramref name="svgElement" /> is <see langword="null" />.</exception>
        /// <exception cref="ArgumentNullException"><paramref name="fontName" /> is <see langword="null" />.</exception>
        /// <exception cref="ArgumentNullException"><paramref name="text" /> is <see langword="null" />.</exception>
        /// <exception cref="ArgumentNullException"><paramref name="zplContainer" /> is <see langword="null" />.</exception>
        protected virtual void AddTranslationToContainer([NotNull] T svgElement,
                                                         int horizontalStart,
                                                         int verticalStart,
                                                         [NotNull] string fontName,
                                                         FieldOrientation fieldOrientation,
                                                         int characterHeight,
                                                         int width,
                                                         [NotNull] string text,
                                                         [NotNull] ZplContainer zplContainer)
        {
            if (fontName == null)
            {
                throw new ArgumentNullException(nameof(fontName));
            }
            if (text == null)
            {
                throw new ArgumentNullException(nameof(text));
            }
            if (zplContainer == null)
            {
                throw new ArgumentNullException(nameof(zplContainer));
            }

            zplContainer.Body.Add(this.ZplCommands.FieldTypeset(horizontalStart,
                                                                verticalStart));
            zplContainer.Body.Add(this.ZplCommands.Font(fontName,
                                                        fieldOrientation,
                                                        characterHeight,
                                                        width,
                                                        text));
        }
        /// <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="zplContainer" /> is <see langword="null" />.</exception>
        public override void Translate(T svgElement,
                                       Matrix sourceMatrix,
                                       Matrix viewMatrix,
                                       ZplContainer zplContainer)
        {
            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 (zplContainer == null)
            {
                throw new ArgumentNullException(nameof(zplContainer));
            }

            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 fieldOrientation,
                             out var fontSize);

            this.GetFontSelection(svgElement,
                                  fontSize,
                                  out var fontName,
                                  out var characterHeight,
                                  out var width);

            this.AddTranslationToContainer(svgElement,
                                           horizontalStart,
                                           verticalStart,
                                           fontName,
                                           fieldOrientation,
                                           characterHeight,
                                           width,
                                           text,
                                           zplContainer);
        }