< Summary

Class:MUNity.Extensions.Conversion.IndexConversion
Assembly:MUNity.Schema
File(s):C:\Users\aeuke\source\repos\PeerConradi\munity\src\MUNitySchema\Extensions\Conversion\IndexConversion.cs
Covered lines:0
Uncovered lines:50
Coverable lines:50
Total lines:97
Line coverage:0% (0 of 50)
Covered branches:0
Total branches:48
Branch coverage:0% (0 of 48)
Covered methods:0
Total methods:5
Method coverage:0% (0 of 5)

Metrics

MethodBranch coverage Cyclomatic complexity Line coverage
ToRoman(...)0%320%
ToPathname(...)0%140%
ToLetter(...)100%10%
NumberAsLetter(...)0%20%
.cctor()100%10%

File(s)

C:\Users\aeuke\source\repos\PeerConradi\munity\src\MUNitySchema\Extensions\Conversion\IndexConversion.cs

#LineLine coverage
 1using System;
 2using System.Collections.Generic;
 3using System.Text;
 4
 5namespace MUNity.Extensions.Conversion
 6{
 7
 8    /// <summary>
 9    /// Extension Methods to Convert the Index of preamble Paragraphs or operative paragraphs to the default
 10    /// Schemas for example: 1.a.i, 1.a.ii.
 11    /// You could also use this Extensions to get all roman letters or numbers.
 12    /// </summary>
 13    public static class IndexConversion
 14    {
 15
 16        /// <summary>
 17        /// Converts a given number between 1 and 3999 to the roman code.
 18        /// </summary>
 19        /// <param name="number">Integer between 1 and 3999</param>
 20        /// <returns></returns>
 21        public static string ToRoman(this int number)
 022        {
 023            if ((number < 0) || (number > 3999)) return "?";
 024            if (number < 1) return string.Empty;
 025            if (number >= 1000) return "M" + ToRoman(number - 1000);
 026            if (number >= 900) return "CM" + ToRoman(number - 900);
 027            if (number >= 500) return "D" + ToRoman(number - 500);
 028            if (number >= 400) return "CD" + ToRoman(number - 400);
 029            if (number >= 100) return "C" + ToRoman(number - 100);
 030            if (number >= 90) return "XC" + ToRoman(number - 90);
 031            if (number >= 50) return "L" + ToRoman(number - 50);
 032            if (number >= 40) return "XL" + ToRoman(number - 40);
 033            if (number >= 10) return "X" + ToRoman(number - 10);
 034            if (number >= 9) return "IX" + ToRoman(number - 9);
 035            if (number >= 5) return "V" + ToRoman(number - 5);
 036            if (number >= 4) return "IV" + ToRoman(number - 4);
 037            if (number >= 1) return "I" + ToRoman(number - 1);
 038            return "?"; // Unreachable Code?
 039        }
 40
 41        /// <summary>
 42        /// Returns a given array of numbers to the path of operative amendments.
 43        /// For example: 1, 1.a, 1.a.i 1.a.ii, 1.a.ii.1 etc.
 44        /// </summary>
 45        /// <param name="input"></param>
 46        /// <returns></returns>
 47        public static string ToPathname(this int[] input)
 048        {
 049            var path = "";
 50
 051            if (input.Length == 0)
 052                return "";
 53
 054            for (int i = 0; i < input.Length; i++)
 055            {
 56                // [1].a.ii
 057                if (i == 0 || i % 3 == 0)
 058                {
 059                    path += "." + (input[i] + 1).ToString();
 060                }
 061                else if (i == 1 || i % 3 == 1)
 062                {
 063                    path += "." + input[i].ToLetter();
 064                }
 65                else
 066                {
 067                    path += "." + (input[i] + 1).ToRoman().ToLower();
 068                }
 069            }
 070            if (path.StartsWith("."))
 071                path = path.Substring(1);
 72
 073            return path;
 074        }
 75
 76        /// <summary>
 77        /// returns a given number into a letter for example 0 = a, 1=b, 26=aa, 27=ab...
 78        /// </summary>
 79        /// <param name="number">The input number that should be converted it has to be zero or higher</param>
 80        /// <returns></returns>
 81        public static string ToLetter(this int number)
 082        {
 083            return NumberAsLetter(number);
 084        }
 85
 86        private static string NumberAsLetter(int index)
 087        {
 088            int quotient = index / 26;
 089            if (quotient > 0)
 090                return NumberAsLetter(quotient - 1) + chars[index % chars.Length].ToString();
 91            else
 092                return chars[index % chars.Length].ToString();
 093        }
 94
 095        private static readonly char[] chars = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', '
 96    }
 97}