// Functions and definition to be backwards compatible with RFC7328 markdown. package mmark import "bytes" func (p *parser) rfc7328Index(out *bytes.Buffer, text []byte) int { if p.flags&EXTENSION_RFC7328 == 0 { return 0 } text = bytes.TrimSpace(text) // look for ^item1^ subitem if text[0] != '^' || len(text) < 3 { return 0 } itemEnd := 0 for i := 1; i < len(text); i++ { if text[i] == '^' { itemEnd = i break } } if itemEnd == 0 { return 0 } // Check the sub item, if there. // skip whitespace i := itemEnd + 1 for i < len(text) && isspace(text[i]) { i++ } // rewind outSize := out.Len() outBytes := out.Bytes() if outSize > 0 && outBytes[outSize-1] == '^' { out.Truncate(outSize - 1) } subItemStart := i if subItemStart != len(text) { printf(p, "rfc 7328 style index parsed to: ((%s, %s))", string(text[1:itemEnd]), text[subItemStart:]) p.r.Index(out, text[1:itemEnd], text[subItemStart:], false) return len(text) } printf(p, "rfc 7328 style index parsed to: ((%s))", string(text[1:itemEnd])) p.r.Index(out, text[1:itemEnd], nil, false) return len(text) } func (p *parser) rfc7328Caption(out *bytes.Buffer, text []byte) int { if p.flags&EXTENSION_RFC7328 == 0 { return 0 } // Parse stuff like: // ^[fig:minimal::A minimal template.xml.] // If we don't find double colon it is not a inline note masking as a caption text = bytes.TrimSpace(text) colons := bytes.Index(text, []byte("::")) if colons == -1 { return 0 } caption := []byte{} anchor := text[:colons] if colons+2 < len(text) { caption = text[colons+2:] } if len(anchor) == 0 && len(caption) == 0 { return 0 } // rewind outSize := out.Len() outBytes := out.Bytes() if outSize > 0 && outBytes[outSize-1] == '^' { out.Truncate(outSize - 1) } // It is somewhat hard to now go back to the original start of the figure // and marge this new content in (there already may be a #id, etc. etc.). // For now just log that we have seen this line and return a positive integer // indicating this wasn't a footnote. if len(anchor) > 0 { printf(p, "rfc 7328 style anchor seen: consider adding '{#%s}' IAL before the figure/table", string(anchor)) } if len(caption) > 0 { printf(p, "rfc 7328 style caption seen: consider adding 'Figure: %s' or 'Table: %s' after the figure/table", string(caption), string(caption)) } return len(text) }