diff --git a/org/table.go b/org/table.go
index 395588a..244f505 100644
--- a/org/table.go
+++ b/org/table.go
@@ -23,14 +23,15 @@ type Column struct {
}
type ColumnInfo struct {
- Align string
- Len int
+ Align string
+ Len int
+ DisplayLen int
}
var tableSeparatorRegexp = regexp.MustCompile(`^(\s*)(\|[+-|]*)\s*$`)
var tableRowRegexp = regexp.MustCompile(`^(\s*)(\|.*)`)
-var columnAlignRegexp = regexp.MustCompile(`^<(l|c|r)>$`)
+var columnAlignAndLengthRegexp = regexp.MustCompile(`^<(l|c|r)?(\d+)?>$`)
func lexTable(line string) (token, bool) {
if m := tableSeparatorRegexp.FindStringSubmatch(line); m != nil {
@@ -94,7 +95,7 @@ func getColumnInfos(rows [][]string) []ColumnInfo {
columnInfos[i].Len = n
}
- if m := columnAlignRegexp.FindStringSubmatch(columns[i]); m != nil && isSpecialRow(columns) {
+ if m := columnAlignAndLengthRegexp.FindStringSubmatch(columns[i]); m != nil && isSpecialRow(columns) {
switch m[1] {
case "l":
columnInfos[i].Align = "left"
@@ -103,6 +104,10 @@ func getColumnInfos(rows [][]string) []ColumnInfo {
case "r":
columnInfos[i].Align = "right"
}
+ if m[2] != "" {
+ l, _ := strconv.Atoi(m[2])
+ columnInfos[i].DisplayLen = l
+ }
} else if _, err := strconv.ParseFloat(columns[i], 32); err == nil {
countNumeric++
} else if strings.TrimSpace(columns[i]) != "" {
@@ -120,7 +125,7 @@ func getColumnInfos(rows [][]string) []ColumnInfo {
func isSpecialRow(rawColumns []string) bool {
isAlignRow := true
for _, rawColumn := range rawColumns {
- if !columnAlignRegexp.MatchString(rawColumn) && rawColumn != "" {
+ if !columnAlignAndLengthRegexp.MatchString(rawColumn) && rawColumn != "" {
isAlignRow = false
}
}
diff --git a/org/testdata/tables.html b/org/testdata/tables.html
index 4c42147..f31e84d 100644
--- a/org/testdata/tables.html
+++ b/org/testdata/tables.html
@@ -127,7 +127,7 @@ table without header
-table with aligned columns
+table with aligned and sized columns
diff --git a/org/testdata/tables.org b/org/testdata/tables.org
index a3c51b2..215c540 100644
--- a/org/testdata/tables.org
+++ b/org/testdata/tables.org
@@ -24,10 +24,11 @@
#+CAPTION: table without header
| 1 | 2 | 3 |
-#+CAPTION: table with aligned columns
+#+CAPTION: table with aligned and sized columns
| left aligned | right aligned | center aligned |
|--------------+---------------+----------------|
-| | | |
+| | | |
+| | <1> | |
| 42 | 42 | 42 |
| foobar | foobar | foobar |
diff --git a/org/testdata/tables.pretty_org b/org/testdata/tables.pretty_org
index a3c51b2..215c540 100644
--- a/org/testdata/tables.pretty_org
+++ b/org/testdata/tables.pretty_org
@@ -24,10 +24,11 @@
#+CAPTION: table without header
| 1 | 2 | 3 |
-#+CAPTION: table with aligned columns
+#+CAPTION: table with aligned and sized columns
| left aligned | right aligned | center aligned |
|--------------+---------------+----------------|
-| | | |
+| | | |
+| | <1> | |
| 42 | 42 | 42 |
| foobar | foobar | foobar |