Skip to content

Commit

Permalink
Start supporting code (#74)
Browse files Browse the repository at this point in the history
* Start supporting code

* add some parsing to code

* typo

* add unittest

* fix fixture

* rebber-figure-code

* rebber-figure-code

* rebber-figure-code

* get value for code

* rebber+caption: fixes for code

* Add test

* Add test

* lock.json

* last test
  • Loading branch information
artragis committed Jun 20, 2017
1 parent 843b3a8 commit 7c57f95
Show file tree
Hide file tree
Showing 19 changed files with 308 additions and 5 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -8,3 +8,4 @@
/public/bundle*
npm-debug.log
lerna-debug.log
.idea
9 changes: 9 additions & 0 deletions packages/rebber/__tests__/fixtures/code.expected.tex
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
\begin{codeBlock}{python}
print('bla')
\end{codeBlock}

\begin{codeBlock}[][1,2]{python}
print('bla')
print('bla')
print('bla')
\end{codeBlock}
9 changes: 9 additions & 0 deletions packages/rebber/__tests__/fixtures/code.fixture.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
```python
print('bla')
```

```python hl_lines=1,2
print('bla')
print('bla')
print('bla')
```
9 changes: 9 additions & 0 deletions packages/rebber/__tests__/fixtures/figure-code.expected.tex
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
\begin{codeBlock}[With Source]{python}
print('bla')
\end{codeBlock}

\begin{codeBlock}[With Source][1,2]{python}
print('bla')
print('bla')
print('bla')
\end{codeBlock}
11 changes: 11 additions & 0 deletions packages/rebber/__tests__/fixtures/figure-code.fixture.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
```python
print('bla')
```
Code: With Source

```python hl_lines=1,2
print('bla')
print('bla')
print('bla')
```
Code: With Source
20 changes: 20 additions & 0 deletions packages/rebber/__tests__/fixtures/mix-2.expected.tex
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
(for convenience, are replaced with simple single spaces in the tests)

\chapter{first 1}
\begin{Quotation}{Quotation Source}
Code inside quote

\begin{codeBlock}[code source]{python}
print('bla')
\end{codeBlock}
\end{Quotation}

\begin{codeBlock}[First]{python}
print('bla')
\end{codeBlock}

Code: Second

\begin{codeBlock}{python}
print('code without caption')
\end{codeBlock}
19 changes: 19 additions & 0 deletions packages/rebber/__tests__/fixtures/mix-2.fixture.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
(for convenience, · are replaced with simple single spaces in the tests)
# first 1

> Code inside quote
> ```python
> print('bla')
> ```
> Code: code source
Source: Quotation Source

```python
print('bla')
```
Code: First
Code: Second

```python
print('code without caption')
```
25 changes: 25 additions & 0 deletions packages/rebber/__tests__/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -142,6 +142,31 @@ ava('figure+caption', t => {
t.deepEqual(contents.trim(), spec.expected.trim())
})

ava('code', t => {
const spec = specs['code']
const {contents} = unified()
.use(reParse)
.use(rebber)
.processSync(spec.fixture)

t.deepEqual(contents.trim(), spec.expected.trim())
})

ava('code+caption', t => {
const spec = specs['figure-code']

const {contents} = unified()
.use(reParse)
.use(require('remark-captions'))
.use(rebber, {
override: {
figure: require('../src/custom-types/figure'),
},
})
.processSync(spec.fixture)

t.deepEqual(contents.trim(), spec.expected.trim())
})

Object.keys(specs).filter(Boolean).filter(name => name.startsWith('mix-')).forEach(name => {
const spec = specs[name]
Expand Down
23 changes: 21 additions & 2 deletions packages/rebber/dist/custom-types/figure.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,24 @@ var defaultMacros = {
blockquote: function blockquote(innerText) {
var caption = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'Anonymous';
return '\\begin{Quotation}{' + caption + '}\n' + innerText + '\n\\end{Quotation}\n\n';
},
code: function code(_code, caption, extra) {
var params = '[' + caption + ']';
if (extra.lines) {
params += '[' + extra.lines + ']';
}
return '\\begin{codeBlock}' + params + '{' + extra.language + '}' + ('\n' + _code + '\n\\end{codeBlock}\n\n');
}
};

var makeExtra = {
blockquote: function blockquote(node) {},
code: function code(node) {
var extra = { language: node.lang.split(' ')[0] };
if (node.lang.indexOf(' ') > -1) {
extra.lines = node.lang.split(' ')[1].replace('hl_lines=', '').trim();
}
return extra;
}

/* Stringify a Figure `node`. */
Expand All @@ -34,6 +52,7 @@ var defaultMacros = {
if (node.children.length === 1) {
node.children = node.children[0].children;
}
var innerText = all(ctx, node);
return macro(innerText.trim(), caption);

var innerText = all(ctx, node) || node.value;
return macro(innerText.trim(), caption, makeExtra[type](node));
}
1 change: 1 addition & 0 deletions packages/rebber/dist/one.js
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ handlers.comment = require('./types/comment');

handlers.text = require('./types/text');
handlers.break = require('./types/break');
handlers.code = require('./types/code');
handlers.strong = require('./types/strong');
handlers.emphasis = require('./types/emphasis');
handlers.delete = require('./types/delete');
Expand Down
20 changes: 20 additions & 0 deletions packages/rebber/dist/types/code.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
'use strict';

/* Expose. */
module.exports = code;

var defaultMacro = function defaultMacro(content, lang) {
var param = '';
if (lang.indexOf('hl_lines=') > -1) {
var lines = lang.split('hl_lines=')[1].trim();
param += '[][' + lines + ']';
}
lang = lang.split(' ')[0];
return '\\begin{codeBlock}' + param + '{' + lang + '}\n' + content + '\n\\end{codeBlock}\n\n';
};

/* Stringify a Blockquote `node`. */
function code(ctx, node) {
var macro = ctx.code || defaultMacro;
return macro(node.value, node.lang);
}
26 changes: 23 additions & 3 deletions packages/rebber/src/custom-types/figure.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,26 @@ module.exports = figure

const defaultMacros = {
blockquote: (innerText, caption = 'Anonymous') =>
`\\begin{Quotation}{${caption}}\n${innerText}\n\\end{Quotation}\n\n`
`\\begin{Quotation}{${caption}}\n${innerText}\n\\end{Quotation}\n\n`,
code: (code, caption, extra) => {
let params = `[${caption}]`
if (extra.lines) {
params += `[${extra.lines}]`
}
return `\\begin{codeBlock}${params}{${extra.language}}` +
`\n${code}\n\\end{codeBlock}\n\n`
}
}

const makeExtra = {
blockquote: node => {},
code: node => {
const extra = { language: node.lang.split(' ')[0]}
if (node.lang.indexOf(' ') > -1) {
extra.lines = node.lang.split(' ')[1].replace('hl_lines=', '').trim()
}
return extra
}
}

/* Stringify a Figure `node`. */
Expand All @@ -29,6 +48,7 @@ function figure (ctx, node) {
if (node.children.length === 1) {
node.children = node.children[0].children
}
const innerText = all(ctx, node)
return macro(innerText.trim(), caption)

const innerText = all(ctx, node) || node.value
return macro(innerText.trim(), caption, makeExtra[type](node))
}
1 change: 1 addition & 0 deletions packages/rebber/src/one.js
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ handlers.comment = require('./types/comment')

handlers.text = require('./types/text')
handlers.break = require('./types/break')
handlers.code = require('./types/code')
handlers.strong = require('./types/strong')
handlers.emphasis = require('./types/emphasis')
handlers.delete = require('./types/delete')
Expand Down
18 changes: 18 additions & 0 deletions packages/rebber/src/types/code.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
/* Expose. */
module.exports = code

const defaultMacro = (content, lang) => {
let param = ''
if (lang.indexOf('hl_lines=') > -1) {
const lines = lang.split('hl_lines=')[1].trim()
param += `[][${lines}]`
}
lang = lang.split(' ')[0]
return `\\begin{codeBlock}${param}{${lang}}\n${content}\n\\end{codeBlock}\n\n`
}

/* Stringify a Blockquote `node`. */
function code (ctx, node) {
const macro = ctx.code || defaultMacro
return macro(node.value, node.lang)
}
10 changes: 10 additions & 0 deletions packages/remark-captions/__tests__/fixtures/code.expected.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<h2>Code</h2>
<p>Normal code</p>
<pre><code class="language-python">print('bla')
</code></pre>
<p>With Legend</p>
<figure><pre><code class="language-python">print('bla')
</code></pre><figcaption>figcapt1</figcaption></figure>
<figure><pre><code class="language-python">print('bla2')
</code></pre><figcaption>figcapt1</figcaption></figure>
<p>Code: bis</p>
21 changes: 21 additions & 0 deletions packages/remark-captions/__tests__/fixtures/code.fixture.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
## Code

Normal code

```python
print('bla')
```

With Legend

```python
print('bla')
```
Code: figcapt1


```python
print('bla2')
```
Code: figcapt1
Code: bis
44 changes: 44 additions & 0 deletions packages/remark-captions/dist/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,21 @@
var clone = require('clone');
var visit = require('unist-util-visit');

var legendBlock = {
table: 'Table:',
gridTable: 'Table:',
code: 'Code:'
};

function plugin() {
return transformer;
}

function transformer(tree) {
visit(tree, 'blockquote', visitor);
Object.keys(legendBlock).forEach(function (nodeType) {
return visit(tree, nodeType, externLegendVisitor);
});
}

function visitor(node, index, parent) {
Expand Down Expand Up @@ -50,6 +59,41 @@ function visitor(node, index, parent) {
node.data = figure.data;
}

function externLegendVisitor(node, index, parent) {
if (index + 1 < parent.children.length && parent.children[index + 1].type === 'paragraph') {
var legendNode = parent.children[index + 1];

if (legendNode.children[0].value.startsWith(legendBlock[node.type])) {
var legendText = legendNode.children[0].value.split('\n')[0].replace(legendBlock[node.type], '').trim();
var fullLegendLine = legendBlock[node.type] + ' ' + legendText;
legendNode.children[0].value = legendNode.children[0].value.replace(fullLegendLine, '').trim();
var figcaption = {
type: 'figcaption',
children: [{
type: 'text',
value: legendText
}],
data: {
hName: 'figcaption'
}
};
var figure = {
type: 'figure',
children: [clone(node), figcaption],
data: {
hName: 'figure'
}
};
node.type = figure.type;
node.children = figure.children;
node.data = figure.data;
if (!legendNode.children[0].value) {
parent.children.splice(index + 1, 1);
}
}
}
}

function getLast(xs) {
var len = xs.length;
if (!len) return;
Expand Down
Loading

0 comments on commit 7c57f95

Please sign in to comment.