Fix headline tags, table pretty printing and multiline links
- we can't just look at the len of the string (~ #bytes) - that breaks down for tables containing characters consisting of multiple bytes. This handles more (still not all) cases and is good enough for now - add _ to allowed tag chars - also require space between headline and tags - links (link itself, not the description) spanning multiple lines are not supported - otherwise we would have to take care of splitting link and adding indentation for org pretty printing - and that sounds like such an edge case that it seems cleaner to forbid them
This commit is contained in:
parent
fb837e04af
commit
ec895cbe83
7 changed files with 61 additions and 4 deletions
|
@ -17,7 +17,7 @@ type Headline struct {
|
|||
}
|
||||
|
||||
var headlineRegexp = regexp.MustCompile(`^([*]+)\s+(.*)`)
|
||||
var tagRegexp = regexp.MustCompile(`(.*?)\s*(:[A-Za-z0-9@#%:]+:\s*$)`)
|
||||
var tagRegexp = regexp.MustCompile(`(.*?)\s+(:[A-Za-z0-9_@#%:]+:\s*$)`)
|
||||
|
||||
func lexHeadline(line string) (token, bool) {
|
||||
if m := headlineRegexp.FindStringSubmatch(line); m != nil {
|
||||
|
|
|
@ -210,6 +210,9 @@ func (d *Document) parseRegularLink(input string, start int) (int, Node) {
|
|||
if len(rawLinkParts) == 2 {
|
||||
link, description = rawLinkParts[0], d.parseInline(rawLinkParts[1])
|
||||
}
|
||||
if strings.ContainsRune(link, '\n') {
|
||||
return 0, nil
|
||||
}
|
||||
consumed := end + 2
|
||||
protocol, linkParts := "", strings.SplitN(link, ":", 2)
|
||||
if len(linkParts) == 2 {
|
||||
|
|
|
@ -3,6 +3,7 @@ package org
|
|||
import (
|
||||
"fmt"
|
||||
"strings"
|
||||
"unicode/utf8"
|
||||
)
|
||||
|
||||
type stringBuilder = strings.Builder
|
||||
|
@ -268,7 +269,7 @@ func (w *OrgWriter) writeTable(t Table) {
|
|||
if content == "" {
|
||||
content = " "
|
||||
}
|
||||
n := column.Len - len(content)
|
||||
n := column.Len - utf8.RuneCountInString(content)
|
||||
if n < 0 {
|
||||
n = 0
|
||||
}
|
||||
|
|
|
@ -4,6 +4,7 @@ import (
|
|||
"regexp"
|
||||
"strconv"
|
||||
"strings"
|
||||
"unicode/utf8"
|
||||
)
|
||||
|
||||
type Table struct {
|
||||
|
@ -89,8 +90,8 @@ func getColumnInfos(rows [][]string) []ColumnInfo {
|
|||
continue
|
||||
}
|
||||
|
||||
if len(columns[i]) > columnInfos[i].Len {
|
||||
columnInfos[i].Len = len(columns[i])
|
||||
if n := utf8.RuneCountInString(columns[i]); n > columnInfos[i].Len {
|
||||
columnInfos[i].Len = n
|
||||
}
|
||||
|
||||
if m := columnAlignRegexp.FindStringSubmatch(columns[i]); m != nil && isSpecialRow(columns) {
|
||||
|
|
36
org/testdata/tables.html
vendored
36
org/testdata/tables.html
vendored
|
@ -42,6 +42,42 @@ table with separator after header
|
|||
</figure>
|
||||
<figure>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Character</th>
|
||||
<th>Org</th>
|
||||
<th>Rendered HTML</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Hyphen</td>
|
||||
<td><code class="verbatim">a - b</code></td>
|
||||
<td>a - b</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Ndash</td>
|
||||
<td><code class="verbatim">a -- b</code></td>
|
||||
<td>a – b</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Mdash</td>
|
||||
<td><code class="verbatim">a --- b</code></td>
|
||||
<td>a — b</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Ellipsis</td>
|
||||
<td><code class="verbatim">a ... b</code></td>
|
||||
<td>a … b</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<figcaption>
|
||||
table with unicode characters
|
||||
</figcaption>
|
||||
</figure>
|
||||
<figure>
|
||||
<table>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td class="align-right">1</td>
|
||||
|
|
8
org/testdata/tables.org
vendored
8
org/testdata/tables.org
vendored
|
@ -9,6 +9,14 @@
|
|||
|---+---+---|
|
||||
| 1 | 2 | 3 |
|
||||
|
||||
#+CAPTION: table with unicode characters
|
||||
| Character | Org | Rendered HTML |
|
||||
|-----------+-----------+---------------|
|
||||
| Hyphen | =a - b= | a - b |
|
||||
| Ndash | =a -- b= | a – b |
|
||||
| Mdash | =a --- b= | a — b |
|
||||
| Ellipsis | =a ... b= | a … b |
|
||||
|
||||
#+CAPTION: table without header (but separator before)
|
||||
|---+---+---|
|
||||
| 1 | 2 | 3 |
|
||||
|
|
8
org/testdata/tables.pretty_org
vendored
8
org/testdata/tables.pretty_org
vendored
|
@ -9,6 +9,14 @@
|
|||
|---+---+---|
|
||||
| 1 | 2 | 3 |
|
||||
|
||||
#+CAPTION: table with unicode characters
|
||||
| Character | Org | Rendered HTML |
|
||||
|-----------+-----------+---------------|
|
||||
| Hyphen | =a - b= | a - b |
|
||||
| Ndash | =a -- b= | a – b |
|
||||
| Mdash | =a --- b= | a — b |
|
||||
| Ellipsis | =a ... b= | a … b |
|
||||
|
||||
#+CAPTION: table without header (but separator before)
|
||||
|---+---+---|
|
||||
| 1 | 2 | 3 |
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue