Fixed errors
This commit is contained in:
parent
2dc20111e0
commit
d6b686d325
58
mailcap.go
58
mailcap.go
|
@ -15,17 +15,17 @@ type Mailcap struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewMailcap() *Mailcap {
|
func NewMailcap() *Mailcap {
|
||||||
mc := Mailcap{Caps{}}
|
mc := Mailcap{}
|
||||||
mc.getCaps()
|
mc.getCaps()
|
||||||
return &mc
|
return &mc
|
||||||
}
|
}
|
||||||
|
|
||||||
(m *Mailcap) func ShowAll() {
|
func (m *Mailcap) ShowAll() {
|
||||||
fmt.Print(m.Caps)
|
fmt.Print(m.Caps)
|
||||||
}
|
}
|
||||||
|
|
||||||
(m *Mailcap) func Show(mime string) {
|
func (m *Mailcap) Show(mime string) {
|
||||||
if v, ok := m.Caps["mime"] {
|
if v, ok := m.Caps[mime]; ok {
|
||||||
fmt.Println(mime + ":")
|
fmt.Println(mime + ":")
|
||||||
fmt.Print(v)
|
fmt.Print(v)
|
||||||
} else {
|
} else {
|
||||||
|
@ -33,22 +33,25 @@ func NewMailcap() *Mailcap {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
(m *Mailcap) func getCaps() {
|
func (m *Mailcap) getCaps() {
|
||||||
lnNum := 0
|
lnNum := 0
|
||||||
for mailcapFile := range getMailcapFileList() {
|
var moreCaps Cap
|
||||||
|
for _, mailcapFile := range getMailcapFileList() {
|
||||||
file, err := os.Open(mailcapFile)
|
file, err := os.Open(mailcapFile)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
moreCaps, lnNum, err := readMailcapFile(file, lnNum)
|
moreCaps, lnNum = readMailcapFile(file, lnNum)
|
||||||
for k, v := range moreCaps {
|
for k, v := range moreCaps {
|
||||||
if v, ok := m.Caps[key]; ok {
|
if _, ok := m.Caps[k]; ok {
|
||||||
m.Caps[key] = m.Caps[key] + value
|
for _, item := range v {
|
||||||
|
m.Caps[k] = append(m.Caps[k], item)
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
m.Caps[key] = value
|
m.Caps[k] = v
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
file.close()
|
file.Close()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -57,19 +60,20 @@ func NewMailcap() *Mailcap {
|
||||||
// found on the system.
|
// found on the system.
|
||||||
func getMailcapFileList() (mCapSlice []string) {
|
func getMailcapFileList() (mCapSlice []string) {
|
||||||
var home string = "."
|
var home string = "."
|
||||||
if val, ok := os.LookupEnv('MAILCAPS'); ok {
|
if val, ok := os.LookupEnv("MAILCAPS"); ok {
|
||||||
mCapSlice = strings.Split(val, string(os.PathListSeparator))
|
mCapSlice = strings.Split(val, string(os.PathListSeparator))
|
||||||
} else {
|
} else {
|
||||||
if val, ok := os.LookupEnv('HOME'); ok {
|
if val, ok := os.LookupEnv("HOME"); ok {
|
||||||
home = val
|
home = val
|
||||||
}
|
}
|
||||||
mCapSlice = []string{
|
mCapSlice = []string{
|
||||||
home + "/.mailcap",
|
home + "/.mailcap",
|
||||||
"/etc/mailcap",
|
"/etc/mailcap",
|
||||||
"/usr/etc/mailcap",
|
"/usr/etc/mailcap",
|
||||||
"/usr/local/etc/mailcap"
|
"/usr/local/etc/mailcap",
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func readMailcapFile(f *os.File,ln int) (Cap, int) {
|
func readMailcapFile(f *os.File,ln int) (Cap, int) {
|
||||||
|
@ -84,6 +88,7 @@ func readMailcapFile(f *os.File,ln int) (Cap, int) {
|
||||||
// Handle continuations for long lines
|
// Handle continuations for long lines
|
||||||
nxtLn := l
|
nxtLn := l
|
||||||
for ;nxtLn[len(nxtLn)-3:] == "\\\n"; {
|
for ;nxtLn[len(nxtLn)-3:] == "\\\n"; {
|
||||||
|
var er error
|
||||||
nxtLn, er = reader.ReadString('\n')
|
nxtLn, er = reader.ReadString('\n')
|
||||||
if er != nil || strings.TrimSpace(nxtLn) == "" {
|
if er != nil || strings.TrimSpace(nxtLn) == "" {
|
||||||
nxtLn = "\n"
|
nxtLn = "\n"
|
||||||
|
@ -97,33 +102,36 @@ func readMailcapFile(f *os.File,ln int) (Cap, int) {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
if ln >= 0 {
|
if ln >= 0 {
|
||||||
fields["lineno"] = ln
|
fields["lineno"] = string(ln)
|
||||||
ln += 1
|
ln += 1
|
||||||
}
|
}
|
||||||
types := strings.Split(key, "/")
|
types := strings.Split(key, "/")
|
||||||
for t := range types {
|
for i, t := range types {
|
||||||
t = strings.TrimSpace(t)
|
types[i] = strings.TrimSpace(t)
|
||||||
}
|
}
|
||||||
key = strings.Join(types, "/")
|
key = strings.Join(types, "/")
|
||||||
key = strings.ToLower(key)
|
key = strings.ToLower(key)
|
||||||
if _, ok := caps[key] {
|
if _, ok := caps[key]; ok {
|
||||||
append(caps[key], fields)
|
caps[key] = append(caps[key], fields)
|
||||||
} else {
|
} else {
|
||||||
caps[key] = fields
|
var outputfield Fields
|
||||||
|
caps[key] = outputfield
|
||||||
|
caps[key] = append(caps[key], fields)
|
||||||
}
|
}
|
||||||
return caps, ln
|
return caps, ln
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func parseLine(ln) (string, Entry, error) {
|
func parseLine(ln string) (string, Entry, error) {
|
||||||
outputFields := Entry{}
|
outputFields := Entry{}
|
||||||
i := 0
|
i := 0
|
||||||
n := len(ln)
|
n := len(ln)
|
||||||
fields := make([]string, 0, 10)
|
fields := make([]string, 0, 10)
|
||||||
|
var field string
|
||||||
for ;i < n; {
|
for ;i < n; {
|
||||||
field, i = parseField(ln, i, n)
|
field, i = parseField(ln, i, n)
|
||||||
append(fields, field)
|
fields = append(fields, field)
|
||||||
i += 1
|
i += 1
|
||||||
}
|
}
|
||||||
if len(fields) < 2 {
|
if len(fields) < 2 {
|
||||||
|
@ -135,9 +143,9 @@ func parseLine(ln) (string, Entry, error) {
|
||||||
if len(fields) > 2 {
|
if len(fields) > 2 {
|
||||||
rest = fields[2:]
|
rest = fields[2:]
|
||||||
}
|
}
|
||||||
for f := range rest {
|
for _, f := range rest {
|
||||||
var fkey, fvalue string
|
var fkey, fvalue string
|
||||||
i = string.Index(f, r"=")
|
i = strings.Index(f, "=")
|
||||||
if i < 0 {
|
if i < 0 {
|
||||||
fkey = f
|
fkey = f
|
||||||
fvalue = ""
|
fvalue = ""
|
||||||
|
@ -166,6 +174,6 @@ func parseField(ln string, i, n int) (string, int) {
|
||||||
i += 1
|
i += 1
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return strings.TrimSpace(line[start:i]), i
|
return strings.TrimSpace(ln[start:i]), i
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue