case consistency part 7
This commit is contained in:
parent
bf205fa85d
commit
7e0da3e8f7
5 changed files with 63 additions and 65 deletions
|
|
@ -65,38 +65,38 @@ template rawInsertImpl() {.dirty.} =
|
||||||
data[h].key = key
|
data[h].key = key
|
||||||
data[h].slot = seFilled
|
data[h].slot = seFilled
|
||||||
|
|
||||||
proc RawGet[A](s: TSet[A], key: A): int =
|
proc rawGet[A](s: TSet[A], key: A): int =
|
||||||
rawGetImpl()
|
rawGetImpl()
|
||||||
|
|
||||||
proc contains*[A](s: TSet[A], key: A): bool =
|
proc contains*[A](s: TSet[A], key: A): bool =
|
||||||
## returns true iff `key` is in `s`.
|
## returns true iff `key` is in `s`.
|
||||||
var index = RawGet(s, key)
|
var index = rawGet(s, key)
|
||||||
result = index >= 0
|
result = index >= 0
|
||||||
|
|
||||||
proc RawInsert[A](s: var TSet[A], data: var TKeyValuePairSeq[A], key: A) =
|
proc rawInsert[A](s: var TSet[A], data: var TKeyValuePairSeq[A], key: A) =
|
||||||
rawInsertImpl()
|
rawInsertImpl()
|
||||||
|
|
||||||
proc Enlarge[A](s: var TSet[A]) =
|
proc enlarge[A](s: var TSet[A]) =
|
||||||
var n: TKeyValuePairSeq[A]
|
var n: TKeyValuePairSeq[A]
|
||||||
newSeq(n, len(s.data) * growthFactor)
|
newSeq(n, len(s.data) * growthFactor)
|
||||||
for i in countup(0, high(s.data)):
|
for i in countup(0, high(s.data)):
|
||||||
if s.data[i].slot == seFilled: RawInsert(s, n, s.data[i].key)
|
if s.data[i].slot == seFilled: rawInsert(s, n, s.data[i].key)
|
||||||
swap(s.data, n)
|
swap(s.data, n)
|
||||||
|
|
||||||
template inclImpl() {.dirty.} =
|
template inclImpl() {.dirty.} =
|
||||||
var index = RawGet(s, key)
|
var index = rawGet(s, key)
|
||||||
if index < 0:
|
if index < 0:
|
||||||
if mustRehash(len(s.data), s.counter): Enlarge(s)
|
if mustRehash(len(s.data), s.counter): enlarge(s)
|
||||||
RawInsert(s, s.data, key)
|
rawInsert(s, s.data, key)
|
||||||
inc(s.counter)
|
inc(s.counter)
|
||||||
|
|
||||||
template containsOrInclImpl() {.dirty.} =
|
template containsOrInclImpl() {.dirty.} =
|
||||||
var index = RawGet(s, key)
|
var index = rawGet(s, key)
|
||||||
if index >= 0:
|
if index >= 0:
|
||||||
result = true
|
result = true
|
||||||
else:
|
else:
|
||||||
if mustRehash(len(s.data), s.counter): Enlarge(s)
|
if mustRehash(len(s.data), s.counter): enlarge(s)
|
||||||
RawInsert(s, s.data, key)
|
rawInsert(s, s.data, key)
|
||||||
inc(s.counter)
|
inc(s.counter)
|
||||||
|
|
||||||
proc incl*[A](s: var TSet[A], key: A) =
|
proc incl*[A](s: var TSet[A], key: A) =
|
||||||
|
|
@ -105,7 +105,7 @@ proc incl*[A](s: var TSet[A], key: A) =
|
||||||
|
|
||||||
proc excl*[A](s: var TSet[A], key: A) =
|
proc excl*[A](s: var TSet[A], key: A) =
|
||||||
## excludes `key` from the set `s`.
|
## excludes `key` from the set `s`.
|
||||||
var index = RawGet(s, key)
|
var index = rawGet(s, key)
|
||||||
if index >= 0:
|
if index >= 0:
|
||||||
s.data[index].slot = seDeleted
|
s.data[index].slot = seDeleted
|
||||||
dec(s.counter)
|
dec(s.counter)
|
||||||
|
|
@ -122,7 +122,7 @@ proc initSet*[A](initialSize=64): TSet[A] =
|
||||||
result.counter = 0
|
result.counter = 0
|
||||||
newSeq(result.data, initialSize)
|
newSeq(result.data, initialSize)
|
||||||
|
|
||||||
proc toSet*[A](keys: openarray[A]): TSet[A] =
|
proc toSet*[A](keys: openArray[A]): TSet[A] =
|
||||||
## creates a new hash set that contains the given `keys`.
|
## creates a new hash set that contains the given `keys`.
|
||||||
result = initSet[A](nextPowerOfTwo(keys.len+10))
|
result = initSet[A](nextPowerOfTwo(keys.len+10))
|
||||||
for key in items(keys): result.incl(key)
|
for key in items(keys): result.incl(key)
|
||||||
|
|
@ -169,15 +169,15 @@ iterator items*[A](s: TOrderedSet[A]): A =
|
||||||
forAllOrderedPairs:
|
forAllOrderedPairs:
|
||||||
yield s.data[h].key
|
yield s.data[h].key
|
||||||
|
|
||||||
proc RawGet[A](s: TOrderedSet[A], key: A): int =
|
proc rawGet[A](s: TOrderedSet[A], key: A): int =
|
||||||
rawGetImpl()
|
rawGetImpl()
|
||||||
|
|
||||||
proc contains*[A](s: TOrderedSet[A], key: A): bool =
|
proc contains*[A](s: TOrderedSet[A], key: A): bool =
|
||||||
## returns true iff `key` is in `s`.
|
## returns true iff `key` is in `s`.
|
||||||
var index = RawGet(s, key)
|
var index = rawGet(s, key)
|
||||||
result = index >= 0
|
result = index >= 0
|
||||||
|
|
||||||
proc RawInsert[A](s: var TOrderedSet[A],
|
proc rawInsert[A](s: var TOrderedSet[A],
|
||||||
data: var TOrderedKeyValuePairSeq[A], key: A) =
|
data: var TOrderedKeyValuePairSeq[A], key: A) =
|
||||||
rawInsertImpl()
|
rawInsertImpl()
|
||||||
data[h].next = -1
|
data[h].next = -1
|
||||||
|
|
@ -185,7 +185,7 @@ proc RawInsert[A](s: var TOrderedSet[A],
|
||||||
if s.last >= 0: data[s.last].next = h
|
if s.last >= 0: data[s.last].next = h
|
||||||
s.last = h
|
s.last = h
|
||||||
|
|
||||||
proc Enlarge[A](s: var TOrderedSet[A]) =
|
proc enlarge[A](s: var TOrderedSet[A]) =
|
||||||
var n: TOrderedKeyValuePairSeq[A]
|
var n: TOrderedKeyValuePairSeq[A]
|
||||||
newSeq(n, len(s.data) * growthFactor)
|
newSeq(n, len(s.data) * growthFactor)
|
||||||
var h = s.first
|
var h = s.first
|
||||||
|
|
@ -194,7 +194,7 @@ proc Enlarge[A](s: var TOrderedSet[A]) =
|
||||||
while h >= 0:
|
while h >= 0:
|
||||||
var nxt = s.data[h].next
|
var nxt = s.data[h].next
|
||||||
if s.data[h].slot == seFilled:
|
if s.data[h].slot == seFilled:
|
||||||
RawInsert(s, n, s.data[h].key)
|
rawInsert(s, n, s.data[h].key)
|
||||||
h = nxt
|
h = nxt
|
||||||
swap(s.data, n)
|
swap(s.data, n)
|
||||||
|
|
||||||
|
|
@ -216,7 +216,7 @@ proc initOrderedSet*[A](initialSize=64): TOrderedSet[A] =
|
||||||
result.last = -1
|
result.last = -1
|
||||||
newSeq(result.data, initialSize)
|
newSeq(result.data, initialSize)
|
||||||
|
|
||||||
proc toOrderedSet*[A](keys: openarray[A]): TOrderedSet[A] =
|
proc toOrderedSet*[A](keys: openArray[A]): TOrderedSet[A] =
|
||||||
## creates a new ordered hash set that contains the given `keys`.
|
## creates a new ordered hash set that contains the given `keys`.
|
||||||
result = initOrderedSet[A](nextPowerOfTwo(keys.len+10))
|
result = initOrderedSet[A](nextPowerOfTwo(keys.len+10))
|
||||||
for key in items(keys): result.incl(key)
|
for key in items(keys): result.incl(key)
|
||||||
|
|
@ -224,5 +224,3 @@ proc toOrderedSet*[A](keys: openarray[A]): TOrderedSet[A] =
|
||||||
proc `$`*[A](s: TOrderedSet[A]): string =
|
proc `$`*[A](s: TOrderedSet[A]): string =
|
||||||
## The `$` operator for ordered hash sets.
|
## The `$` operator for ordered hash sets.
|
||||||
dollarImpl()
|
dollarImpl()
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -88,7 +88,7 @@ proc xmlCheckedTag*(e: PNimrodNode, tag: string,
|
||||||
result.add(newStrLitNode("</"))
|
result.add(newStrLitNode("</"))
|
||||||
result.add(newStrLitNode(tag))
|
result.add(newStrLitNode(tag))
|
||||||
result.add(newStrLitNode(">"))
|
result.add(newStrLitNode(">"))
|
||||||
result = NestList(!"&", result)
|
result = nestList(!"&", result)
|
||||||
|
|
||||||
|
|
||||||
macro a*(e: expr): expr {.immediate.} =
|
macro a*(e: expr): expr {.immediate.} =
|
||||||
|
|
|
||||||
|
|
@ -16,9 +16,9 @@ type
|
||||||
MD5Digest* = array[0..15, int8]
|
MD5Digest* = array[0..15, int8]
|
||||||
MD5Buffer = array[0..63, int8]
|
MD5Buffer = array[0..63, int8]
|
||||||
MD5Context* {.final.} = object
|
MD5Context* {.final.} = object
|
||||||
State: MD5State
|
state: MD5State
|
||||||
Count: array[0..1, int32]
|
count: array[0..1, int32]
|
||||||
Buffer: MD5Buffer
|
buffer: MD5Buffer
|
||||||
|
|
||||||
const
|
const
|
||||||
padding: cstring = "\x80\0\0\0" &
|
padding: cstring = "\x80\0\0\0" &
|
||||||
|
|
@ -32,16 +32,16 @@ const
|
||||||
"\0\0\0\0"
|
"\0\0\0\0"
|
||||||
|
|
||||||
proc F(x, y, z: int32): int32 {.inline.} =
|
proc F(x, y, z: int32): int32 {.inline.} =
|
||||||
Result = (x and y) or ((not x) and z)
|
result = (x and y) or ((not x) and z)
|
||||||
|
|
||||||
proc G(x, y, z: int32): int32 {.inline.} =
|
proc G(x, y, z: int32): int32 {.inline.} =
|
||||||
Result = (x and z) or (y and (not z))
|
result = (x and z) or (y and (not z))
|
||||||
|
|
||||||
proc H(x, y, z: int32): int32 {.inline.} =
|
proc H(x, y, z: int32): int32 {.inline.} =
|
||||||
Result = x xor y xor z
|
result = x xor y xor z
|
||||||
|
|
||||||
proc I(x, y, z: int32): int32 {.inline.} =
|
proc I(x, y, z: int32): int32 {.inline.} =
|
||||||
Result = y xor (x or (not z))
|
result = y xor (x or (not z))
|
||||||
|
|
||||||
proc rot(x: var int32, n: int8) {.inline.} =
|
proc rot(x: var int32, n: int8) {.inline.} =
|
||||||
x = toU32(x shl ze(n)) or (x shr toU32(32 -% ze(n)))
|
x = toU32(x shl ze(n)) or (x shr toU32(32 -% ze(n)))
|
||||||
|
|
@ -75,7 +75,7 @@ proc encode(dest: var MD5Block, src: cstring) =
|
||||||
ord(src[j+3]) shl 24)
|
ord(src[j+3]) shl 24)
|
||||||
inc(j, 4)
|
inc(j, 4)
|
||||||
|
|
||||||
proc decode(dest: var openarray[int8], src: openarray[int32]) =
|
proc decode(dest: var openArray[int8], src: openArray[int32]) =
|
||||||
var i = 0
|
var i = 0
|
||||||
for j in 0..high(src):
|
for j in 0..high(src):
|
||||||
dest[i] = toU8(src[j] and 0xff'i32)
|
dest[i] = toU8(src[j] and 0xff'i32)
|
||||||
|
|
@ -87,7 +87,7 @@ proc decode(dest: var openarray[int8], src: openarray[int32]) =
|
||||||
proc transform(Buffer: pointer, State: var MD5State) =
|
proc transform(Buffer: pointer, State: var MD5State) =
|
||||||
var
|
var
|
||||||
myBlock: MD5Block
|
myBlock: MD5Block
|
||||||
encode(myBlock, cast[cstring](buffer))
|
encode(myBlock, cast[cstring](Buffer))
|
||||||
var a = State[0]
|
var a = State[0]
|
||||||
var b = State[1]
|
var b = State[1]
|
||||||
var c = State[2]
|
var c = State[2]
|
||||||
|
|
@ -161,7 +161,7 @@ proc transform(Buffer: pointer, State: var MD5State) =
|
||||||
State[2] = State[2] +% c
|
State[2] = State[2] +% c
|
||||||
State[3] = State[3] +% d
|
State[3] = State[3] +% d
|
||||||
|
|
||||||
proc MD5Init*(c: var MD5Context) =
|
proc md5Init*(c: var MD5Context) =
|
||||||
## initializes a MD5Context
|
## initializes a MD5Context
|
||||||
c.State[0] = 0x67452301'i32
|
c.State[0] = 0x67452301'i32
|
||||||
c.State[1] = 0xEFCDAB89'i32
|
c.State[1] = 0xEFCDAB89'i32
|
||||||
|
|
@ -169,64 +169,64 @@ proc MD5Init*(c: var MD5Context) =
|
||||||
c.State[3] = 0x10325476'i32
|
c.State[3] = 0x10325476'i32
|
||||||
c.Count[0] = 0'i32
|
c.Count[0] = 0'i32
|
||||||
c.Count[1] = 0'i32
|
c.Count[1] = 0'i32
|
||||||
ZeroMem(addr(c.Buffer), SizeOf(MD5Buffer))
|
zeroMem(addr(c.Buffer), sizeof(MD5Buffer))
|
||||||
|
|
||||||
proc MD5Update*(c: var MD5Context, input: cstring, len: int) =
|
proc md5Update*(c: var MD5Context, input: cstring, len: int) =
|
||||||
## updates the MD5Context with the `input` data of length `len`
|
## updates the MD5Context with the `input` data of length `len`
|
||||||
var input = input
|
var input = input
|
||||||
var Index = (c.Count[0] shr 3) and 0x3F
|
var Index = (c.count[0] shr 3) and 0x3F
|
||||||
c.Count[0] = c.count[0] +% toU32(len shl 3)
|
c.Count[0] = c.count[0] +% toU32(len shl 3)
|
||||||
if c.Count[0] < (len shl 3): c.Count[1] = c.count[1] +% 1'i32
|
if c.Count[0] < (len shl 3): c.Count[1] = c.count[1] +% 1'i32
|
||||||
c.Count[1] = c.count[1] +% toU32(len shr 29)
|
c.Count[1] = c.count[1] +% toU32(len shr 29)
|
||||||
var PartLen = 64 - Index
|
var PartLen = 64 - Index
|
||||||
if len >= PartLen:
|
if len >= PartLen:
|
||||||
CopyMem(addr(c.Buffer[Index]), Input, PartLen)
|
copyMem(addr(c.Buffer[Index]), input, PartLen)
|
||||||
transform(addr(c.Buffer), c.State)
|
transform(addr(c.Buffer), c.State)
|
||||||
var i = PartLen
|
var i = PartLen
|
||||||
while i + 63 < len:
|
while i + 63 < len:
|
||||||
Transform(addr(Input[I]), c.State)
|
transform(addr(input[i]), c.State)
|
||||||
inc(i, 64)
|
inc(i, 64)
|
||||||
CopyMem(addr(c.Buffer[0]), addr(Input[i]), len-i)
|
copyMem(addr(c.Buffer[0]), addr(input[i]), len-i)
|
||||||
else:
|
else:
|
||||||
CopyMem(addr(c.Buffer[Index]), addr(Input[0]), len)
|
copyMem(addr(c.Buffer[Index]), addr(input[0]), len)
|
||||||
|
|
||||||
proc MD5Final*(c: var MD5Context, digest: var MD5Digest) =
|
proc md5Final*(c: var MD5Context, digest: var MD5Digest) =
|
||||||
## finishes the MD5Context and stores the result in `digest`
|
## finishes the MD5Context and stores the result in `digest`
|
||||||
var
|
var
|
||||||
Bits: MD5CBits
|
Bits: MD5CBits
|
||||||
PadLen: int
|
PadLen: int
|
||||||
decode(bits, c.Count)
|
decode(Bits, c.Count)
|
||||||
var Index = (c.Count[0] shr 3) and 0x3F
|
var Index = (c.Count[0] shr 3) and 0x3F
|
||||||
if Index < 56: PadLen = 56 - Index
|
if Index < 56: PadLen = 56 - Index
|
||||||
else: PadLen = 120 - Index
|
else: PadLen = 120 - Index
|
||||||
MD5Update(c, padding, PadLen)
|
md5Update(c, padding, PadLen)
|
||||||
MD5Update(c, cast[cstring](addr(Bits)), 8)
|
md5Update(c, cast[cstring](addr(Bits)), 8)
|
||||||
decode(digest, c.State)
|
decode(digest, c.State)
|
||||||
ZeroMem(addr(c), SizeOf(MD5Context))
|
zeroMem(addr(c), sizeof(MD5Context))
|
||||||
|
|
||||||
proc toMD5*(s: string): MD5Digest =
|
proc toMD5*(s: string): MD5Digest =
|
||||||
## computes the MD5Digest value for a string `s`
|
## computes the MD5Digest value for a string `s`
|
||||||
var c: MD5Context
|
var c: MD5Context
|
||||||
MD5Init(c)
|
md5Init(c)
|
||||||
MD5Update(c, cstring(s), len(s))
|
md5Update(c, cstring(s), len(s))
|
||||||
MD5Final(c, result)
|
md5Final(c, result)
|
||||||
|
|
||||||
proc `$`*(D: MD5Digest): string =
|
proc `$`*(D: MD5Digest): string =
|
||||||
## converts a MD5Digest value into its string representation
|
## converts a MD5Digest value into its string representation
|
||||||
const digits = "0123456789abcdef"
|
const digits = "0123456789abcdef"
|
||||||
result = ""
|
result = ""
|
||||||
for i in 0..15:
|
for i in 0..15:
|
||||||
add(result, Digits[(D[I] shr 4) and 0xF])
|
add(result, Digits[(D[i] shr 4) and 0xF])
|
||||||
add(result, Digits[D[I] and 0xF])
|
add(result, Digits[D[i] and 0xF])
|
||||||
|
|
||||||
proc getMD5*(s: string): string =
|
proc getMD5*(s: string): string =
|
||||||
## computes an MD5 value of `s` and returns its string representation
|
## computes an MD5 value of `s` and returns its string representation
|
||||||
var
|
var
|
||||||
c: MD5Context
|
c: MD5Context
|
||||||
d: MD5Digest
|
d: MD5Digest
|
||||||
MD5Init(c)
|
md5Init(c)
|
||||||
MD5Update(c, cstring(s), len(s))
|
md5Update(c, cstring(s), len(s))
|
||||||
MD5Final(c, d)
|
md5Final(c, d)
|
||||||
result = $d
|
result = $d
|
||||||
|
|
||||||
proc `==`*(D1, D2: MD5Digest): bool =
|
proc `==`*(D1, D2: MD5Digest): bool =
|
||||||
|
|
|
||||||
|
|
@ -34,7 +34,7 @@ proc main(dir, outfile: string) =
|
||||||
else:
|
else:
|
||||||
quit("Cannot open for writing: " & outfile)
|
quit("Cannot open for writing: " & outfile)
|
||||||
|
|
||||||
if ParamCount() != 2:
|
if paramCount() != 2:
|
||||||
quit "Usage: cmerge directory outfile"
|
quit "Usage: cmerge directory outfile"
|
||||||
else:
|
else:
|
||||||
main(ParamStr(1), addFileExt(ParamStr(2), "c"))
|
main(paramStr(1), addFileExt(paramStr(2), "c"))
|
||||||
|
|
|
||||||
|
|
@ -200,32 +200,32 @@ proc parseIniFile(c: var TConfigData) =
|
||||||
|
|
||||||
# ------------------- main ----------------------------------------------------
|
# ------------------- main ----------------------------------------------------
|
||||||
|
|
||||||
proc Exec(cmd: string) =
|
proc exec(cmd: string) =
|
||||||
echo(cmd)
|
echo(cmd)
|
||||||
if os.execShellCmd(cmd) != 0: quit("external program failed")
|
if os.execShellCmd(cmd) != 0: quit("external program failed")
|
||||||
|
|
||||||
proc buildDoc(c: var TConfigData, destPath: string) =
|
proc buildDoc(c: var TConfigData, destPath: string) =
|
||||||
# call nim for the documentation:
|
# call nim for the documentation:
|
||||||
for d in items(c.doc):
|
for d in items(c.doc):
|
||||||
Exec("nimrod rst2html $# -o:$# --index:on $#" %
|
exec("nimrod rst2html $# -o:$# --index:on $#" %
|
||||||
[c.nimrodArgs, destPath / changeFileExt(splitFile(d).name, "html"), d])
|
[c.nimrodArgs, destPath / changeFileExt(splitFile(d).name, "html"), d])
|
||||||
for d in items(c.srcdoc):
|
for d in items(c.srcdoc):
|
||||||
Exec("nimrod doc $# -o:$# --index:on $#" %
|
exec("nimrod doc $# -o:$# --index:on $#" %
|
||||||
[c.nimrodArgs, destPath / changeFileExt(splitFile(d).name, "html"), d])
|
[c.nimrodArgs, destPath / changeFileExt(splitFile(d).name, "html"), d])
|
||||||
for d in items(c.srcdoc2):
|
for d in items(c.srcdoc2):
|
||||||
Exec("nimrod doc2 $# -o:$# --index:on $#" %
|
exec("nimrod doc2 $# -o:$# --index:on $#" %
|
||||||
[c.nimrodArgs, destPath / changeFileExt(splitFile(d).name, "html"), d])
|
[c.nimrodArgs, destPath / changeFileExt(splitFile(d).name, "html"), d])
|
||||||
Exec("nimrod buildIndex -o:$1/theindex.html $1" % [destPath])
|
exec("nimrod buildIndex -o:$1/theindex.html $1" % [destPath])
|
||||||
|
|
||||||
proc buildPdfDoc(c: var TConfigData, destPath: string) =
|
proc buildPdfDoc(c: var TConfigData, destPath: string) =
|
||||||
if os.execShellCmd("pdflatex -version") != 0:
|
if os.execShellCmd("pdflatex -version") != 0:
|
||||||
echo "pdflatex not found; no PDF documentation generated"
|
echo "pdflatex not found; no PDF documentation generated"
|
||||||
else:
|
else:
|
||||||
for d in items(c.pdf):
|
for d in items(c.pdf):
|
||||||
Exec("nimrod rst2tex $# $#" % [c.nimrodArgs, d])
|
exec("nimrod rst2tex $# $#" % [c.nimrodArgs, d])
|
||||||
# call LaTeX twice to get cross references right:
|
# call LaTeX twice to get cross references right:
|
||||||
Exec("pdflatex " & changeFileExt(d, "tex"))
|
exec("pdflatex " & changeFileExt(d, "tex"))
|
||||||
Exec("pdflatex " & changeFileExt(d, "tex"))
|
exec("pdflatex " & changeFileExt(d, "tex"))
|
||||||
# delete all the crappy temporary files:
|
# delete all the crappy temporary files:
|
||||||
var pdf = splitFile(d).name & ".pdf"
|
var pdf = splitFile(d).name & ".pdf"
|
||||||
moveFile(dest=destPath / pdf, source=pdf)
|
moveFile(dest=destPath / pdf, source=pdf)
|
||||||
|
|
@ -239,7 +239,7 @@ proc buildPdfDoc(c: var TConfigData, destPath: string) =
|
||||||
proc buildAddDoc(c: var TConfigData, destPath: string) =
|
proc buildAddDoc(c: var TConfigData, destPath: string) =
|
||||||
# build additional documentation (without the index):
|
# build additional documentation (without the index):
|
||||||
for d in items(c.webdoc):
|
for d in items(c.webdoc):
|
||||||
Exec("nimrod doc $# -o:$# $#" %
|
exec("nimrod doc $# -o:$# $#" %
|
||||||
[c.nimrodArgs, destPath / changeFileExt(splitFile(d).name, "html"), d])
|
[c.nimrodArgs, destPath / changeFileExt(splitFile(d).name, "html"), d])
|
||||||
|
|
||||||
proc parseNewsTitles(inputFilename: string): seq[TRssItem] =
|
proc parseNewsTitles(inputFilename: string): seq[TRssItem] =
|
||||||
|
|
@ -253,7 +253,7 @@ proc parseNewsTitles(inputFilename: string): seq[TRssItem] =
|
||||||
if not open(input, inputFilename):
|
if not open(input, inputFilename):
|
||||||
quit("Could not read $1 for rss generation" % [inputFilename])
|
quit("Could not read $1 for rss generation" % [inputFilename])
|
||||||
finally: input.close()
|
finally: input.close()
|
||||||
while input.readline(line):
|
while input.readLine(line):
|
||||||
if line =~ reYearMonthDayTitle:
|
if line =~ reYearMonthDayTitle:
|
||||||
result.add(TRssItem(year: matches[0], month: matches[1], day: matches[2],
|
result.add(TRssItem(year: matches[0], month: matches[1], day: matches[2],
|
||||||
title: matches[3]))
|
title: matches[3]))
|
||||||
|
|
@ -332,7 +332,7 @@ proc main(c: var TConfigData) =
|
||||||
for i in 0..c.tabs.len-1:
|
for i in 0..c.tabs.len-1:
|
||||||
var file = c.tabs[i].val
|
var file = c.tabs[i].val
|
||||||
let rss = if file in ["news", "index"]: extractFilename(rssUrl) else: ""
|
let rss = if file in ["news", "index"]: extractFilename(rssUrl) else: ""
|
||||||
Exec(cmd % [c.nimrodArgs, file])
|
exec(cmd % [c.nimrodArgs, file])
|
||||||
var temp = "web" / changeFileExt(file, "temp")
|
var temp = "web" / changeFileExt(file, "temp")
|
||||||
var content: string
|
var content: string
|
||||||
try:
|
try:
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue