From 335de0c49af97af9ac1ef329026c33ae5a25585a Mon Sep 17 00:00:00 2001 From: flaviut Date: Sat, 5 Apr 2014 12:51:23 -0400 Subject: [PATCH 1/4] Add renderRstToJson in docutils --- lib/packages/docutils/rstast.nim | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/lib/packages/docutils/rstast.nim b/lib/packages/docutils/rstast.nim index f5ef0f53d..0476e2b07 100644 --- a/lib/packages/docutils/rstast.nim +++ b/lib/packages/docutils/rstast.nim @@ -286,3 +286,28 @@ proc renderRstToRst*(n: PRstNode, result: var string) = var d: TRenderContext renderRstToRst(d, n, result) +proc renderRstToJson*(node: PRstNode): string = + ## Writes the given RST node as JSON that is in the form + ## :: code-block + ## { + ## "kind":string node.kind, + ## "text":optional string node.text, + ## "level":optional int node.level, + ## "sons":optional node array + ## } + result = "" + result.add("{\"kind\":\"" & $ node.kind & "\",") + if node.text != Nil: + # XXX Json spec requires control charecters be escaped as \uXXXX, + # strutils.escape writes them as \uXX + result.add("\"text\":" & node.text.escape & ",") + result.add("\"level\":" & $ node.level) + if node.sons == nil or len(node.sons) == 0: + result.add("}") + else: + result.add(",\"sons\":[") + for i, son in node.sons: + result.add(renderRstToJson(son)) + if i < len(node.sons) - 1: + result.add(",") + result.add("]}") From 99ebcaec3a6902dee05ec2ffac59e4d01db235f8 Mon Sep 17 00:00:00 2001 From: flaviut Date: Sat, 5 Apr 2014 23:53:19 -0400 Subject: [PATCH 2/4] Modify renderRstToJson to use the json library --- lib/packages/docutils/rstast.nim | 35 ++++++++++++++++---------------- 1 file changed, 17 insertions(+), 18 deletions(-) diff --git a/lib/packages/docutils/rstast.nim b/lib/packages/docutils/rstast.nim index 0476e2b07..8f946d973 100644 --- a/lib/packages/docutils/rstast.nim +++ b/lib/packages/docutils/rstast.nim @@ -9,7 +9,7 @@ ## This module implements an AST for the `reStructuredText`:idx: parser. -import strutils +import strutils, json type TRstNodeKind* = enum ## the possible node kinds of an PRstNode @@ -286,28 +286,27 @@ proc renderRstToRst*(n: PRstNode, result: var string) = var d: TRenderContext renderRstToRst(d, n, result) +proc renderRstToJsonNode(node: PRstNode): PJsonNode = + result = + %[ + (key: "kind", val: %($node.kind)), + (key: "level", val: %BiggestInt(node.level)) + ] + if node.text != nil: + result.add("text", %node.text) + if node.sons != nil and len(node.sons) > 0: + var accm = newSeq[PJsonNode](len(node.sons)) + for i, son in node.sons: + accm[i] = renderRstToJsonNode(son) + result.add("sons", %accm) + proc renderRstToJson*(node: PRstNode): string = ## Writes the given RST node as JSON that is in the form - ## :: code-block + ## :: ## { ## "kind":string node.kind, ## "text":optional string node.text, ## "level":optional int node.level, ## "sons":optional node array ## } - result = "" - result.add("{\"kind\":\"" & $ node.kind & "\",") - if node.text != Nil: - # XXX Json spec requires control charecters be escaped as \uXXXX, - # strutils.escape writes them as \uXX - result.add("\"text\":" & node.text.escape & ",") - result.add("\"level\":" & $ node.level) - if node.sons == nil or len(node.sons) == 0: - result.add("}") - else: - result.add(",\"sons\":[") - for i, son in node.sons: - result.add(renderRstToJson(son)) - if i < len(node.sons) - 1: - result.add(",") - result.add("]}") + renderRstToJsonNode(node).pretty From 152fcc8ec4fb88e97222fe6b3bfb9852ed487b37 Mon Sep 17 00:00:00 2001 From: Dominik Picheta Date: Sun, 6 Apr 2014 23:57:20 +0100 Subject: [PATCH 3/4] Change the expected path in tfailedassert. This will cause this test to fail on Linux. The behaviour on Windows is however correct, the filename returned by instantiationInfo is the projPath defined as being "relative to the project's root". --- tests/assert/tfailedassert.nim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/assert/tfailedassert.nim b/tests/assert/tfailedassert.nim index 263893767..4994e13c8 100644 --- a/tests/assert/tfailedassert.nim +++ b/tests/assert/tfailedassert.nim @@ -3,7 +3,7 @@ discard """ WARNING: false first asseertion from bar ERROR: false second assertion from bar -1 -tests/assert/tfailedassert.nim:27 false assertion from foo +tfailedassert.nim:27 false assertion from foo ''' """ From 369d8c57ae6242afc7b64d79a4df48a539312677 Mon Sep 17 00:00:00 2001 From: Dominik Picheta Date: Mon, 7 Apr 2014 20:46:47 +0100 Subject: [PATCH 4/4] Disable async macro code output. Added some WSA error codes to winlean. --- lib/pure/asyncdispatch.nim | 2 +- lib/windows/winlean.nim | 7 ++++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/lib/pure/asyncdispatch.nim b/lib/pure/asyncdispatch.nim index ef2bab875..880458ee5 100644 --- a/lib/pure/asyncdispatch.nim +++ b/lib/pure/asyncdispatch.nim @@ -922,7 +922,7 @@ macro async*(prc: stmt): stmt {.immediate.} = result[6] = outerProcBody - echo(toStrLit(result)) + #echo(toStrLit(result)) proc recvLine*(socket: TAsyncFD): PFuture[string] {.async.} = ## Reads a line of data from ``socket``. Returned future will complete once diff --git a/lib/windows/winlean.nim b/lib/windows/winlean.nim index 4d87cf4b2..69a3c5c81 100644 --- a/lib/windows/winlean.nim +++ b/lib/windows/winlean.nim @@ -657,7 +657,12 @@ type D4*: array [0..7, int8] const - ERROR_IO_PENDING* = 997 + ERROR_IO_PENDING* = 997 # a.k.a WSA_IO_PENDING + WSAECONNABORTED* = 10053 + WSAECONNRESET* = 10054 + WSAEDISCON* = 10101 + WSAENETRESET* = 10052 + WSAETIMEDOUT* = 10060 proc CreateIoCompletionPort*(FileHandle: THANDLE, ExistingCompletionPort: THANDLE, CompletionKey: DWORD,