Render items with react
This commit is contained in:
26
src/org/index.html
Normal file
26
src/org/index.html
Normal file
@@ -0,0 +1,26 @@
|
||||
<!doctype html>
|
||||
<html class="no-js" lang="">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="x-ua-compatible" content="ie=edge">
|
||||
<title>Untitled</title>
|
||||
<meta name="description" content="">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
|
||||
<link rel="apple-touch-icon" href="/apple-touch-icon.png">
|
||||
<!-- Place favicon.ico in the root directory -->
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<!--[if lt IE 8]>
|
||||
<p class="browserupgrade">
|
||||
You are using an <strong>outdated</strong> browser. Please
|
||||
<a href="http://browsehappy.com/">upgrade your browser</a> to improve
|
||||
your experience.
|
||||
</p>
|
||||
<![endif]-->
|
||||
|
||||
|
||||
<script type="text/javascript" src="./org_block_heading.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
5539
src/org/org_block_heading.js
Normal file
5539
src/org/org_block_heading.js
Normal file
File diff suppressed because one or more lines are too long
@@ -32,7 +32,7 @@ let parseTodoKeyword = todoKeywords.createTodoKeywordParser()
|
||||
let parseDoneKeyword = doneKeywords.createTodoKeywordParser()
|
||||
|
||||
let parseContentText = @[
|
||||
anyUntil(choice(@[endOfStream, str("\n*")])),
|
||||
anyUntilPerformant(choice(@[endOfStream, str("\n*")])),
|
||||
]
|
||||
|
||||
let parseHeadlineNewline = @[
|
||||
@@ -40,7 +40,7 @@ let parseHeadlineNewline = @[
|
||||
]
|
||||
|
||||
let parseHeadingText = @[
|
||||
anyUntil(newline),
|
||||
anyUntilPerformant(newline),
|
||||
]
|
||||
|
||||
# func buildStars(token: seq[ParserToken]): seq[ParserToken] =
|
||||
@@ -71,7 +71,7 @@ let buildHeadlineContent = func(tokens: seq[ParserToken], org: OrgBlock): OrgBlo
|
||||
let buildHeadlineChildren = func(tokens: seq[ParserToken], org: OrgBlock): OrgBlock {.closure.}=
|
||||
# let headlineString = tokens.tokensToString()
|
||||
|
||||
org.headlineChildrenText = tokens.tokensToString()
|
||||
# org.headlineChildrenText = tokens.tokensToString()
|
||||
org
|
||||
|
||||
let buildHeadlineNewline = func(tokens: seq[ParserToken], org: OrgBlock): OrgBlock {.closure.}=
|
||||
@@ -92,26 +92,20 @@ proc tryBuildHeading(builder: OrgBuilderResult): OrgBuilderResult =
|
||||
|
||||
(parseContentText, buildHeadlineChildren, true),
|
||||
|
||||
(parseHeadlineNewline, buildHeadlineContent, true),
|
||||
|
||||
(parseHeadlineNewline, buildHeadlineNewline, true),
|
||||
(parseHeadlineNewline, buildHeadlineNewline, false),
|
||||
]
|
||||
)
|
||||
|
||||
when isMainModule:
|
||||
|
||||
|
||||
var acc = initOrgBuilder("""* TODO Level 1
|
||||
** TODO Level 2
|
||||
""")
|
||||
proc makeOrg*(x: string): OrgBuilderResult =
|
||||
var acc = initOrgBuilder(x)
|
||||
|
||||
while acc.isOk() and acc.tryParser(endOfStream).isErr():
|
||||
let unsafeAcc = acc.unsafeGet()
|
||||
|
||||
let item = acc
|
||||
.tryBuildHeading()
|
||||
.fold(
|
||||
err => OrgBuilderResult.err((unsafeAcc, "Error")),
|
||||
.flatMap(
|
||||
(x: OrgBuilder) => OrgBuilderResult.ok(OrgBuilder((
|
||||
parser: x.parser,
|
||||
tree: unsafeAcc.tree & x.tree,
|
||||
@@ -120,35 +114,34 @@ when isMainModule:
|
||||
|
||||
acc = item
|
||||
|
||||
echo acc
|
||||
acc
|
||||
|
||||
# let sampleBuilder = StringBuilderResult
|
||||
# .ok(StringBuilder((
|
||||
# parser: initParser("""**** TODO Some stars
|
||||
# :PROPERTIES:
|
||||
# :PROP_NAME: Value
|
||||
# :PROP_NAME: Value
|
||||
# :PROP_NAME: Value
|
||||
# :PROP_NAME: Value
|
||||
# :PROPERTIES_END:
|
||||
proc foldOrg*(x: OrgBuilderResult): seq[string] =
|
||||
x
|
||||
.fold(
|
||||
(err) => @["Error"],
|
||||
(builder: OrgBuilder) => builder.tree.map((x: OrgBlock) => $x.headlineContent),
|
||||
)
|
||||
# echo acc.unsafeGet().tree[^1]
|
||||
|
||||
# Foo
|
||||
# """),
|
||||
# tree: newSeq[StringBuilderT](),
|
||||
# )))
|
||||
# .applyParsersSeq(@[
|
||||
# (parseHeadingStars, stringConcat("Stars: ")),
|
||||
when isMainModule:
|
||||
# import nimprof
|
||||
# import timeit
|
||||
|
||||
let test1 = """* TODO Level 1
|
||||
Some stuff inbetween
|
||||
|
||||
# (@[optional(parseTodoKeyword)], stringConcat("TODO: ")),
|
||||
# (@[optional(parseDoneKeyword)], stringConcat("DONE: ")),
|
||||
** DONE Level 2 """
|
||||
|
||||
# (parseHeadingText, stringConcat("Text: ")),
|
||||
# (parseProperties, stringConcat("Properties: ", seperator = ", ")),
|
||||
# # (@[optional(choice(parseProperties))], stringConcat("Properties: ")),
|
||||
# ])
|
||||
# .foldBuilder(
|
||||
# err => &"Error Parsing: {err}",
|
||||
# xs => "Parser Succesfull:\n" & xs.join("\n"),
|
||||
# )
|
||||
let test1_2 = """* TODO Failing
|
||||
|
||||
# echo sampleBuilder
|
||||
*
|
||||
** Level 2"""
|
||||
|
||||
# let test2 = readFile("/home/floscr/Documents/Org/Bookmarks/bookmarks.org")
|
||||
# let test2 = readFile("/tmp/gtd.org")
|
||||
|
||||
var acc = makeOrg(test1)
|
||||
|
||||
echo acc .foldOrg()
|
||||
# echo acc.unsafeGet().tree[^1]
|
||||
|
||||
Reference in New Issue
Block a user