|
|
|
package main
|
|
|
|
|
|
|
|
import (
|
|
|
|
"fmt"
|
|
|
|
"io/ioutil"
|
|
|
|
"os"
|
|
|
|
"strconv"
|
|
|
|
"strings"
|
|
|
|
)
|
|
|
|
|
|
|
|
// 20OCT21 review commit verison
|
|
|
|
|
|
|
|
func main() {
|
|
|
|
file_name := string(os.Args[1])
|
|
|
|
input_text, err_01 := ioutil.ReadFile(file_name)
|
|
|
|
|
|
|
|
if err_01 != nil {
|
|
|
|
fmt.Println("ebaõnnestus")
|
|
|
|
os.Exit(1)
|
|
|
|
}
|
|
|
|
|
|
|
|
// fmt.Println(string(input_text))
|
|
|
|
|
|
|
|
text_slice := SplitBySpace(string(input_text))
|
|
|
|
|
|
|
|
// fmt.Println(text_slice)
|
|
|
|
|
|
|
|
text_slice = FindHexBinArticles(text_slice) // convert nr systems
|
|
|
|
|
|
|
|
text := RemoveDoubleSpaces(strings.Join(text_slice, " ")) // empty slice units removed
|
|
|
|
|
|
|
|
// fmt.Println(text)
|
|
|
|
|
|
|
|
text = FixPunctuation(text) // first punctuation check
|
|
|
|
|
|
|
|
next_slice := SplitBySpace(text)
|
|
|
|
|
|
|
|
// strings.Fields(sisesta_string)
|
|
|
|
|
|
|
|
next_slice = FindTriggers(next_slice) // upper lower capitalize
|
|
|
|
|
|
|
|
output_text := RemoveDoubleSpaces(strings.Join(next_slice, " ")) // slice back to single string
|
|
|
|
|
|
|
|
output_text = FixPunctuation(output_text) // final punctuation control
|
|
|
|
|
|
|
|
// fmt.Println(string(output_text))
|
|
|
|
|
|
|
|
output_text = FixApostrophes(output_text) // apostrophes being checked
|
|
|
|
|
|
|
|
// fmt.Println(string(output_text))
|
|
|
|
|
|
|
|
os.WriteFile(string(os.Args[2]), []byte(string(output_text)), os.ModePerm)
|
|
|
|
}
|
|
|
|
|
|
|
|
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 {
|
|
|
|
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 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
|
|
|
|
runes := []rune(text)
|
|
|
|
mark1 := '‘'
|
|
|
|
mark2 := '’'
|
|
|
|
for i, letter := range runes {
|
|
|
|
if letter == mark1 || letter == mark2 {
|
|
|
|
|
|
|
|
if i > 0 && i < len(runes)-1 && runes[i-1] != 32 && runes[i+1] != 32 {
|
|
|
|
runes[i] = mark2
|
|
|
|
continue
|
|
|
|
}
|
|
|
|
|
|
|
|
if pair_count {
|
|
|
|
if i < len(runes)-2 && runes[i+1] == rune(32) {
|
|
|
|
runes[i] = mark1
|
|
|
|
runes = append(runes[:i+1], runes[i+2:]...)
|
|
|
|
pair_count = false
|
|
|
|
continue
|
|
|
|
} else {
|
|
|
|
runes[i] = mark1
|
|
|
|
pair_count = false
|
|
|
|
continue
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if !pair_count {
|
|
|
|
if i > 1 && runes[i-1] == rune(32) {
|
|
|
|
runes[i] = mark2
|
|
|
|
runes = append(runes[:i-1], runes[i:]...)
|
|
|
|
pair_count = true
|
|
|
|
continue
|
|
|
|
} else {
|
|
|
|
runes[i] = mark2
|
|
|
|
pair_count = true
|
|
|
|
/*
|
|
|
|
if i < len(runes)-1 {
|
|
|
|
if rune(runes[i+1]) != ' ' {
|
|
|
|
helper := runes
|
|
|
|
runes = append(runes[:i+1], rune(32))
|
|
|
|
runes = append(runes, helper[i+1:]...)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
*/
|
|
|
|
continue
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
text = ""
|
|
|
|
for _, char := range runes {
|
|
|
|
text += string(char)
|
|
|
|
}
|
|
|
|
return text
|
|
|
|
}
|
|
|
|
|
|
|
|
func FindHexBinArticles(slice []string) []string {
|
|
|
|
var x int
|
|
|
|
for i := range slice {
|
|
|
|
if strings.Contains(string(slice[i]), "(bin)") || strings.Contains(string(slice[i]), "(hex)") {
|
|
|
|
x = Converter(strings.ToUpper(slice[i-1]), slice[i][:5])
|
|
|
|
slice[i-1] = strconv.Itoa(x)
|
|
|
|
|
|
|
|
slice[i] = strings.TrimPrefix(slice[i], "(bin)")
|
|
|
|
slice[i] = strings.TrimPrefix(slice[i], "(hex)")
|
|
|
|
}
|
|
|
|
if i+1 != len(slice) && (slice[i] == "a" || slice[i] == "A") && len(slice[i+1]) != 0 {
|
|
|
|
if strings.ContainsAny(string(slice[i+1][0]), "aeiouh") {
|
|
|
|
slice[i] += "n"
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return slice
|
|
|
|
}
|
|
|
|
|
|
|
|
func FindTriggers(slice []string) []string { // all of those add extra space when completed (fix implemented)
|
|
|
|
|
|
|
|
var x int // how many words to modify
|
|
|
|
for i := range slice {
|
|
|
|
|
|
|
|
if strings.Contains(string(slice[i]), "(up)") {
|
|
|
|
slice[i-1] = strings.ToUpper(slice[i-1])
|
|
|
|
slice[i] = strings.TrimPrefix(slice[i], "(up)")
|
|
|
|
}
|
|
|
|
if strings.Contains(string(slice[i]), "(up,") {
|
|
|
|
x = int(slice[i][5]) - 48
|
|
|
|
for a := i - x; a < i; a++ {
|
|
|
|
slice[a] = strings.ToUpper(slice[a])
|
|
|
|
}
|
|
|
|
slice[i] = slice[i][7:]
|
|
|
|
}
|
|
|
|
|
|
|
|
if strings.Contains(string(slice[i]), "(low)") {
|
|
|
|
slice[i-1] = strings.ToLower(slice[i-1])
|
|
|
|
slice[i] = strings.TrimPrefix(slice[i], "(low)")
|
|
|
|
}
|
|
|
|
if strings.Contains(string(slice[i]), "(low,") {
|
|
|
|
x = int(slice[i][6]) - 48
|
|
|
|
for b := i - x; 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] = strings.TrimPrefix(slice[i], "(cap)")
|
|
|
|
}
|
|
|
|
if strings.Contains(string(slice[i]), "(cap,") {
|
|
|
|
x = int(slice[i][6]) - 48
|
|
|
|
for c := i - x; c < i; c++ {
|
|
|
|
slice[c] = strings.ToUpper(string(slice[c][0])) + slice[c][1:]
|
|
|
|
}
|
|
|
|
slice[i] = slice[i][8:]
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
return slice
|
|
|
|
}
|
|
|
|
|
|
|
|
func SplitBySpace(text string) []string {
|
|
|
|
separator := " "
|
|
|
|
str_temp := "" // temporary string
|
|
|
|
text_slice := make([]string, 0)
|
|
|
|
|
|
|
|
for i, char := range text {
|
|
|
|
|
|
|
|
if string(char) != separator && i != len(text)-1 {
|
|
|
|
str_temp += string(char)
|
|
|
|
} else if str_temp == "(low," || str_temp == "(up," || str_temp == "(cap," {
|
|
|
|
str_temp += string(char)
|
|
|
|
continue
|
|
|
|
} else {
|
|
|
|
text_slice = append(text_slice, str_temp)
|
|
|
|
str_temp = ""
|
|
|
|
}
|
|
|
|
|
|
|
|
if i == len(text)-1 {
|
|
|
|
text_slice = append(text_slice, str_temp)
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
return text_slice
|
|
|
|
}
|
|
|
|
|
|
|
|
func Converter(str, system string) int { // converting ok (input check missing)
|
|
|
|
var x int
|
|
|
|
var base string
|
|
|
|
|
|
|
|
if system == "(hex)" {
|
|
|
|
base = "0123456789ABCDEF"
|
|
|
|
}
|
|
|
|
if system == "(bin)" {
|
|
|
|
base = "01"
|
|
|
|
}
|
|
|
|
|
|
|
|
temp_result := 0
|
|
|
|
result := 0
|
|
|
|
|
|
|
|
for id, digit := range str {
|
|
|
|
|
|
|
|
for base_id, base_nr := range base {
|
|
|
|
if digit == base_nr {
|
|
|
|
x = base_id
|
|
|
|
}
|
|
|
|
}
|
|
|
|
z := len(str) - 1 - id
|
|
|
|
y := len(base)
|
|
|
|
yVar := y
|
|
|
|
if z == 0 {
|
|
|
|
temp_result = x
|
|
|
|
} else if z == 1 {
|
|
|
|
temp_result = x * y
|
|
|
|
} else {
|
|
|
|
for i := 1; i < z; i++ {
|
|
|
|
yVar *= y
|
|
|
|
}
|
|
|
|
temp_result = x * yVar
|
|
|
|
}
|
|
|
|
result += temp_result
|
|
|
|
y = 0
|
|
|
|
z = 0
|
|
|
|
}
|
|
|
|
return result
|
|
|
|
}
|