1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
|
title: $:/plugins/local/org-gtd/parser.js
type: application/javascript
module-type: parser
/*\
title: $:/plugins/local/org-gtd/parser.js
type: application/javascript
module-type: parser
\*/
(function() {
"use strict";
var org = require("$:/plugins/local/org-gtd/library.js");
function attr(value) {
return {type: "string",value: String(value)};
}
function text(value) {
return {type: "text",text: String(value)};
}
function element(tag,className,children,attributes) {
var attrs = attributes || {};
if(className) {
attrs["class"] = attr(className);
}
return {
type: "element",
tag: tag,
attributes: attrs,
children: children || [],
isBlock: tag !== "span"
};
}
function headingNode(heading) {
var children = [],
level = Math.min(heading.level,6),
classes = "tc-org-heading tc-org-level-" + heading.level;
if(heading.state) {
classes += " tc-org-heading-" + heading.state.toLowerCase();
children.push(element("span","tc-org-state tc-org-state-" + heading.state.toLowerCase(),[text(heading.state)]));
children.push(text(" "));
}
children.push(text(heading.title));
if(heading.tags.length) {
children.push(text(" "));
children.push(element("span","tc-org-tags",[text(":" + heading.tags.join(":") + ":")]));
}
return element("h" + level,classes,children,{"data-org-line": attr(heading.sourceLine)});
}
function OrgParser(type,source,options) {
var parsed = org.parse(source || ""),
headingsByLine = Object.create(null),
tree = [];
parsed.headings.forEach(function(heading) {
headingsByLine[heading.line] = heading;
});
parsed.lines.forEach(function(line,index) {
var heading = headingsByLine[index];
if(heading) {
tree.push(headingNode(heading));
} else if(/^\s*(?:SCHEDULED|DEADLINE):/.test(line)) {
tree.push(element("div","tc-org-planning",[text(line.trim())]));
} else if(line.trim()) {
tree.push(element("div","tc-org-body-line",[text(line)]));
}
});
this.tree = options.parseAsInline ? [text(source || "")] : [element("div","tc-org-document",tree)];
}
exports["text/x-org"] = OrgParser;
})();
|