Browse Source

lõpetatud

master
kauri 3 years ago
parent
commit
75e3e35ff8
  1. 127
      main.go

127
main.go

@ -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

Loading…
Cancel
Save