diff options
| -rw-r--r-- | unxml.go | 39 | 
1 files changed, 28 insertions, 11 deletions
@@ -158,16 +158,17 @@ func (r *ElementReader) Read(out []byte) (int, error) {  			}  			text := r.xr.tokenizer.Text()  			lentext := len(text) -			if lentext <= lenout { +			if lentext < lenout { +				//fmt.Printf("HAD SPACE: %q, count: %d\n", text, r.xr.count)  				n = copy(out[r.xr.count:], text)  				r.xr.count += n  				lenout -= n -				//fmt.Printf("HAD SPACE: %q, count: %d, err: %s\n", text, r.xr.count, err)  			} else { -				n = copy(out[r.xr.count:], text[:lenout-1]) +				//fmt.Printf("HAD NO SPACE: count: %d, lenout: %d\n", r.xr.count, lenout) +				n = copy(out[r.xr.count:], text[:lenout])  				r.xr.count += n -				r.xr.lastread = text[lenout-1:] -				//fmt.Printf("HAD NO SPACE: count: %d, err: %s\n", r.xr.count, err) +				lenout -= n +				r.xr.lastread = text[lenout:]  				return r.xr.count, err  			} @@ -182,9 +183,17 @@ func (r *ElementReader) Read(out []byte) (int, error) {  				intagtokeep = true  				raw := r.xr.tokenizer.Raw()  				//fmt.Printf("TokenRaw: %s\n", raw) -				n := copy(out[r.xr.count:], raw) -				r.xr.count += n -				lenout -= n +				if len(raw) < lenout { +					n := copy(out[r.xr.count:], raw) +					r.xr.count += n +					lenout -= n +				} else { +					n = copy(out[r.xr.count:], raw[:lenout-1]) +					r.xr.count += n +					lenout -= n +					r.xr.lastread = raw[lenout-1:] +					return r.xr.count, err +				}  			}  		case html.EndTagToken: @@ -199,9 +208,17 @@ func (r *ElementReader) Read(out []byte) (int, error) {  					r.tagsinstack[string(tn)]--  				}  				raw := r.xr.tokenizer.Raw() -				n := copy(out[r.xr.count:], raw) -				r.xr.count += n -				lenout -= n +				if len(raw) < lenout { +					n := copy(out[r.xr.count:], raw) +					r.xr.count += n +					lenout -= n +				} else { +					n = copy(out[r.xr.count:], raw[:lenout-1]) +					r.xr.count += n +					lenout -= n +					r.xr.lastread = raw[lenout-1:] +					return r.xr.count, err +				}  			}  		}  	}  | 
