Modify and enforce the file format/structure used

Convert the file format to be of the form ##_##_something.rst where the
first ## is the top-level section number and the second ## is the
second-level section number, e.g. 07_01_push_cs_api.rst means
Section 7.1 - This is now enforced in gendoc.py along with the title line
style that should be used (= for top-level, - for 2nd level) which will
give helpful suggestions if you trip up. This feels much more intuitive
now looking in /specification
pull/977/head
Kegan Dougal 9 years ago
parent 06e46c1899
commit 1f6b12b3e8

@ -21,7 +21,7 @@ title_style_matchers = {
} }
TOP_LEVEL = "=" TOP_LEVEL = "="
SECOND_LEVEL = "-" SECOND_LEVEL = "-"
FILE_FORMAT_MATCHER = re.compile("^[0-9]+_[0-9]{2}_.*\.rst$") FILE_FORMAT_MATCHER = re.compile("^[0-9]+_[0-9]{2}[a-z]*_.*\.rst$")
def check_valid_section(filename, section): def check_valid_section(filename, section):
@ -55,14 +55,16 @@ def check_valid_section(filename, section):
"style: expected '" + TOP_LEVEL + "' but got '" + "style: expected '" + TOP_LEVEL + "' but got '" +
title_line[0] + "'" title_line[0] + "'"
) )
# anything marked as xx_x0_ is the start of a sub-section # anything marked as xx_xx_ is the start of a sub-section
elif re.match("^[0-9]+_0[0-9]{1}_", filename): elif re.match("^[0-9]+_[0-9]{2}_", filename):
if not title_style_matchers[SECOND_LEVEL].match(title_line): if not title_style_matchers[SECOND_LEVEL].match(title_line):
raise Exception( raise Exception(
"The file " + filename + " is a 2nd-level section because it matches " + "The file " + filename + " is a 2nd-level section because it matches " +
"the filename format ##_#0_something.rst but has the wrong title " + "the filename format ##_##_something.rst but has the wrong title " +
"style: expected '" + SECOND_LEVEL + "' but got '" + "style: expected '" + SECOND_LEVEL + "' but got '" +
title_line[0] + "'" title_line[0] + "' - If this is meant to be a 3rd/4th/5th-level section " +
"then use the form '##_##b_something.rst' which will not apply this " +
"check."
) )
def cat_spec_sections_to(out_file_name): def cat_spec_sections_to(out_file_name):

@ -1,8 +1,8 @@
Typing Notifications Typing Notifications
==================== --------------------
Client APIs Client APIs
----------- ~~~~~~~~~~~
To set "I am typing for the next N msec":: To set "I am typing for the next N msec"::
@ -21,7 +21,7 @@ To set "I am no longer typing"::
Content: { "typing": false } Content: { "typing": false }
Client Events Client Events
------------- ~~~~~~~~~~~~~
All room members will receive an event on the event stream:: All room members will receive an event on the event stream::
@ -39,7 +39,7 @@ users who are not currently typing, as that list gets big quickly. The client
should mark as not typing, any user ID who is not in that list. should mark as not typing, any user ID who is not in that list.
Server APIs Server APIs
----------- ~~~~~~~~~~~
Servers will emit EDUs in the following form:: Servers will emit EDUs in the following form::

@ -1,5 +1,5 @@
Receipts Receipts
======== --------
Receipts are used to publish which events in a room the user or their devices Receipts are used to publish which events in a room the user or their devices
have interacted with. For example, which events the user has read. For have interacted with. For example, which events the user has read. For
@ -7,7 +7,7 @@ efficiency this is done as "up to" markers, i.e. marking a particular event
as, say, ``read`` indicates the user has read all events *up to* that event. as, say, ``read`` indicates the user has read all events *up to* that event.
Client-Server API Client-Server API
----------------- ~~~~~~~~~~~~~~~~~
Clients will receive receipts in the following format:: Clients will receive receipts in the following format::
@ -58,7 +58,7 @@ other users. The server will automatically set the ``ts`` field.
Server-Server API Server-Server API
----------------- ~~~~~~~~~~~~~~~~~
Receipts are sent across federation as EDUs with type ``m.receipt``. The Receipts are sent across federation as EDUs with type ``m.receipt``. The
format of the EDUs are:: format of the EDUs are::
@ -73,5 +73,5 @@ format of the EDUs are::
... ...
} }
These are always sent as deltas to previously sent reciepts. These are always sent as deltas to previously sent receipts.

@ -1,5 +1,5 @@
Room History Visibility Room History Visibility
======================= -----------------------
Whether a member of a room can see the events that happened in a room from Whether a member of a room can see the events that happened in a room from
before they joined the room is controlled by the ``history_visibility`` key before they joined the room is controlled by the ``history_visibility`` key

@ -1,8 +1,8 @@
Signing Events Signing Events
============== --------------
Canonical JSON Canonical JSON
-------------- ~~~~~~~~~~~~~~
Matrix events are represented using JSON objects. If we want to sign JSON Matrix events are represented using JSON objects. If we want to sign JSON
events we need to encode the JSON as a binary string. Unfortunately the same events we need to encode the JSON as a binary string. Unfortunately the same
@ -38,7 +38,7 @@ using this representation.
).encode("UTF-8") ).encode("UTF-8")
Grammar Grammar
~~~~~~~ +++++++
Adapted from the grammar in http://tools.ietf.org/html/rfc7159 removing Adapted from the grammar in http://tools.ietf.org/html/rfc7159 removing
insignificant whitespace, fractions, exponents and redundant character escapes insignificant whitespace, fractions, exponents and redundant character escapes
@ -69,14 +69,14 @@ insignificant whitespace, fractions, exponents and redundant character escapes
/ %x75.30.30.31 (%x30-39 / %x61-66) ; u001X / %x75.30.30.31 (%x30-39 / %x61-66) ; u001X
Signing JSON Signing JSON
------------ ~~~~~~~~~~~~
We can now sign a JSON object by encoding it as a sequence of bytes, computing We can now sign a JSON object by encoding it as a sequence of bytes, computing
the signature for that sequence and then adding the signature to the original the signature for that sequence and then adding the signature to the original
JSON object. JSON object.
Signing Details Signing Details
~~~~~~~~~~~~~~~ +++++++++++++++
JSON is signed by encoding the JSON object without ``signatures`` or keys grouped JSON is signed by encoding the JSON object without ``signatures`` or keys grouped
as ``unsigned``, using the canonical encoding described above. The JSON bytes are then signed using the as ``unsigned``, using the canonical encoding described above. The JSON bytes are then signed using the
@ -133,7 +133,7 @@ and additional signatures.
return json_object return json_object
Checking for a Signature Checking for a Signature
~~~~~~~~~~~~~~~~~~~~~~~~ ++++++++++++++++++++++++
To check if an entity has signed a JSON object a server does the following To check if an entity has signed a JSON object a server does the following
@ -151,7 +151,7 @@ To check if an entity has signed a JSON object a server does the following
the check fails. Otherwise the check succeeds. the check fails. Otherwise the check succeeds.
Signing Events Signing Events
-------------- ~~~~~~~~~~~~~~
Signing events is a more complicated process since servers can choose to redact Signing events is a more complicated process since servers can choose to redact
non-essential parts of an event. Before signing the event it is encoded as non-essential parts of an event. Before signing the event it is encoded as
Loading…
Cancel
Save