diff --git a/i2p2www/lexers.py b/i2p2www/lexers.py
index fe1c23b1..95c0c457 100644
--- a/i2p2www/lexers.py
+++ b/i2p2www/lexers.py
@@ -11,8 +11,8 @@ class DataSpecLexer(RegexLexer):
(r'(\s*)(\+-)', bygroups(Text, Text), 'boundary'),
(r'(\s+)([\+|])', bygroups(Text, Text), 'content'),
(r'(\s*)(~)', bygroups(Text, Generic.Strong), 'content'),
- (r'(\s*)([\w=;]+)(\s)(::)(\s)', bygroups(Text, Name.Tag, Text, Operator, Text)),
- (r'(\s*)((?:[A-Z][a-z]+)+)', bygroups(Text, Name.Class)),
+ (r'(\s*)([\w=;]+)(\s[\w=;]+)*(\s)(::)(\s)', bygroups(Text, Name.Tag, Name.Tag, Text, Operator, Text)),
+ (r'(\s*)`((?:[A-Z][a-z]+)(?:[A-Z][a-z]*)*)`', bygroups(Text, Name.Class)),
(r'(\s*)([A-Z]{2,})', bygroups(Text, Name.Constant)),
(r'(\s*)([\[\]])', bygroups(Text, Punctuation)),
(r'(\s*)(\$\w+)', bygroups(Text, Name.Tag)),
@@ -34,8 +34,8 @@ class DataSpecLexer(RegexLexer):
(r'(\s*)(\.\.\.)(\s)', bygroups(Text, Generic.Strong, Text)),
(r'(\s*)(\.\.\.)$', bygroups(Text, Generic.Strong), '#pop'),
(r'(\s*)(~)$', bygroups(Text, Generic.Strong), '#pop'),
- (r'(\s*)([\w=;]+)$', bygroups(Text, Name.Tag), '#pop'),
- (r'(\s*)([\w=;]+)', bygroups(Text, Name.Tag)),
+ (r'(\s*)([\w=;]+)(\s[\w=;]+)*$', bygroups(Text, Name.Tag, Name.Tag), '#pop'),
+ (r'(\s*)([\w=;]+)(\s[\w=;]+)*', bygroups(Text, Name.Tag, Name.Tag)),
(r'(\s*)(\|)', bygroups(Text, Text)),
(r'(\s*)(\()', bygroups(Text, Punctuation), 'expression'),
],
diff --git a/i2p2www/pages/site/docs/spec/common-structures.html b/i2p2www/pages/site/docs/spec/common-structures.html
index b07258f1..22284299 100644
--- a/i2p2www/pages/site/docs/spec/common-structures.html
+++ b/i2p2www/pages/site/docs/spec/common-structures.html
@@ -184,7 +184,7 @@ A certificate is a container for various receipts or proof of works used through
|type| length | payload
+----+----+----+----+----+-//
-type :: Integer
+type :: `Integer`
length -> 1 byte
case 0 -> NULL
@@ -193,7 +193,7 @@ type :: Integer
case 3 -> SIGNED
case 4 -> MULTIPLE
-length :: Integer
+length :: `Integer`
length -> 2 bytes
payload :: data
@@ -238,16 +238,16 @@ A 2-byte size Integer followed by a series of String=String; pairs
+----+----+----+----+----+----+----+----+
| val_string (len + data) | ; | ...
+----+----+----+----+----+----+----+
-size :: Integer
+size :: `Integer`
length -> 2 bytes
Total number of bytes that follow
-key_string :: String
+key_string :: `String`
A string (one byte length followed by UTF-8 encoded characters)
= :: A single byte containing '='
-val_string :: String
+val_string :: `String`
A string (one byte length followed by UTF-8 encoded characters)
; :: A single byte containing ';'
@@ -336,13 +336,13 @@ Defines the way to uniquely identify a particular router
| certificate |
+----+----+----+-//
-public_key :: PublicKey
+public_key :: `PublicKey`
length -> 256 bytes
-signing_key :: SigningPublicKey
+signing_key :: `SigningPublicKey`
length -> 128 bytes
-certificate :: Certificate
+certificate :: `Certificate`
length -> >= 3 bytes
total length: 387+ bytes
@@ -385,13 +385,13 @@ A Destination defines a particular endpoint to which messages can be directed fo
| certificate
+-//
-public_key :: PublicKey
+public_key :: `PublicKey`
length -> 256 bytes
-signing_public_key :: SigningPublicKey
+signing_public_key :: `SigningPublicKey`
length -> 128 bytes
-certificate :: Certificate
+certificate :: `Certificate`
length -> >= 3 bytes
total length: 387+ bytes
@@ -432,13 +432,13 @@ SHA256 Hash of the
|
+----+----+----+----+
-tunnel_gw :: Hash of the RouterIdentity of the tunnel gateway
+tunnel_gw :: Hash of the `RouterIdentity` of the tunnel gateway
length -> 32 bytes
-tunnel_id :: TunnelId
+tunnel_id :: `TunnelId`
length -> 4 bytes
-end_date :: Date
+end_date :: `Date`
length -> 8 bytes
{% endhighlight %}
@@ -529,23 +529,23 @@ bytes signed by the Destination's RouterIdentity.
| |
+----+----+----+----+----+----+----+----+
-router_ident :: RouterIdentity
+router_ident :: `RouterIdentity`
length -> >= 387 bytes
-published :: Date
+published :: `Date`
length -> 8 bytes
-size :: Integer
+size :: `Integer`
length -> 1 byte
-addresses :: [RouterAddress]
+addresses :: [`RouterAddress`]
length -> >= $size*267 bytes
-peer_size :: Integer
+peer_size :: `Integer`
length -> 1 byte
value -> 0
-options :: Mapping
+options :: `Mapping`
-signature :: Signature
+signature :: `Signature`
length -> 40 bytes
{% endhighlight %}
diff --git a/i2p2www/pages/site/docs/spec/i2np.html b/i2p2www/pages/site/docs/spec/i2np.html
index 4e6df9e0..4125cc66 100644
--- a/i2p2www/pages/site/docs/spec/i2np.html
+++ b/i2p2www/pages/site/docs/spec/i2np.html
@@ -49,12 +49,12 @@ Short (SSU, 5 bytes):
Definition
{% highlight lang='dataspec' %}
-type :: Integer
+type :: `Integer`
length -> 1 byte
purpose -> identifies the message type (see table below)
-msg_id :: Integer
+msg_id :: `Integer`
length -> 4 bytes
purpose -> uniquely identifies this message (for some time at least)
@@ -62,20 +62,20 @@ msg_id :: Integer
outgoing tunnel build messages it may be derived from
the incoming message. See below.
-expiration :: Date
+expiration :: `Date`
8 bytes
date this message will expire
-short_expiration :: Integer
+short_expiration :: `Integer`
4 bytes
date this message will expire (seconds since the epoch)
-size :: Integer
+size :: `Integer`
length -> 2 bytes
purpose -> length of the payload
-chks :: Integer
+chks :: `Integer`
length -> 1 byte
purpose -> checksum of the payload
@@ -202,37 +202,37 @@ ElGamal and AES encrypted:
{% highlight lang='dataspec' %}
unencrypted:
-receive_tunnel :: TunnelId
+receive_tunnel :: `TunnelId`
length -> 4 bytes
-our_ident :: Hash
+our_ident :: `Hash`
length -> 32 bytes
-next_tunnel :: TunnelId
+next_tunnel :: `TunnelId`
length -> 4 bytes
-next_ident :: Hash
+next_ident :: `Hash`
length -> 32 bytes
-layer_key :: SessionKey
+layer_key :: `SessionKey`
length -> 32 bytes
-iv_key :: SessionKey
+iv_key :: `SessionKey`
length -> 32 bytes
-reply_key :: SessionKey
+reply_key :: `SessionKey`
length -> 32 bytes
reply_iv :: data
length -> 16 bytes
-flag :: Integer
+flag :: `Integer`
length -> 1 byte
-request_time :: Integer
+request_time :: `Integer`
length -> 4 bytes
Hours since the epoch, i.e. current time / 3600
-send_message_id :: Integer
+send_message_id :: `Integer`
length -> 4 bytes
padding :: Data
@@ -343,9 +343,9 @@ Delivery Instructions :: tunnel ID of the inbound gateway of the tunnel the response should be sent to
@@ -515,8 +515,8 @@ reply gateway:
This is the router hash of the inbound gateway of the tunnel the response should be sent to
data:
- If type == 0, data is a 2-byte integer specifying the number of bytes that follow, followed by a gzip-compressed RouterInfo.
- If type == 1, data is an uncompressed LeaseSet.
+ If type == 0, data is a 2-byte integer specifying the number of bytes that follow, followed by a gzip-compressed `RouterInfo`.
+ If type == 1, data is an uncompressed `LeaseSet`.
Notes
@@ -615,12 +615,12 @@ flags ::
as of release 0.9.6, ignored, set to 0 for compatibility with future uses and with older routers
reply_tunnelId ::
- 4 byte Tunnel ID
+ 4 byte `TunnelID`
only included if deliveryFlag == 1
tunnelId of the tunnel to send the reply to
size ::
- 2 byte Integer
+ 2 byte `Integer`
valid range: 0-512
number of peers to exclude from the DatabaseSearchReply Message
@@ -632,17 +632,17 @@ excludedPeers ::
the DatabaseSearchReply Message is requested to list non-floodfill routers only.
reply_key ::
- 32 byte SessionKey
+ 32 byte `SessionKey`
only included if encryptionFlag == 1, only as of release 0.9.7
tags ::
- 1 byte Integer
+ 1 byte `Integer`
valid range: 1-32 (typically 1)
the number of reply tags that follow
only included if encryptionFlag == 1, only as of release 0.9.7
reply_tags ::
- one or more 32 byte SessionTags (typically one)
+ one or more 32 byte `SessionTags` (typically one)
only included if encryptionFlag == 1, only as of release 0.9.7
{% endhighlight %}
@@ -715,16 +715,16 @@ key ::
SHA256 of the object being searched
num ::
- 1 byte Integer
+ 1 byte `Integer`
number of peer hashes that follow, 0-255
peer_hash ($num entries) ::
32 bytes
- SHA256 of the RouterIdentity that the other router thinks is close to the key
+ SHA256 of the `RouterIdentity` that the other router thinks is close to the key
from ::
32 bytes
- SHA256 of the RouterInfo of the router this reply was sent from
+ SHA256 of the `RouterInfo` of the router this reply was sent from
{% endhighlight %}
Notes
@@ -837,15 +837,15 @@ data ::
Unencrypted data:
num ::
- 1 byte Integer number of GarlicCloves to follow
+ 1 byte Integer number of `GarlicCloves` to follow
-clove :: a GarlicClove
+clove :: a `GarlicClove`
Certificate :: always NULL in the current implementation (3 bytes total, all zeroes)
-Message_ID :: 4 byte Integer
+Message_ID :: 4 byte `Integer`
-Expiration :: Date (8 bytes)
+Expiration :: `Date` (8 bytes)
{% endhighlight %}
@@ -899,7 +899,7 @@ Expiration :: Date (8 bytes)
Definition
{% highlight lang='dataspec' %}
tunnelId ::
- 4 byte Tunnel ID
+ 4 byte `TunnelID`
identifies the tunnel this message is directed at
data ::
@@ -931,11 +931,11 @@ data ::
Definition
{% highlight lang='dataspec' %}
tunnelId ::
- 4 byte Tunnel ID
+ 4 byte `TunnelID`
identifies the tunnel this message is directed at
length ::
- 2 byte Integer
+ 2 byte `Integer`
length of the payload
data ::
@@ -995,7 +995,7 @@ data ::
Definition
{% highlight lang='dataspec' %}
-Just 8 Build Request Records attached together
+Just 8 `BuildRequestRecords` attached together
record size: 528 bytes
total size: 8*528 = 4224 bytes
{% endhighlight %}
@@ -1011,7 +1011,7 @@ total size: 8*528 = 4224 bytes
TunnelBuildReply
{% highlight lang='dataspec' %}
-same format as TunnelBuild message, with Build Response Records
+same format as `TunnelBuild` message, with `BuildResponseRecords`
{% endhighlight %}
Notes
@@ -1034,7 +1034,7 @@ same format as TunnelBuild message, with Build Response Records
Same format as TunnelBuildMessage, except for the addition of an "num" field in front and $num number of Build Request Records instead of 8
num ::
- 1 byte Integer
+ 1 byte `Integer`
Valid values: 1-8
record size: 528 bytes
diff --git a/i2p2www/pages/site/docs/spec/tunnel-message.html b/i2p2www/pages/site/docs/spec/tunnel-message.html
index 05c00c69..422c1db4 100644
--- a/i2p2www/pages/site/docs/spec/tunnel-message.html
+++ b/i2p2www/pages/site/docs/spec/tunnel-message.html
@@ -34,14 +34,14 @@ After the tunnel messages are created, they are encrypted as described in
These are the contents of a tunnel data message after encryption.
{% highlight lang='dataspec' %}
+----+----+----+----+----+----+----+----+
-| Tunnel_ID | IV |
+| Tunnel ID | IV |
+----+----+----+----+ +
| |
+ +----+----+----+----+
| | |
+----+----+----+----+ +
| |
-+ Encrypted_Data +
++ Encrypted Data +
~ ~
| |
+ +-------------------+
@@ -51,7 +51,7 @@ These are the contents of a tunnel data message after encryption.
Definition
{% highlight lang='dataspec' %}
-Tunnel_ID ::
+Tunnel ID ::
4 bytes
the ID of the next hop
@@ -59,7 +59,7 @@ IV ::
16 bytes
the initialization vector
-Encrypted_Data ::
+Encrypted Data ::
1008 bytes
the encrypted tunnel message
@@ -72,7 +72,7 @@ total size: 1028 Bytes
These are the contents of a tunnel data message when decrypted.
{% highlight lang='dataspec' %}
+----+----+----+----+----+----+----+----+
-| Tunnel_ID | IV |
+| Tunnel ID | IV |
+----+----+----+----+ +
| |
+ +----+----+----+----+
@@ -112,7 +112,7 @@ These are the contents of a tunnel data message when decrypted.
Definition
-Tunnel_ID ::
+Tunnel ID ::
4 bytes
the ID of the next hop
@@ -124,7 +124,7 @@ Checksum ::
4 bytes
the first 4 bytes of the SHA256 hash of the contents of the message after the zero byte concatenated with the IV
-Nonzero_padding ::
+Nonzero padding ::
0 or more bytes
random nonzero data for padding
@@ -132,12 +132,12 @@ Zero ::
1 byte
the value 0x00
-Delivery_Instructions ::
+Delivery Instructions ::
length varies but is typically 7, 39, 43, or 47 bytes
Indicates the fragment and the routing for the fragment
See below for specification
-Message_Fragment ::
+Message Fragment ::
1 to 996 bytes, actual maximum depends on delivery instruction size
A partial or full I2NP Message
@@ -262,7 +262,7 @@ Total length: Typical length is:
If the MSB of the first byte is 1, this is a follow-on fragment, and the instructions are:
{% highlight lang='dataspec' %}
+----+----+----+----+----+----+----+
-|frag| Message_ID | size |
+|frag| Message ID | size |
+----+----+----+----+----+----+----+
{% endhighlight %}
@@ -275,7 +275,7 @@ frag ::
nnnnnn is the 6 bit fragment number from 1 to 63
d is 1 to indicate the last fragment, 0 otherwise
-Message_ID ::
+Message ID ::
4 bytes
Identifies the fragment sequence that this fragment belongs to.
This will match the message ID of an initial fragment (a fragment