mirror of
https://github.com/xiaoqidun/ofdgo.git
synced 2026-10-30 01:27:26 +08:00
1 parent
078c4e0736
commit
a3594d1280
3 files changed
+16
-3
No files matched your search
@@ -144,6 +144,10 @@ func (s *editorReferenceScan) accept(token xml.Token) bool {
|
|||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
if len(s.stack) == 0 {
|
if len(s.stack) == 0 {
|
||||||
|
if s.seen {
|
||||||
|
s.safe = false
|
||||||
|
return false
|
||||||
|
}
|
||||||
s.seen = true
|
s.seen = true
|
||||||
if token.Name.Local == "Document" {
|
if token.Name.Local == "Document" {
|
||||||
if s.refs.documents == nil {
|
if s.refs.documents == nil {
|
||||||
@@ -216,6 +220,10 @@ func (s *editorReferenceScan) accept(token xml.Token) bool {
|
|||||||
s.capture = true
|
s.capture = true
|
||||||
}
|
}
|
||||||
case xml.CharData:
|
case xml.CharData:
|
||||||
|
if len(s.stack) == 0 && len(bytes.Trim(token, " \t\r\n")) != 0 {
|
||||||
|
s.safe = false
|
||||||
|
return false
|
||||||
|
}
|
||||||
if s.capture {
|
if s.capture {
|
||||||
s.text.Write(token)
|
s.text.Write(token)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,6 +15,7 @@
|
|||||||
package ofdgo
|
package ofdgo
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"bufio"
|
||||||
"bytes"
|
"bytes"
|
||||||
"context"
|
"context"
|
||||||
"encoding/xml"
|
"encoding/xml"
|
||||||
@@ -49,7 +50,11 @@ func editorResourceDefinitions(ctx context.Context, data []byte, name string, so
|
|||||||
result.definitions = make(map[string]*editorResourceRefs)
|
result.definitions = make(map[string]*editorResourceRefs)
|
||||||
outer := &editorResourceRefs{ids: make(map[string]bool), files: make(map[string]bool), fonts: make(map[string]*editorFontUsage)}
|
outer := &editorResourceRefs{ids: make(map[string]bool), files: make(map[string]bool), fonts: make(map[string]*editorFontUsage)}
|
||||||
scan := editorReferenceScan{refs: outer, name: name, safe: true}
|
scan := editorReferenceScan{refs: outer, name: name, safe: true}
|
||||||
decoder := xml.NewDecoder(imageInput{ReadCloser: io.NopCloser(bytes.NewReader(data)), context: ctx})
|
input := bufio.NewReader(imageInput{ReadCloser: io.NopCloser(bytes.NewReader(data)), context: ctx})
|
||||||
|
if found, err := editorXMLPrefix(input); err != nil || !found {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
decoder := xml.NewDecoder(input)
|
||||||
for {
|
for {
|
||||||
if err := ctx.Err(); err != nil {
|
if err := ctx.Err(); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
@@ -66,7 +71,7 @@ func editorResourceDefinitions(ctx context.Context, data []byte, name string, so
|
|||||||
}
|
}
|
||||||
depth := len(scan.stack)
|
depth := len(scan.stack)
|
||||||
if node, ok := token.(xml.StartElement); ok {
|
if node, ok := token.(xml.StartElement); ok {
|
||||||
if depth == 0 && (scan.seen || node.Name.Local != "Res") || depth == 1 && editorResourceElement(node.Name.Local) == "" {
|
if depth == 0 && node.Name.Local != "Res" || depth == 1 && editorResourceElement(node.Name.Local) == "" {
|
||||||
return nil, nil
|
return nil, nil
|
||||||
}
|
}
|
||||||
if depth == 2 {
|
if depth == 2 {
|
||||||
|
|||||||
@@ -328,7 +328,7 @@ func (r *editorResourceRefs) scan(input io.Reader, name string) (bool, bool) {
|
|||||||
for {
|
for {
|
||||||
token, err := decoder.Token()
|
token, err := decoder.Token()
|
||||||
if err == io.EOF {
|
if err == io.EOF {
|
||||||
return scan.resource, len(scan.stack) == 0
|
return scan.resource, scan.seen && len(scan.stack) == 0
|
||||||
}
|
}
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return false, false
|
return false, false
|
||||||
|
|||||||
Reference in new issue
Block a user