mirror of
https://github.com/superseriousbusiness/gotosocial
synced 2025-06-05 21:59:39 +02:00
[feature] support processing of (many) more media types (#3090)
* initial work replacing our media decoding / encoding pipeline with ffprobe + ffmpeg * specify the video codec to use when generating static image from emoji * update go-storage library (fixes incompatibility after updating go-iotools) * maintain image aspect ratio when generating a thumbnail for it * update readme to show go-ffmpreg * fix a bunch of media tests, move filesize checking to callers of media manager for more flexibility * remove extra debug from error message * fix up incorrect function signatures * update PutFile to just use regular file copy, as changes are file is on separate partition * fix remaining tests, remove some unneeded tests now we're working with ffmpeg/ffprobe * update more tests, add more code comments * add utilities to generate processed emoji / media outputs * fix remaining tests * add test for opus media file, add license header to utility cmds * limit the number of concurrently available ffmpeg / ffprobe instances * reduce number of instances * further reduce number of instances * fix envparsing test with configuration variables * update docs and configuration with new media-{local,remote}-max-size variables
This commit is contained in:
77
vendor/github.com/go-xmlfmt/xmlfmt/xmlfmt.go
generated
vendored
77
vendor/github.com/go-xmlfmt/xmlfmt/xmlfmt.go
generated
vendored
@ -1,77 +0,0 @@
|
||||
////////////////////////////////////////////////////////////////////////////
|
||||
// Porgram: xmlfmt.go
|
||||
// Purpose: Go XML Beautify from XML string using pure string manipulation
|
||||
// Authors: Antonio Sun (c) 2016-2021, All rights reserved
|
||||
////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
package xmlfmt
|
||||
|
||||
import (
|
||||
"html"
|
||||
"regexp"
|
||||
"strings"
|
||||
)
|
||||
|
||||
var (
|
||||
reg = regexp.MustCompile(`<([/!]?)([^>]+?)(/?)>`)
|
||||
// NL is the newline string used in XML output, define for DOS-convenient.
|
||||
NL = "\r\n"
|
||||
)
|
||||
|
||||
// FormatXML will (purly) reformat the XML string in a readable way, without any rewriting/altering the structure.
|
||||
// If your XML Comments have nested tags in them, or you're not 100% sure otherwise, pass `true` as the third parameter to this function. But don't turn it on blindly, as the code has become ten times more complicated because of it.
|
||||
func FormatXML(xmls, prefix, indent string, nestedTagsInComments ...bool) string {
|
||||
nestedTagsInComment := false
|
||||
if len(nestedTagsInComments) > 0 {
|
||||
nestedTagsInComment = nestedTagsInComments[0]
|
||||
}
|
||||
reXmlComments := regexp.MustCompile(`(?s)(<!--)(.*?)(-->)`)
|
||||
src := regexp.MustCompile(`(?s)>\s+<`).ReplaceAllString(xmls, "><")
|
||||
if nestedTagsInComment {
|
||||
src = reXmlComments.ReplaceAllStringFunc(src, func(m string) string {
|
||||
parts := reXmlComments.FindStringSubmatch(m)
|
||||
p2 := regexp.MustCompile(`\r*\n`).ReplaceAllString(parts[2], " ")
|
||||
return parts[1] + html.EscapeString(p2) + parts[3]
|
||||
})
|
||||
}
|
||||
rf := replaceTag(prefix, indent)
|
||||
r := prefix + reg.ReplaceAllStringFunc(src, rf)
|
||||
if nestedTagsInComment {
|
||||
r = reXmlComments.ReplaceAllStringFunc(r, func(m string) string {
|
||||
parts := reXmlComments.FindStringSubmatch(m)
|
||||
return parts[1] + html.UnescapeString(parts[2]) + parts[3]
|
||||
})
|
||||
}
|
||||
|
||||
return r
|
||||
}
|
||||
|
||||
// replaceTag returns a closure function to do 's/(?<=>)\s+(?=<)//g; s(<(/?)([^>]+?)(/?)>)($indent+=$3?0:$1?-1:1;"<$1$2$3>"."\n".(" "x$indent))ge' as in Perl
|
||||
// and deal with comments as well
|
||||
func replaceTag(prefix, indent string) func(string) string {
|
||||
indentLevel := 0
|
||||
return func(m string) string {
|
||||
// head elem
|
||||
if strings.HasPrefix(m, "<?xml") {
|
||||
return NL + prefix + strings.Repeat(indent, indentLevel) + m
|
||||
}
|
||||
// empty elem
|
||||
if strings.HasSuffix(m, "/>") {
|
||||
return NL + prefix + strings.Repeat(indent, indentLevel) + m
|
||||
}
|
||||
// comment elem
|
||||
if strings.HasPrefix(m, "<!") {
|
||||
return NL + prefix + strings.Repeat(indent, indentLevel) + m
|
||||
}
|
||||
// end elem
|
||||
if strings.HasPrefix(m, "</") {
|
||||
indentLevel--
|
||||
return NL + prefix + strings.Repeat(indent, indentLevel) + m
|
||||
}
|
||||
defer func() {
|
||||
indentLevel++
|
||||
}()
|
||||
|
||||
return NL + prefix + strings.Repeat(indent, indentLevel) + m
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user