You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

64 lines
2.1 KiB

  1. function counterDecode(inputId: string, outputId: string) {
  2. var custom_indent: string = (<HTMLInputElement>document.getElementById(inputId)).value;
  3. var result: string = descriptiveCounter(custom_indent);
  4. document.getElementById(outputId).innerHTML = result;
  5. }
  6. export function descriptiveCounter(input: string): string {
  7. input = input.replace(/\\t/g, " ");
  8. input = input.replace(/\\r/g, "\r");
  9. input = input.replace(/\\n/g, "\n");
  10. var tokens: Array<string> = input.split("");
  11. var result = "";
  12. var repeatedCharCount = 0;
  13. for (var i = 0; i < tokens.length; i++) {
  14. var char = input.substr(i, 1);
  15. if (char == input.substr(i + 1, 1)) {
  16. repeatedCharCount++;
  17. } else {
  18. switch (char) {
  19. case " ":
  20. char = "blankspace";
  21. break;
  22. case "\t":
  23. char = "tab";
  24. break;
  25. case "\n":
  26. char = "\\n";
  27. break;
  28. case "\r":
  29. char = "\\r";
  30. break;
  31. default:
  32. char = "'" + char + "'";
  33. }
  34. repeatedCharCount = repeatedCharCount > 8 ? 8 : repeatedCharCount;
  35. if (repeatedCharCount > 0) {
  36. char += "s";
  37. }
  38. result += getCountText(repeatedCharCount, char);
  39. repeatedCharCount = 0;
  40. }
  41. }
  42. if (result.length < 0) {
  43. switch (char) {
  44. case " ":
  45. char = "blankspace";
  46. break;
  47. case "\t":
  48. char = "tab";
  49. }
  50. repeatedCharCount = repeatedCharCount > 8 ? 8 : repeatedCharCount;
  51. result = getCountText(repeatedCharCount, char);
  52. }
  53. result = result.replace(/^ & /, "")
  54. return result;
  55. }
  56. function getCountText(count: number, char: string): string {
  57. const dict = ["one", "two", "three", "four", "five", "six", "seven", "eight", "many"];
  58. const ampersand = " & ";
  59. return ampersand + dict[count] + " " + char;
  60. }