ntg-context - mailing list for ConTeXt users
 help / color / mirror / Atom feed
From: Pontus Lurcock <pont@talvi.net>
To: ntg-context@ntg.nl
Subject: Re: Check brackets and parentheses
Date: Fri, 6 Jul 2012 08:38:44 +0100	[thread overview]
Message-ID: <20120706073844.GN9970@rae.vm.bytemark.co.uk> (raw)
In-Reply-To: <64C3576E-DF3A-470B-82C9-295690C44AB8@gmail.com>

[-- Attachment #1: Type: text/plain, Size: 1128 bytes --]

On Thu 05 Jul 2012, Gilbert Houtekamer wrote:

> I sometimes find myself looking for misplaced and missing brackets for a long time, as context may given errors about a completely different location.
> 
> For example this one took me a while
>    \goto{\url[localhost20381}[url(localhost20381)]
>  
> (missing ] after this localhost20381).
> 
> Is there a SciTE or Notepad++ or command line script that anyone wrote to help with this?  It can be more or less sophisticated, but I found that missing / mismatched { [ ] } give the most confusing errors.  

I wrote the attached Python script a while ago to catch cases like
this, where an opening bracket accidentally ‘contains’ the whole rest
of the file. The script just keeps a running count of the nesting
level, and gives the number of the last line where the nesting level
was zero. Usually the offending bracket is at or very close to that
line. It does that same for \start... and \stop..., in a very stupid 
way (i.e. just counts them without identifying them, wouldn't
catch e.g. \startonething \stopsomeotherthing).

Hope it's helpful,

Pont

[-- Attachment #2: brace-lint.py --]
[-- Type: text/x-python, Size: 514 bytes --]

#!/usr/bin/python

import sys

'''Count opening and closing braces in a file.'''

def count(filename, opening, closing):
    print opening, closing
    f = open(sys.argv[1], 'r')
    braces = 0
    i = 1
    last_zero = -1
    for line in f.readlines():
        braces += line.count(opening)
        braces -= line.count(closing)
        if braces==0: last_zero = i
        i += 1
    f.close()
    print last_zero

count(sys.argv[1], '{', '}')
count(sys.argv[1], '[', ']')
count(sys.argv[1], '\\start', '\\stop')

[-- Attachment #3: Type: text/plain, Size: 485 bytes --]

___________________________________________________________________________________
If your question is of interest to others as well, please add an entry to the Wiki!

maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context
webpage  : http://www.pragma-ade.nl / http://tex.aanhet.net
archive  : http://foundry.supelec.fr/projects/contextrev/
wiki     : http://contextgarden.net
___________________________________________________________________________________

  parent reply	other threads:[~2012-07-06  7:38 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-07-05 18:40 Gilbert Houtekamer
2012-07-06  7:17 ` Henning Hraban Ramm
2012-07-06  7:21 ` Hans Hagen
2012-07-06  7:38 ` Pontus Lurcock [this message]
2012-07-06 12:37   ` Hongwen Qiu
2012-07-06 14:24     ` Pontus Lurcock

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20120706073844.GN9970@rae.vm.bytemark.co.uk \
    --to=pont@talvi.net \
    --cc=ntg-context@ntg.nl \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).