Note: I am working on amendments to Commands As Functions,
so that the functions would be identical to the standard functions in AHK v2,
with any additional non-AHK v2 functions at the bottom.
I have now fully converted an example 4200-line script, to make it AHK v1/v2 two-way compatible,
the only pressing issue is double quotes, "" in AHK v1, `" in AHK v2,
a consistent method perhaps `" for both if doable, would be immensely helpful
with conversion. Apart from that it seems that AHK v1 has everything it needs
in order to make two-way compatibility quite feasible.
For example, fortunately this change was made recently:
Loop (parse a string)
https://autohotkey.com/docs/commands/LoopParse.htm
[v1.1.21+]: This parameter can be an % expression, but the percent-space prefix must be used.
Code: Select all
;==================================================
;note: this is intended to appear in the new Commands As Functions library:
;for AHK v1 only (equivalent to AHK v2's Deref function)
Deref(String) {
Transform, OutputVar, Deref, % String
Return OutputVar
}
;==================================================
JEE_ParamFirst(oParams*)
{
Return oParams[1]
}
JEE_ParamLast(oParams*)
{
Return oParams[oParams.MaxIndex()]
}
JEE_ParamCount(oParams*)
{
Return oParams.MaxIndex()
}
;==================================================
JEE_InStr1(ByRef Haystack, Needle, CaseSensitive:=false, StartingPos:=1, Occurrence:=1) {
if (StartingPos <= 0) && !(SubStr(A_AhkVersion, 1, 2) = "1.")
StartingPos--
Return InStr(Haystack, Needle, CaseSensitive, StartingPos, Occurrence)
}
JEE_InStr2(ByRef Haystack, Needle, CaseSensitive:=false, StartingPos:=1, Occurrence:=1) {
if (StartingPos <= -1) && (SubStr(A_AhkVersion, 1, 2) = "1.")
StartingPos++
Return InStr(Haystack, Needle, CaseSensitive, StartingPos, Occurrence)
}
JEE_SubStr1(String, StartingPos, Length:="") {
if (StartingPos <= 0) && !(SubStr(A_AhkVersion, 1, 2) = "1.")
StartingPos--
if (vLength = "")
Return SubStr(String, StartingPos)
Return SubStr(String, StartingPos, Length)
}
JEE_SubStr2(String, StartingPos, Length:="") {
if (StartingPos <= -1) && (SubStr(A_AhkVersion, 1, 2) = "1.")
StartingPos++
if (StartingPos = 0)
Return ""
if (vLength = "")
Return SubStr(String, StartingPos)
Return SubStr(String, StartingPos, Length)
}
JEE_RegExMatch1(Haystack, NeedleRegEx, UnquotedOutputVar:="", StartingPos:=1) {
if (StartingPos <= 0) && !(SubStr(A_AhkVersion, 1, 2) = "1.")
StartingPos--
Return RegExMatch(Haystack, NeedleRegEx, UnquotedOutputVar, StartingPos)
}
JEE_RegExMatch2(Haystack, NeedleRegEx, UnquotedOutputVar:="", StartingPos:=1) {
if (StartingPos <= -1) && (SubStr(A_AhkVersion, 1, 2) = "1.")
StartingPos++
Return RegExMatch(Haystack, NeedleRegEx, UnquotedOutputVar, StartingPos)
}
JEE_RegExReplace1(Haystack, NeedleRegEx, Replacement:="", OutputVarCount:="", Limit:=-1, StartingPos:=1) {
if (StartingPos <= 0) && !(SubStr(A_AhkVersion, 1, 2) = "1.")
StartingPos--
Return RegExReplace(Haystack, NeedleRegEx, Replacement, OutputVarCount, Limit, StartingPos)
}
JEE_RegExReplace2(Haystack, NeedleRegEx, Replacement:="", OutputVarCount:="", Limit:=-1, StartingPos:=1) {
if (StartingPos <= -1) && (SubStr(A_AhkVersion, 1, 2) = "1.")
StartingPos++
Return RegExReplace(Haystack, NeedleRegEx, Replacement, OutputVarCount, Limit, StartingPos)
}
;==================================================
;note: no special handling for double comma
JEE_StrContains(ByRef vText, ByRef vNeedles, vDelim:=",", vCaseSen:=0)
{
vDelim := SubStr(vDelim, 1, 1)
Loop, Parse, vNeedles, % vDelim
if InStr(vText, A_LoopField, vCaseSen)
Return 1
Return 0
}
;note: no special handling for double comma
JEE_StrIn(ByRef vText, ByRef vNeedles, vDelim:=",", vCaseSen:=0)
{
vSCS := A_StringCaseSense
StringCaseSense, % vCaseSen ? "On" : "Off"
Loop, Parse, vNeedles, % vDelim
if !("" vText <> "" A_LoopField) ;if not different (i.e. if same)
{
StringCaseSense, % vSCS
Return 1
}
StringCaseSense, % vSCS
Return 0
}
JEE_Between(vNum, vRange1, vRange2)
{
if (vNum >= vRange1) && (vNum <= vRange2)
Return 1
else
Return 0
}
;==================================================