Autohotkey Keyword Generator function
up vote
0
down vote
favorite
Here I create new search words from an existing text. The function understands camelcase.
newSearchWords := getAutoKeywords(ByRef oldKeywords, ByRef words)
There is a part i do not like:
if(Match.Value(4))
keyTemp := Match.Value(4)
else if(Match.Value(3))
keyTemp := Match.Value(3)
else if(Match.Value(2))
that depends on the regular expression I use here in this Autohotkey - Script.
The Autohotkey regEx expressions are not exactly the same as Perl or some other languages.
camelCaseOr := "(?:[^A-Z]?)([A-Z][a-z]+)"
normalOr := "()([W_-][a-z]+)"
regEx := "(?:(" camelCaseOr "|" normalOr "))"
StartingPosition := 2
I think its posible to write this regular expression shorter and so that I do not need the whole IF instructions.
it depends on the performance because he should work later with a large amount of data regularly.
getAutoKeywords(ByRef oldKeywords, ByRef words){
newKeyWords := oldKeywords " " words
firstWord := "" ; backup if founds nothing
addKeysMAX := 4
minLength := 4
camelCaseOr := "(?:[^A-Z]?)([A-Z][a-z]+)"
normalOr := "()([W_-][a-z]+)"
regEx := "(?:(" camelCaseOr "|" normalOr "))"
StartingPosition := 2
addedKeysCounter := 0
Array := ; or Array := Array()
while(foundPos := RegexMatch( " " newKeyWords, "O)" regEx, Match, StartingPosition - 1 )){
StartingPosition := Match.Pos(1) + Match.Len(1)
if(addedKeysCounter >= addKeysMAX)
break
preCar1 := Match.Value(2)
preCar2 := Match.Value(3)
;if(preCar1=="|" || preCar2=="|")
; break
if(Match.Value(4))
keyTemp := Match.Value(4)
else if(Match.Value(3))
keyTemp := Match.Value(3)
else if(Match.Value(2))
keyTemp := Match.Value(2)
s:= ""
loop,4
s .= A_Index ":" Match.Value(A_Index) "#"
; MsgBox,% s "(" A_LineNumber " " RegExReplace(A_LineFile,".*\") ")"
if(0)
MsgBox,% keyTemp "(" A_LineNumber " " RegExReplace(A_LineFile,".*\") ")"
trim_keyTemp := trim(keyTemp," `t`r`n")
if(!HasVal(Array,trim_keyTemp)){
if(!firstWord)
firstWord := trim_keyTemp
if(minLength <= strlen(trim_keyTemp))
Array.Push(trim_keyTemp) ; Append this line to the array.
ArrayCount++
}
; MsgBox,% keyTemp
}
newKeyWords := ""
Loop % ArrayCount
{
; element := Array%A_Index%
element := Array[A_Index]
; MsgBox % "Element number " . A_Index . " is " . Array%A_Index%
newKeyWords .= element " "
}
if(!newKeyWords := rTrim(newKeyWords))
if(!newKeyWords := firstWord)
newKeyWords := "without keywords"
; MsgBox % "Element number " . A_Index . " is " . Array%A_Index%
if(1 && InStr(A_ComputerName,"SL5"))
feedbackMsgBox(RegExReplace(A_LineFile,".*\") ">" . A_LineNumber, "newKeyWords=" newKeyWords )
return newKeyWords
}
HasVal(haystack, needle) { ; return index
if !(IsObject(haystack)) || (haystack.Length() = 0)
return 0
for index, value in haystack
if (value = needle)
return index
return 0
}
regex autohotkey
add a comment |
up vote
0
down vote
favorite
Here I create new search words from an existing text. The function understands camelcase.
newSearchWords := getAutoKeywords(ByRef oldKeywords, ByRef words)
There is a part i do not like:
if(Match.Value(4))
keyTemp := Match.Value(4)
else if(Match.Value(3))
keyTemp := Match.Value(3)
else if(Match.Value(2))
that depends on the regular expression I use here in this Autohotkey - Script.
The Autohotkey regEx expressions are not exactly the same as Perl or some other languages.
camelCaseOr := "(?:[^A-Z]?)([A-Z][a-z]+)"
normalOr := "()([W_-][a-z]+)"
regEx := "(?:(" camelCaseOr "|" normalOr "))"
StartingPosition := 2
I think its posible to write this regular expression shorter and so that I do not need the whole IF instructions.
it depends on the performance because he should work later with a large amount of data regularly.
getAutoKeywords(ByRef oldKeywords, ByRef words){
newKeyWords := oldKeywords " " words
firstWord := "" ; backup if founds nothing
addKeysMAX := 4
minLength := 4
camelCaseOr := "(?:[^A-Z]?)([A-Z][a-z]+)"
normalOr := "()([W_-][a-z]+)"
regEx := "(?:(" camelCaseOr "|" normalOr "))"
StartingPosition := 2
addedKeysCounter := 0
Array := ; or Array := Array()
while(foundPos := RegexMatch( " " newKeyWords, "O)" regEx, Match, StartingPosition - 1 )){
StartingPosition := Match.Pos(1) + Match.Len(1)
if(addedKeysCounter >= addKeysMAX)
break
preCar1 := Match.Value(2)
preCar2 := Match.Value(3)
;if(preCar1=="|" || preCar2=="|")
; break
if(Match.Value(4))
keyTemp := Match.Value(4)
else if(Match.Value(3))
keyTemp := Match.Value(3)
else if(Match.Value(2))
keyTemp := Match.Value(2)
s:= ""
loop,4
s .= A_Index ":" Match.Value(A_Index) "#"
; MsgBox,% s "(" A_LineNumber " " RegExReplace(A_LineFile,".*\") ")"
if(0)
MsgBox,% keyTemp "(" A_LineNumber " " RegExReplace(A_LineFile,".*\") ")"
trim_keyTemp := trim(keyTemp," `t`r`n")
if(!HasVal(Array,trim_keyTemp)){
if(!firstWord)
firstWord := trim_keyTemp
if(minLength <= strlen(trim_keyTemp))
Array.Push(trim_keyTemp) ; Append this line to the array.
ArrayCount++
}
; MsgBox,% keyTemp
}
newKeyWords := ""
Loop % ArrayCount
{
; element := Array%A_Index%
element := Array[A_Index]
; MsgBox % "Element number " . A_Index . " is " . Array%A_Index%
newKeyWords .= element " "
}
if(!newKeyWords := rTrim(newKeyWords))
if(!newKeyWords := firstWord)
newKeyWords := "without keywords"
; MsgBox % "Element number " . A_Index . " is " . Array%A_Index%
if(1 && InStr(A_ComputerName,"SL5"))
feedbackMsgBox(RegExReplace(A_LineFile,".*\") ">" . A_LineNumber, "newKeyWords=" newKeyWords )
return newKeyWords
}
HasVal(haystack, needle) { ; return index
if !(IsObject(haystack)) || (haystack.Length() = 0)
return 0
for index, value in haystack
if (value = needle)
return index
return 0
}
regex autohotkey
add a comment |
up vote
0
down vote
favorite
up vote
0
down vote
favorite
Here I create new search words from an existing text. The function understands camelcase.
newSearchWords := getAutoKeywords(ByRef oldKeywords, ByRef words)
There is a part i do not like:
if(Match.Value(4))
keyTemp := Match.Value(4)
else if(Match.Value(3))
keyTemp := Match.Value(3)
else if(Match.Value(2))
that depends on the regular expression I use here in this Autohotkey - Script.
The Autohotkey regEx expressions are not exactly the same as Perl or some other languages.
camelCaseOr := "(?:[^A-Z]?)([A-Z][a-z]+)"
normalOr := "()([W_-][a-z]+)"
regEx := "(?:(" camelCaseOr "|" normalOr "))"
StartingPosition := 2
I think its posible to write this regular expression shorter and so that I do not need the whole IF instructions.
it depends on the performance because he should work later with a large amount of data regularly.
getAutoKeywords(ByRef oldKeywords, ByRef words){
newKeyWords := oldKeywords " " words
firstWord := "" ; backup if founds nothing
addKeysMAX := 4
minLength := 4
camelCaseOr := "(?:[^A-Z]?)([A-Z][a-z]+)"
normalOr := "()([W_-][a-z]+)"
regEx := "(?:(" camelCaseOr "|" normalOr "))"
StartingPosition := 2
addedKeysCounter := 0
Array := ; or Array := Array()
while(foundPos := RegexMatch( " " newKeyWords, "O)" regEx, Match, StartingPosition - 1 )){
StartingPosition := Match.Pos(1) + Match.Len(1)
if(addedKeysCounter >= addKeysMAX)
break
preCar1 := Match.Value(2)
preCar2 := Match.Value(3)
;if(preCar1=="|" || preCar2=="|")
; break
if(Match.Value(4))
keyTemp := Match.Value(4)
else if(Match.Value(3))
keyTemp := Match.Value(3)
else if(Match.Value(2))
keyTemp := Match.Value(2)
s:= ""
loop,4
s .= A_Index ":" Match.Value(A_Index) "#"
; MsgBox,% s "(" A_LineNumber " " RegExReplace(A_LineFile,".*\") ")"
if(0)
MsgBox,% keyTemp "(" A_LineNumber " " RegExReplace(A_LineFile,".*\") ")"
trim_keyTemp := trim(keyTemp," `t`r`n")
if(!HasVal(Array,trim_keyTemp)){
if(!firstWord)
firstWord := trim_keyTemp
if(minLength <= strlen(trim_keyTemp))
Array.Push(trim_keyTemp) ; Append this line to the array.
ArrayCount++
}
; MsgBox,% keyTemp
}
newKeyWords := ""
Loop % ArrayCount
{
; element := Array%A_Index%
element := Array[A_Index]
; MsgBox % "Element number " . A_Index . " is " . Array%A_Index%
newKeyWords .= element " "
}
if(!newKeyWords := rTrim(newKeyWords))
if(!newKeyWords := firstWord)
newKeyWords := "without keywords"
; MsgBox % "Element number " . A_Index . " is " . Array%A_Index%
if(1 && InStr(A_ComputerName,"SL5"))
feedbackMsgBox(RegExReplace(A_LineFile,".*\") ">" . A_LineNumber, "newKeyWords=" newKeyWords )
return newKeyWords
}
HasVal(haystack, needle) { ; return index
if !(IsObject(haystack)) || (haystack.Length() = 0)
return 0
for index, value in haystack
if (value = needle)
return index
return 0
}
regex autohotkey
Here I create new search words from an existing text. The function understands camelcase.
newSearchWords := getAutoKeywords(ByRef oldKeywords, ByRef words)
There is a part i do not like:
if(Match.Value(4))
keyTemp := Match.Value(4)
else if(Match.Value(3))
keyTemp := Match.Value(3)
else if(Match.Value(2))
that depends on the regular expression I use here in this Autohotkey - Script.
The Autohotkey regEx expressions are not exactly the same as Perl or some other languages.
camelCaseOr := "(?:[^A-Z]?)([A-Z][a-z]+)"
normalOr := "()([W_-][a-z]+)"
regEx := "(?:(" camelCaseOr "|" normalOr "))"
StartingPosition := 2
I think its posible to write this regular expression shorter and so that I do not need the whole IF instructions.
it depends on the performance because he should work later with a large amount of data regularly.
getAutoKeywords(ByRef oldKeywords, ByRef words){
newKeyWords := oldKeywords " " words
firstWord := "" ; backup if founds nothing
addKeysMAX := 4
minLength := 4
camelCaseOr := "(?:[^A-Z]?)([A-Z][a-z]+)"
normalOr := "()([W_-][a-z]+)"
regEx := "(?:(" camelCaseOr "|" normalOr "))"
StartingPosition := 2
addedKeysCounter := 0
Array := ; or Array := Array()
while(foundPos := RegexMatch( " " newKeyWords, "O)" regEx, Match, StartingPosition - 1 )){
StartingPosition := Match.Pos(1) + Match.Len(1)
if(addedKeysCounter >= addKeysMAX)
break
preCar1 := Match.Value(2)
preCar2 := Match.Value(3)
;if(preCar1=="|" || preCar2=="|")
; break
if(Match.Value(4))
keyTemp := Match.Value(4)
else if(Match.Value(3))
keyTemp := Match.Value(3)
else if(Match.Value(2))
keyTemp := Match.Value(2)
s:= ""
loop,4
s .= A_Index ":" Match.Value(A_Index) "#"
; MsgBox,% s "(" A_LineNumber " " RegExReplace(A_LineFile,".*\") ")"
if(0)
MsgBox,% keyTemp "(" A_LineNumber " " RegExReplace(A_LineFile,".*\") ")"
trim_keyTemp := trim(keyTemp," `t`r`n")
if(!HasVal(Array,trim_keyTemp)){
if(!firstWord)
firstWord := trim_keyTemp
if(minLength <= strlen(trim_keyTemp))
Array.Push(trim_keyTemp) ; Append this line to the array.
ArrayCount++
}
; MsgBox,% keyTemp
}
newKeyWords := ""
Loop % ArrayCount
{
; element := Array%A_Index%
element := Array[A_Index]
; MsgBox % "Element number " . A_Index . " is " . Array%A_Index%
newKeyWords .= element " "
}
if(!newKeyWords := rTrim(newKeyWords))
if(!newKeyWords := firstWord)
newKeyWords := "without keywords"
; MsgBox % "Element number " . A_Index . " is " . Array%A_Index%
if(1 && InStr(A_ComputerName,"SL5"))
feedbackMsgBox(RegExReplace(A_LineFile,".*\") ">" . A_LineNumber, "newKeyWords=" newKeyWords )
return newKeyWords
}
HasVal(haystack, needle) { ; return index
if !(IsObject(haystack)) || (haystack.Length() = 0)
return 0
for index, value in haystack
if (value = needle)
return index
return 0
}
regex autohotkey
regex autohotkey
edited Nov 14 at 20:22
asked Nov 14 at 19:00
SL5net
3361315
3361315
add a comment |
add a comment |
active
oldest
votes
active
oldest
votes
active
oldest
votes
active
oldest
votes
active
oldest
votes
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53307072%2fautohotkey-keyword-generator-function%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown