Fixes some mycology test suite errors
This commit is contained in:
parent
62400c81db
commit
0038f88327
4 changed files with 465 additions and 20 deletions
97
pkg/field/blank.go
Normal file
97
pkg/field/blank.go
Normal file
|
@ -0,0 +1,97 @@
|
|||
package field
|
||||
|
||||
func (f *Field) Blank(x, y int) {
|
||||
if !f.isIn(x, y) {
|
||||
// outside the field, nothing to do
|
||||
return
|
||||
}
|
||||
l := &f.lines[y-f.y]
|
||||
if x < l.x || x >= l.x+l.l {
|
||||
// outside the current line's columns
|
||||
return
|
||||
}
|
||||
if x > l.x && x < l.x+l.l-1 {
|
||||
// just set the value
|
||||
l.columns[x-l.x] = ' '
|
||||
return
|
||||
}
|
||||
// do we need to trim this line?
|
||||
if l.l == 1 {
|
||||
// this was the last character on the line
|
||||
if y == f.y {
|
||||
// We need to trim the leading lines
|
||||
leadingLines := 1
|
||||
for i := 1; i < f.ly; i++ {
|
||||
if f.lines[i].l == 0 {
|
||||
leadingLines++
|
||||
} else {
|
||||
break
|
||||
}
|
||||
}
|
||||
f.y += leadingLines
|
||||
f.ly -= leadingLines
|
||||
lines := make([]Line, f.ly)
|
||||
for i := 0; i < f.ly; i++ {
|
||||
lines[i] = f.lines[leadingLines+i]
|
||||
}
|
||||
f.lines = lines
|
||||
} else if y == f.y+f.ly-1 {
|
||||
// We need to trim the trailing lines
|
||||
trailingLines := 1
|
||||
for i := f.ly + f.y - 2; i >= 0; i-- {
|
||||
if f.lines[i].l == 0 {
|
||||
trailingLines++
|
||||
} else {
|
||||
break
|
||||
}
|
||||
}
|
||||
f.ly -= trailingLines
|
||||
f.lines = f.lines[:f.ly]
|
||||
} else {
|
||||
// it was a line in the middle
|
||||
l.l = 0
|
||||
l.columns = make([]int, 0)
|
||||
}
|
||||
} else if x == l.x {
|
||||
// We need to remove leading spaces
|
||||
leadingSpaces := 1
|
||||
for i := 1; i < l.l; i++ {
|
||||
if l.columns[i] == ' ' {
|
||||
leadingSpaces++
|
||||
} else {
|
||||
break
|
||||
}
|
||||
}
|
||||
l.x += leadingSpaces
|
||||
l.l -= leadingSpaces
|
||||
columns := make([]int, l.l)
|
||||
for i := 0; i < l.l; i++ {
|
||||
columns[i] = l.columns[leadingSpaces+i]
|
||||
}
|
||||
l.columns = columns
|
||||
} else if x == l.l+l.x-1 {
|
||||
// we need to remove trailing spaces
|
||||
trailingSpaces := 1
|
||||
for i := l.l - 2; i >= 0; i-- {
|
||||
if l.columns[i] == ' ' {
|
||||
trailingSpaces++
|
||||
} else {
|
||||
break
|
||||
}
|
||||
}
|
||||
l.l -= trailingSpaces
|
||||
l.columns = l.columns[:l.l]
|
||||
}
|
||||
// we now need to find the new field limits
|
||||
f.x = f.lines[0].x
|
||||
x2 := f.lines[0].l + f.lines[0].x
|
||||
for i := 1; i < f.ly; i++ {
|
||||
if f.x > f.lines[i].x {
|
||||
f.x = f.lines[i].x
|
||||
}
|
||||
if x2 < f.lines[i].x+f.lines[i].l {
|
||||
x2 = f.lines[i].x + f.lines[i].l
|
||||
}
|
||||
}
|
||||
f.lx = x2 - f.x
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue