Browse Source

Fix C code to make declarations before statements

Python 3.4 compiles C extensions with the
`-Werror=declaration-after-statement` flag that enforces C90 more
strictly than previous versions. Move all statements after declarations
to make sure this extension builds on 3.4.
tags/v0.4
David Winegar 9 years ago
parent
commit
c63108039b
2 changed files with 29 additions and 31 deletions
  1. +17
    -17
      mwparserfromhell/parser/tokenizer.c
  2. +12
    -14
      mwparserfromhell/parser/tokenizer.py

+ 17
- 17
mwparserfromhell/parser/tokenizer.c View File

@@ -2601,17 +2601,17 @@ static PyObject* Tokenizer_parse_as_table_style(Tokenizer* self, char end_token,
*/
static int Tokenizer_handle_table_start(Tokenizer* self)
{
self->head += 2;
Py_ssize_t reset = self->head;
Py_ssize_t reset = self->head + 1;
PyObject *style, *padding, *newline_character;
PyObject *table = NULL;
self->head += 2;

if(Tokenizer_push(self, LC_TABLE_OPEN))
return -1;
padding = Tokenizer_parse_as_table_style(self, '\n', 1);
if (BAD_ROUTE) {
RESET_ROUTE();
self->head = reset - 1;
self->head = reset;
if (Tokenizer_emit_text(self, "{|"))
return -1;
return 0;
@@ -2638,7 +2638,7 @@ static int Tokenizer_handle_table_start(Tokenizer* self)
if (BAD_ROUTE) {
RESET_ROUTE();
// offset displacement done by parse()
self->head = reset - 1;
self->head = reset;
if (Tokenizer_emit_text(self, "{|"))
return -1;
return 0;
@@ -2675,17 +2675,17 @@ static PyObject * Tokenizer_handle_table_end(Tokenizer* self)
*/
static int Tokenizer_handle_table_row(Tokenizer* self)
{
Py_ssize_t reset = self->head;
PyObject *padding, *style, *row;
self->head += 2;

if (!Tokenizer_CAN_RECURSE(self)) {
if (Tokenizer_emit_text(self, "|-"))
return -1;
self->head += 1;
self->head -= 1;
return 0;
}

Py_ssize_t reset = self->head;
self->head += 2;
PyObject *padding, *style, *row;

if(Tokenizer_push(self, LC_TABLE_OPEN | LC_TABLE_ROW_OPEN))
return -1;
padding = Tokenizer_parse_as_table_style(self, '\n', 0);
@@ -2738,20 +2738,20 @@ static PyObject* Tokenizer_handle_table_row_end(Tokenizer* self)
static int Tokenizer_handle_table_cell(Tokenizer* self, const char *markup,
const char *tag, uint64_t line_context)
{
if (!Tokenizer_CAN_RECURSE(self)) {
if (Tokenizer_emit_text(self, markup))
return -1;
self->head += strlen(markup) - 1;
return 0;
}

uint64_t old_context = self->topstack->context;
uint64_t cell_context;
Py_ssize_t reset = self->head;
self->head += strlen(markup);
PyObject *padding, *cell;
PyObject *style = NULL;
const char *close_open_markup = NULL;
self->head += strlen(markup);

if (!Tokenizer_CAN_RECURSE(self)) {
if (Tokenizer_emit_text(self, markup))
return -1;
self->head--;
return 0;
}

cell = Tokenizer_parse(self, LC_TABLE_OPEN | LC_TABLE_CELL_OPEN | LC_TABLE_CELL_STYLE | line_context, 1);
if (BAD_ROUTE) {


+ 12
- 14
mwparserfromhell/parser/tokenizer.py View File

@@ -1050,9 +1050,9 @@ class Tokenizer(object):

def _handle_table_start(self):
"""Handle the start of a table."""
self._head += 2
reset = self._head
reset = self._head + 1
style, table = None, None
self._head += 2
try:
self._push(contexts.TABLE_OPEN)
padding = self._parse_as_table_style("\n", break_on_table_end=True)
@@ -1066,7 +1066,7 @@ class Tokenizer(object):
self._head += 2
except BadRoute:
# offset displacement done by _parse()
self._head = reset - 1
self._head = reset
self._emit_text("{|")
else:
self._emit_table_tag("{|", "table", style, padding, None, table, "|}")
@@ -1079,14 +1079,14 @@ class Tokenizer(object):

def _handle_table_row(self):
"""Parse as style until end of the line, then continue."""
reset = self._head
style, padding = None, ""
self._head += 2
if not self._can_recurse():
self._emit_text("|-")
self._head += 1
self._head -= 1
return

reset = self._head
self._head += 2
style, padding = None, ""
try:
self._push(contexts.TABLE_OPEN | contexts.TABLE_ROW_OPEN)
padding = self._parse_as_table_style("\n")
@@ -1108,15 +1108,15 @@ class Tokenizer(object):
def _handle_table_cell(self, markup, tag, line_context):
"""Parse as normal syntax unless we hit a style marker, then parse style
as HTML attributes and the remainder as normal syntax."""
old_context = self._context
reset = self._head
reset_for_style, padding, style = False, "", None
self._head += len(markup)
if not self._can_recurse():
self._emit_text(markup)
self._head += len(markup) - 1
self._head -= 1
return

old_context = self._context
reset = self._head
self._head += len(markup)
reset_for_style, padding, style = False, "", None
try:
cell = self._parse(contexts.TABLE_OPEN | contexts.TABLE_CELL_OPEN | line_context | contexts.TABLE_CELL_STYLE)
cell_context = self._context
@@ -1149,8 +1149,6 @@ class Tokenizer(object):
def _handle_table_cell_end(self, reset_for_style=False):
"""Returns the current context, with the TABLE_CELL_STYLE flag set if
it is necessary to reset and parse style attributes."""
if self._context & (contexts.FAIL & ~contexts.TABLE):
raise BadRoute
if reset_for_style:
self._context |= contexts.TABLE_CELL_STYLE
else:


Loading…
Cancel
Save