Advertisement
Guest User

AHK V2 / HotString Tempterature Converter

a guest
Nov 16th, 2024
27
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Autohotkey 3.89 KB | Source Code | 0 0
  1. #Requires Autohotkey v2
  2. #SingleInstance Force
  3.  
  4. CharMinus := Chr(0x2212)
  5. CharNNbrSpace := Chr(0x202F) ; Narrow No-Break Space
  6. CharDegree := Chr(0x00B0)
  7.  
  8. RegistryTemperaturesHotString() {
  9.     HotStringsEntries := ["cf", "fc", "ck", "kc", "fk", "kf", "kr", "rk", "fr", "rf", "cr", "rc", "cn", "nc", "fn", "nf", "kn", "nk", "rn", "nr"]
  10.  
  11.     ShortCutConverter(InputString) {
  12.         InputString := StrUpper(InputString)
  13.         return SubStr(InputString, 1, 1) "t" SubStr(InputString, 2, 1)
  14.     }
  15.  
  16.     RegistryBridge(conversionLabel) {
  17.         HotString(":C?0:ct" conversionLabel, (D) => TemperaturesConversionsInputHook(ShortCutConverter(conversionLabel), D))
  18.     }
  19.  
  20.     for conversionLabel in HotStringsEntries {
  21.         RegistryBridge(conversionLabel)
  22.     }
  23. } RegistryTemperaturesHotString()
  24.  
  25.  
  26. TemperaturesConversionsInputHook(ConversionType, FallBackString := "") {
  27.     FallBackString := RegExReplace(FallBackString, ".*:(.*)", "$1")
  28.  
  29.     IH := InputHook("C")
  30.     IH.KeyOpt("{Space}{Enter}{Tab}", "E")
  31.     IH.Start()
  32.     IH.Wait()
  33.  
  34.     TemperatureValue := IH.Input
  35.     TemperatureValue := RegExReplace(TemperatureValue, "[^\d.,-" CharMinus "]")
  36.  
  37.     Output := ""
  38.  
  39.     try {
  40.         Output := TemperaturesConversion(ConversionType, TemperatureValue)
  41.     } catch {
  42.         Output := FallBackString
  43.     }
  44.  
  45.     SendText(Output)
  46. }
  47.  
  48. TemperaturesConversion(ConversionType := "CtF", TemperatureValue := 0.00) {
  49.     ConversionTo := SubStr(ConversionType, -1)
  50.     ConversionsSymbols := Map(
  51.         "C", CharDegree "C", ; or use Chr(0x2103), dedicated Celsius symbol
  52.         "F", CharDegree "F", ; or use Chr(0x2109), dedicated Fahrenheit symbol
  53.         "K", "K", ; or use Chr(0x212A), dedicated Kelvin symbol
  54.         "R", CharDegree "R", ; Rankine Scale
  55.         "N", CharDegree "N", ; Newton Scale
  56.     )
  57.     ConversionsValues := Map(
  58.         "CtF", (GetConverted) => (GetConverted * 9 / 5) + 32,
  59.         "FtC", (GetConverted) => (GetConverted - 32) * 5 / 9,
  60.         "CtK", (GetConverted) => GetConverted + 273.15,
  61.         "KtC", (GetConverted) => GetConverted - 273.15,
  62.         "FtK", (GetConverted) => (GetConverted - 32) * 5 / 9 + 273.15,
  63.         "KtF", (GetConverted) => (GetConverted - 273.15) * 9 / 5 + 32,
  64.         "KtR", (GetConverted) => GetConverted * 1.8,
  65.         "RtK", (GetConverted) => GetConverted / 1.8,
  66.         "FtR", (GetConverted) => GetConverted + 459.67,
  67.         "RtF", (GetConverted) => GetConverted - 459.67,
  68.         "CtR", (GetConverted) => (GetConverted + 273.15) * 1.8,
  69.         "RtC", (GetConverted) => (GetConverted / 1.8) - 273.15,
  70.         "CtN", (GetConverted) => GetConverted * 33 / 100,
  71.         "NtC", (GetConverted) => GetConverted * 100 / 33,
  72.         "NtF", (GetConverted) => (GetConverted * 60 / 11) + 32,
  73.         "FtN", (GetConverted) => (GetConverted - 32) * 11 / 60,
  74.         "NtK", (GetConverted) => (GetConverted * 100 / 33) + 273.15,
  75.         "KtN", (GetConverted) => (GetConverted - 273.15) * 33 / 100,
  76.         "NtR", (GetConverted) => (GetConverted * 100 / 33 + 273.15) * 1.8,
  77.         "RtN", (GetConverted) => (GetConverted / 1.8 - 273.15) * 33 / 100
  78.     )
  79.  
  80.     ConvertedTemperatureValue := 0
  81.     UseComma := False
  82.  
  83.     if (InStr(TemperatureValue, CharMinus)) {
  84.         TemperatureValue := RegExReplace(TemperatureValue, CharMinus, "-")
  85.     }
  86.  
  87.     if (InStr(TemperatureValue, ",")) {
  88.         TemperatureValue := RegExReplace(TemperatureValue, ",", ".")
  89.         UseComma := True
  90.     }
  91.  
  92.     if (ConversionsValues.Has(ConversionType)) {
  93.         ConvertedTemperatureValue := ConversionsValues[ConversionType](TemperatureValue)
  94.     } else {
  95.         Throw Error("Wrong conversion type: " ConversionType)
  96.     }
  97.  
  98.     if !(GetKeyState("CapsLock", "T"))
  99.         ConvertedTemperatureValue := Round(ConvertedTemperatureValue, 2)
  100.  
  101.     if (Mod(ConvertedTemperatureValue, 1) = 0)
  102.         ConvertedTemperatureValue := Round(ConvertedTemperatureValue)
  103.  
  104.     if (SubStr(ConvertedTemperatureValue, 1, 1) = "-")
  105.         ConvertedTemperatureValue := CharMinus SubStr(ConvertedTemperatureValue, 2)
  106.  
  107.     if (UseComma)
  108.         ConvertedTemperatureValue := RegExReplace(ConvertedTemperatureValue, "\.", ",")
  109.  
  110.     ConvertedTemperatureValue .= CharNNbrSpace ConversionsSymbols[ConversionTo]
  111.     return ConvertedTemperatureValue
  112. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement