package mmark
import (
"bytes"
"time"
"github.com/BurntSushi/toml"
)
const (
// Sentinal for not set.
piNotSet = "__mmark_toml_pi_not_set"
DefaultIpr = "trust200902"
DefaultArea = "Internet"
)
type author struct {
Initials string
Surname string
Fullname string
Organization string
OrganizationAbbrev string `toml:"abbrev"`
Role string
Ascii string
Address address
}
type address struct {
Phone string
Email string
Uri string
Postal addressPostal
}
type addressPostal struct {
Street string
City string
Code string
Country string
Region string
PostalLine []string
// Plurals when these need to be specified multiple times.
Streets []string
Cities []string
Codes []string
Countries []string
Regions []string
}
// PIs the processing instructions.
var PIs = []string{"toc", "symrefs", "sortrefs", "compact", "subcompact", "private", "topblock", "header", "footer", "comments"}
type pi struct {
Toc string
Symrefs string
Sortrefs string
Compact string
Subcompact string
Private string
Topblock string
Comments string // Typeset cref's in the text.
Header string // Top-Left header, usually Internet-Draft.
Footer string // Bottom-Center footer, usually Expires ...
}
type title struct {
Title string
Abbrev string
DocName string
Ipr string
Category string
Number int // RFC number
Obsoletes []int
Updates []int
PI pi // Processing Instructions
SubmissionType string
Date time.Time
Area string
Workgroup string
Keyword []string
Author []author
}
func (p *parser) titleBlockTOML(out *bytes.Buffer, data []byte) title {
data = bytes.TrimPrefix(data, []byte("%"))
data = bytes.Replace(data, []byte("\n%"), []byte("\n"), -1)
// Set some sentinels and defaults.
var block title
block.PI.Header = piNotSet
block.PI.Footer = piNotSet
block.Area = DefaultArea
block.Ipr = DefaultIpr
block.Date = time.Now()
if _, err := toml.Decode(string(data), &block); err != nil {
printf(p, "error in TOML titleblock: %s", err.Error())
return block // never an error when encoding markdown
}
return block
}