Skip to content

Commit fdafac8

Browse files
committed
Fix wrapping in headings, table cells
Closes GH-58.
1 parent 702aa59 commit fdafac8

20 files changed

+152
-27
lines changed

index.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ function toMdast(tree, options) {
1616
h.nodeById = byId
1717
h.baseFound = false
1818
h.frozenBaseUrl = null
19+
h.wrapText = true
1920

2021
h.handlers = xtend(handlers, settings.handlers || {})
2122
h.augment = augment

lib/handlers/break.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,5 @@
33
module.exports = br
44

55
function br(h, node) {
6-
return h(node, 'break')
6+
return h.wrapText ? h(node, 'break') : h(node, 'text', ' ')
77
}

lib/handlers/code.js

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ var is = require('hast-util-is-element')
66
var has = require('hast-util-has-property')
77
var toText = require('hast-util-to-text')
88
var trim = require('trim-trailing-lines')
9+
var wrapText = require('../util/wrap-text')
910

1011
var prefix = 'language-'
1112

@@ -43,5 +44,10 @@ function code(h, node) {
4344
}
4445
}
4546

46-
return h(node, 'code', {lang: lang || null, meta: null}, trim(toText(node)))
47+
return h(
48+
node,
49+
'code',
50+
{lang: lang || null, meta: null},
51+
trim(wrapText(h, toText(node)))
52+
)
4753
}

lib/handlers/comment.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
module.exports = comment
44

5+
var wrapText = require('../util/wrap-text')
6+
57
function comment(h, node) {
6-
return h(node, 'html', '<!--' + node.value + '-->')
8+
return h(node, 'html', '<!--' + wrapText(h, node.value) + '-->')
79
}

lib/handlers/heading.js

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,16 @@ module.exports = heading
55
var all = require('../all')
66

77
function heading(h, node) {
8-
var depth = Number(node.tagName.charAt(1))
8+
var rank = Number(node.tagName.charAt(1))
9+
var wrap = h.wrapText
10+
var result
911

1012
/* istanbul ignore next - `else` shouldn’t happen, of course… */
11-
depth = depth || 1
13+
rank = rank || 1
1214

13-
return h(node, 'heading', {depth: depth}, all(h, node))
15+
h.wrapText = false
16+
result = h(node, 'heading', {depth: rank}, all(h, node))
17+
h.wrapText = wrap
18+
19+
return result
1420
}

lib/handlers/iframe.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
module.exports = iframe
44

55
var resolve = require('../util/resolve')
6+
var wrapText = require('../util/wrap-text')
67

78
function iframe(h, node) {
89
var src = node.properties.src
@@ -17,7 +18,7 @@ function iframe(h, node) {
1718
type: 'link',
1819
title: null,
1920
url: resolve(h, src),
20-
children: [{type: 'text', value: title}]
21+
children: [{type: 'text', value: wrapText(h, title)}]
2122
}
2223
}
2324
}

lib/handlers/inline-code.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@
33
module.exports = inlineCode
44

55
var toText = require('hast-util-to-text')
6+
var wrapText = require('../util/wrap-text')
67

78
function inlineCode(h, node) {
8-
return h(node, 'inlineCode', toText(node))
9+
return h(node, 'inlineCode', wrapText(h, toText(node)))
910
}

lib/handlers/input.js

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ var repeat = require('repeat-string')
44
var is = require('hast-util-is-element')
55
var resolve = require('../util/resolve')
66
var findSelectedOptions = require('../util/find-selected-options')
7+
var wrapText = require('../util/wrap-text')
78

89
module.exports = input
910

@@ -43,7 +44,7 @@ function input(h, node) {
4344
list in byId &&
4445
is(byId[list], 'datalist')
4546
) {
46-
values = findSelectedOptions(byId[list], props)
47+
values = findSelectedOptions(h, byId[list], props)
4748
}
4849

4950
if (values.length === 0) {
@@ -59,8 +60,8 @@ function input(h, node) {
5960
if (type === 'image') {
6061
return h(node, 'image', {
6162
url: resolve(h, props.src),
62-
title: props.title || null,
63-
alt: values[0][0]
63+
title: (props.title && wrapText(h, props.title)) || null,
64+
alt: wrapText(h, values[0][0])
6465
})
6566
}
6667

@@ -74,7 +75,7 @@ function input(h, node) {
7475
results.push(value[1] ? value[1] + ' (' + value[0] + ')' : value[0])
7576
}
7677

77-
return h.augment(node, {type: 'text', value: results.join(', ')})
78+
return h(node, 'text', wrapText(h, results.join(', ')))
7879
}
7980

8081
while (++index < length) {
@@ -83,8 +84,8 @@ function input(h, node) {
8384
url = type === 'email' ? 'mailto:' + text : text
8485

8586
results.push(
86-
h(node, 'link', {title: null, url: url}, [
87-
{type: 'text', value: value[1] || text}
87+
h(node, 'link', {title: null, url: wrapText(h, url)}, [
88+
{type: 'text', value: wrapText(h, value[1] || text)}
8889
])
8990
)
9091

lib/handlers/select.js

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
'use strict'
22

33
var findSelectedOptions = require('../util/find-selected-options')
4+
var wrapText = require('../util/wrap-text')
45

56
module.exports = select
67

78
function select(h, node) {
8-
var values = findSelectedOptions(node)
9+
var values = findSelectedOptions(h, node)
910
var length = values.length
1011
var index = -1
1112
var results = []
@@ -17,9 +18,6 @@ function select(h, node) {
1718
}
1819

1920
if (results.length !== 0) {
20-
return h.augment(node, {
21-
type: 'text',
22-
value: results.join(', ')
23-
})
21+
return h(node, 'text', wrapText(h, results.join(', ')))
2422
}
2523
}

lib/handlers/table-cell.js

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,12 @@ module.exports = cell
55
var all = require('../all')
66

77
function cell(h, node) {
8-
return h(node, 'tableCell', all(h, node))
8+
var wrap = h.wrapText
9+
var result
10+
11+
h.wrapText = false
12+
result = h(node, 'tableCell', all(h, node))
13+
h.wrapText = wrap
14+
15+
return result
916
}

0 commit comments

Comments
 (0)