File indexing completed on 2024-04-21 05:50:56

0001 /*
0002  *   Copyright 2017 Marco Martin <mart@kde.org>
0003  *
0004  *   This program is free software; you can redistribute it and/or modify
0005  *   it under the terms of the GNU Library General Public License as
0006  *   published by the Free Software Foundation; either version 2, or
0007  *   (at your option) any later version.
0008  *
0009  *   This program is distributed in the hope that it will be useful,
0010  *   but WITHOUT ANY WARRANTY; without even the implied warranty of
0011  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
0012  *   GNU Library General Public License for more details
0013  *
0014  *   You should have received a copy of the GNU Library General Public
0015  *   License along with this program; if not, write to the
0016  *   Free Software Foundation, Inc.,
0017  *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
0018  */
0019 
0020 function formatYDS(decimalGrade)
0021 {
0022     var adjusted = decimalGrade/6.5;
0023 
0024     print("Fallback to calculation, Raw YDS: " + adjusted);
0025 
0026     var numberForLetter = adjusted - Math.floor(adjusted);
0027     var letter;
0028     if (numberForLetter >= 0.75) {
0029         letter = "d";
0030     } else if (numberForLetter >= 0.5) {
0031         letter = "c";
0032     } else if (numberForLetter >= 0.25) {
0033         letter = "b";
0034     } else {
0035         letter = "a";
0036     }
0037     return "5." + Math.floor(adjusted) + letter;
0038 }
0039 
0040 function formatFrench(decimalGrade)
0041 {
0042     //completely aleatory but whatever
0043     //10.6 is 52/50: the ratio of number of lines in the table and the grade 10a
0044     var adjusted = decimalGrade/10.4;
0045 
0046     print("Fallback to calculation, Raw french: " + adjusted);
0047 
0048     var numberForLetter = adjusted - Math.floor(adjusted);
0049     var letter = "";
0050     var plus = "";
0051     if (numberForLetter >= 0.6) {
0052         letter = "c";
0053         if (numberForLetter >= 0.75) {
0054             plus = "+";
0055         }
0056     } else if (numberForLetter >= 0.3) {
0057         letter = "b";
0058         if (numberForLetter >= 0.45) {
0059             plus = "+";
0060         }
0061     } else {
0062         letter = "a";
0063         if (numberForLetter >= 0.15) {
0064             plus = "+";
0065         }
0066     }
0067 
0068     return Math.floor(adjusted) + letter + plus;
0069 }
0070 
0071 function convertToRoman(num) {
0072 
0073     var decimalValue = [ 1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1 ];
0074     var romanNumeral = [ 'M', 'CM', 'D', 'CD', 'C', 'XC', 'L', 'XL', 'X', 'IX', 'V', 'IV', 'I' ];
0075 
0076     var romanized = '';
0077 
0078     for (var index = 0; index < decimalValue.length; index++) {
0079         while (decimalValue[index] <= num) {
0080             romanized += romanNumeral[index];
0081             num -= decimalValue[index];
0082         }
0083     }
0084 
0085     return romanized;
0086 }
0087 
0088 function formatUIAA(decimalGrade)
0089 {
0090     var adjusted = decimalGrade/3 - 22 + 1/3;
0091 
0092     var numberForsign = adjusted - Math.floor(adjusted);
0093     var sign = "";
0094 
0095     if (numberForsign < 0.2 || numberForsign > 0.8) {
0096         sign = "";
0097     } else if (numberForsign > 0.5) {
0098         sign = "-";
0099     } else {
0100         sign = "+";
0101     }
0102     return convertToRoman(Math.round(adjusted)) + sign;
0103 }
0104 
0105 function formatFont(decimalGrade)
0106 {
0107     //completely aleatory similar to french
0108     var adjusted = decimalGrade/10.4;
0109     adjusted -= 0.6;
0110 
0111     print("Fallback to calculation, Raw french: " + adjusted);
0112 
0113     var numberForLetter = adjusted - Math.floor(adjusted);
0114     var letter = "";
0115     var plus = "";
0116     if (numberForLetter >= 0.6) {
0117         letter = "C";
0118         if (numberForLetter >= 0.75) {
0119             plus = "+";
0120         }
0121     } else if (numberForLetter >= 0.3) {
0122         letter = "B";
0123         if (numberForLetter >= 0.45) {
0124             plus = "+";
0125         }
0126     } else {
0127         letter = "A";
0128         if (numberForLetter >= 0.15) {
0129             plus = "+";
0130         }
0131     }
0132 
0133     return Math.floor(adjusted) + letter + plus;
0134 }
0135 
0136 function formatHueco(decimalGrade)
0137 {
0138     return "V" + (decimalGrade - 84);
0139 }
0140 
0141 function formatBGrade(decimalGrade)
0142 {
0143     return "B" + (decimalGrade - 84);
0144 }