MCPcopy
hub / github.com/mmcdole/gofeed / parseAtomText

Method parseAtomText

atom/parser.go:653–713  ·  view source on GitHub ↗
(p *xpp.XMLPullParser)

Source from the content-addressed store, hash-verified

651}
652
653func (ap *Parser) parseAtomText(p *xpp.XMLPullParser) (string, error) {
654
655 var text struct {
656 Type string `xml:"type,attr"`
657 Mode string `xml:"mode,attr"`
658 InnerXML string `xml:",innerxml"`
659 }
660
661 // get current base URL before it is clobbered by DecodeElement
662 base := p.BaseStack.Top()
663 err := p.DecodeElement(&text)
664 if err != nil {
665 return "", err
666 }
667
668 result := text.InnerXML
669 result = strings.TrimSpace(result)
670
671 lowerType := strings.ToLower(text.Type)
672 lowerMode := strings.ToLower(text.Mode)
673
674 if strings.Contains(result, "<![CDATA[") {
675 result = shared.StripCDATA(result)
676 if lowerType == "html" || strings.Contains(lowerType, "xhtml") {
677 result, _ = shared.ResolveHTML(base, result)
678 }
679 } else {
680 // decode non-CDATA contents depending on type
681
682 if lowerType == "text" ||
683 strings.HasPrefix(lowerType, "text/") ||
684 (lowerType == "" && lowerMode == "") {
685 result, err = shared.DecodeEntities(result)
686 } else if strings.Contains(lowerType, "xhtml") {
687 result = ap.stripWrappingDiv(result)
688 result, _ = shared.ResolveHTML(base, result)
689 } else if lowerType == "html" {
690 result = ap.stripWrappingDiv(result)
691 result, err = shared.DecodeEntities(result)
692 if err == nil {
693 result, _ = shared.ResolveHTML(base, result)
694 }
695 } else {
696 decodedStr, err := base64.StdEncoding.DecodeString(result)
697 if err == nil {
698 result = string(decodedStr)
699 }
700 }
701 }
702
703 // resolve relative URIs in URI-containing elements according to xml:base
704 name := strings.ToLower(p.Name)
705 if atomUriElements[name] {
706 resolved, err := shared.XmlBaseResolveUrl(base, result)
707 if resolved != nil && err == nil {
708 result = resolved.String()
709 }
710 }

Callers 6

parseRootMethod · 0.95
parseEntryMethod · 0.95
parseSourceMethod · 0.95
parseContentMethod · 0.95
parsePersonMethod · 0.95
parseGeneratorMethod · 0.95

Calls 6

stripWrappingDivMethod · 0.95
StripCDATAFunction · 0.92
ResolveHTMLFunction · 0.92
DecodeEntitiesFunction · 0.92
XmlBaseResolveUrlFunction · 0.92
StringMethod · 0.45

Tested by

no test coverage detected