|
|
|
@ -17,36 +17,87 @@ func main() {
|
|
|
|
|
os.Exit(1) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
text_slice := SplitBySpace(string(input_text)) |
|
|
|
|
// fmt.Println(string(input_text))
|
|
|
|
|
|
|
|
|
|
text_slice = FindTriggers(text_slice) |
|
|
|
|
input_text = []byte(FixPunctuation(string(input_text))) // initial punctuation edits
|
|
|
|
|
|
|
|
|
|
output_text := strings.Join(text_slice, " ") |
|
|
|
|
text_slice := SplitBySpace(string(input_text)) // string to slice of strings
|
|
|
|
|
|
|
|
|
|
output_text = FixPunctuation(output_text) |
|
|
|
|
text_slice = FindTriggers(text_slice) // find and correct formatting/converting
|
|
|
|
|
|
|
|
|
|
// os.WriteFile(os.Args[2], output_text, os.ModePerm)
|
|
|
|
|
output_text := RemoveDoubleSpaces(strings.Join(text_slice, " ")) // slice back to single string
|
|
|
|
|
|
|
|
|
|
fmt.Println(string(output_text)) |
|
|
|
|
output_text = FixApostrophes(output_text) // function dealing with apostrophes
|
|
|
|
|
|
|
|
|
|
output_text = FixPunctuation(output_text) // final punctuation control
|
|
|
|
|
|
|
|
|
|
os.WriteFile(string(os.Args[2]), []byte(string(output_text)), os.ModePerm) |
|
|
|
|
|
|
|
|
|
// fmt.Println(string(output_text))
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func RemoveDoubleSpaces(text string) string { |
|
|
|
|
for x := 0; x < len(text)-1; x++ { |
|
|
|
|
if x < len(text)-1 && rune(text[x]) == 32 && rune(text[x+1]) == 32 { |
|
|
|
|
text = text[:x] + text[x+1:] |
|
|
|
|
x = 0 |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
return text |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func FixPunctuation(text string) string { |
|
|
|
|
apostrophe_pair := true |
|
|
|
|
text = RemoveDoubleSpaces(text) |
|
|
|
|
|
|
|
|
|
for i := 0; i < len(text); i++ { |
|
|
|
|
if string(text[i]) == "." || string(text[i]) == "," || string(text[i]) == "!" || |
|
|
|
|
string(text[i]) == "?" || string(text[i]) == ":" || string(text[i]) == ";" { |
|
|
|
|
|
|
|
|
|
if strings.ContainsAny(string(text[i]), ".,!?:;") && i > 0 && i > len(text)-1 { |
|
|
|
|
fmt.Println("found sth") |
|
|
|
|
text = strings.TrimPrefix(text[i-1:i+1], " ") // removes single space before punctuation
|
|
|
|
|
if i > 0 && string(text[i-1]) == " " { |
|
|
|
|
text = text[:(i-1)] + text[i:] |
|
|
|
|
} |
|
|
|
|
} else if string(text[i]) != " " { |
|
|
|
|
if i > 0 && (string(text[i-1]) == "." || string(text[i-1]) == "," || string(text[i-1]) == "!" || |
|
|
|
|
string(text[i-1]) == "?" || string(text[i-1]) == ":" || string(text[i-1]) == ";") { |
|
|
|
|
text = text[:i] + " " + text[i:] |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
return text |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func FixApostrophes(text string) string { |
|
|
|
|
pair_count := true // after finding first apostrophe will turn false, after second back to true
|
|
|
|
|
|
|
|
|
|
for i := 0; i < len(text); i++ { |
|
|
|
|
if string(text[i]) == "'" { |
|
|
|
|
|
|
|
|
|
if strings.ContainsAny(string(text[i+1]), ".,!?:;") { |
|
|
|
|
if i > 0 && i < len(text)-1 && string(text[i-1]) != " " && string(text[i+1]) != " " { |
|
|
|
|
continue |
|
|
|
|
} |
|
|
|
|
if string(text[i+1]) != " " { |
|
|
|
|
text = text[:i+1] + " " + text[i+1:] |
|
|
|
|
|
|
|
|
|
if i < len(text)-2 && string(text[i+1]) == " " && pair_count { |
|
|
|
|
text = text[:i+1] + text[i+2:] |
|
|
|
|
pair_count = false |
|
|
|
|
continue |
|
|
|
|
} |
|
|
|
|
if pair_count { |
|
|
|
|
pair_count = false |
|
|
|
|
continue |
|
|
|
|
} |
|
|
|
|
if i > 1 && string(text[i-1]) == " " && !pair_count { |
|
|
|
|
text = text[:i-1] + text[i:] |
|
|
|
|
pair_count = true |
|
|
|
|
} |
|
|
|
|
if !pair_count { |
|
|
|
|
pair_count = true |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
// if string(text[i]) == "'" &&
|
|
|
|
|
|
|
|
|
|
/* |
|
|
|
|
if string(text[i]) == "'" && apostrophe_pair && i > len(text)-1 { |
|
|
|
|
fmt.Println("found first apostrophe") |
|
|
|
|
text = strings.TrimSuffix(text[i:i+2], " ") |
|
|
|
@ -56,33 +107,58 @@ func FixPunctuation(text string) string {
|
|
|
|
|
fmt.Println("found second apostrophe") |
|
|
|
|
text = strings.TrimPrefix(text[i-1:i+1], " ") |
|
|
|
|
apostrophe_pair = true |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
}*/ |
|
|
|
|
return text |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func FindTriggers(slice []string) []string { |
|
|
|
|
func FindTriggers(slice []string) []string { // all of those add extra space when completed (fix implemented)
|
|
|
|
|
var x int |
|
|
|
|
var z int // how many words to modify
|
|
|
|
|
for i := range slice { |
|
|
|
|
|
|
|
|
|
if slice[i] == "(bin)" || slice[i] == "(hex)" { // ok, except one additional space added
|
|
|
|
|
if slice[i] == "(bin)" || slice[i] == "(hex)" { |
|
|
|
|
x = Converter(slice[i-1], slice[i]) |
|
|
|
|
slice[i-1] = strconv.Itoa(x) |
|
|
|
|
slice[i] = "" |
|
|
|
|
} |
|
|
|
|
if slice[i] == "(up)" { |
|
|
|
|
|
|
|
|
|
if strings.Contains(string(slice[i]), "(up)") { |
|
|
|
|
slice[i-1] = strings.ToUpper(slice[i-1]) |
|
|
|
|
slice[i] = "" |
|
|
|
|
slice[i] = strings.TrimPrefix(slice[i], "(up)") |
|
|
|
|
} |
|
|
|
|
if strings.Contains(string(slice[i]), "(up,") { |
|
|
|
|
z = int(slice[i][5]) - 48 |
|
|
|
|
for a := i - z; a < i; a++ { |
|
|
|
|
slice[a] = strings.ToUpper(slice[a]) |
|
|
|
|
} |
|
|
|
|
slice[i] = slice[i][7:] |
|
|
|
|
} |
|
|
|
|
if slice[i] == "(low)" { |
|
|
|
|
|
|
|
|
|
if strings.Contains(string(slice[i]), "(low)") { |
|
|
|
|
slice[i-1] = strings.ToLower(slice[i-1]) |
|
|
|
|
slice[i] = "" |
|
|
|
|
slice[i] = strings.TrimPrefix(slice[i], "(low)") |
|
|
|
|
} |
|
|
|
|
if slice[i] == "(cap)" { |
|
|
|
|
if strings.Contains(string(slice[i]), "(low,") { |
|
|
|
|
z = int(slice[i][6]) - 48 |
|
|
|
|
for b := i - z; b < i; b++ { |
|
|
|
|
slice[b] = strings.ToLower(slice[b]) |
|
|
|
|
} |
|
|
|
|
slice[i] = slice[i][8:] |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if strings.Contains(string(slice[i]), "(cap)") { |
|
|
|
|
slice[i-1] = strings.ToUpper(string(slice[i-1][0])) + slice[i-1][1:] |
|
|
|
|
slice[i] = "" |
|
|
|
|
slice[i] = strings.TrimPrefix(slice[i], "(cap)") |
|
|
|
|
} |
|
|
|
|
if strings.Contains(string(slice[i]), "(cap,") { |
|
|
|
|
z = int(slice[i][6]) - 48 |
|
|
|
|
for c := i - z; c < i; c++ { |
|
|
|
|
slice[c] = strings.ToUpper(string(slice[c][0])) + slice[c][1:] |
|
|
|
|
} |
|
|
|
|
slice[i] = slice[i][8:] |
|
|
|
|
} |
|
|
|
|
if i+1 != len(slice) && (slice[i] == "a" || slice[i] == "A") { // ok
|
|
|
|
|
|
|
|
|
|
if i+1 != len(slice) && (slice[i] == "a" || slice[i] == "A") { |
|
|
|
|
if strings.ContainsAny(string(slice[i+1][0]), "aeiouh") { |
|
|
|
|
slice[i] += "n" |
|
|
|
|
} |
|
|
|
@ -102,6 +178,7 @@ func SplitBySpace(text string) []string {
|
|
|
|
|
if string(text[i]) != separator { |
|
|
|
|
str_temp += string(text[i]) |
|
|
|
|
} else if str_temp == "(low," || str_temp == "(up," || str_temp == "(cap," { |
|
|
|
|
str_temp += string(text[i]) |
|
|
|
|
continue |
|
|
|
|
} else { |
|
|
|
|
text_slice = append(text_slice, str_temp) |
|
|
|
@ -114,7 +191,7 @@ func SplitBySpace(text string) []string {
|
|
|
|
|
return text_slice |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func Converter(str, system string) int { |
|
|
|
|
func Converter(str, system string) int { // converting ok (input check missing)
|
|
|
|
|
var x int |
|
|
|
|
var base string |
|
|
|
|
|
|
|
|
|