diff options
author | Thomas Wouters <thomas@python.org> | 2006-06-08 14:52:47 (GMT) |
---|---|---|
committer | Thomas Wouters <thomas@python.org> | 2006-06-08 14:52:47 (GMT) |
commit | 1ba5b3b425e970ec3e4a19165475aa68fa5ac893 (patch) | |
tree | 607d666a002704ccb6a8cc5d1739b729a64cc615 /Mac/Tools/IDE/PyFontify.py | |
parent | 4d70c3d9dded0f0fa7a73c67217a71111d05df4d (diff) | |
download | cpython-1ba5b3b425e970ec3e4a19165475aa68fa5ac893.zip cpython-1ba5b3b425e970ec3e4a19165475aa68fa5ac893.tar.gz cpython-1ba5b3b425e970ec3e4a19165475aa68fa5ac893.tar.bz2 |
Merged revisions 46607-46608 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
r46607 | neal.norwitz | 2006-06-03 06:49:00 +0200 (Sat, 03 Jun 2006) | 1 line
Remove Mac OS 9 support (http://mail.python.org/pipermail/python-dev/2006-June/065538.html)
........
r46608 | martin.v.loewis | 2006-06-03 09:37:13 +0200 (Sat, 03 Jun 2006) | 2 lines
Port to OpenBSD 3.9. Patch from Aldo Cortesi.
........
Diffstat (limited to 'Mac/Tools/IDE/PyFontify.py')
-rw-r--r-- | Mac/Tools/IDE/PyFontify.py | 155 |
1 files changed, 0 insertions, 155 deletions
diff --git a/Mac/Tools/IDE/PyFontify.py b/Mac/Tools/IDE/PyFontify.py deleted file mode 100644 index 41f1942..0000000 --- a/Mac/Tools/IDE/PyFontify.py +++ /dev/null @@ -1,155 +0,0 @@ -"""Module to analyze Python source code; for syntax coloring tools. - -Interface: - tags = fontify(pytext, searchfrom, searchto) - -The 'pytext' argument is a string containing Python source code. -The (optional) arguments 'searchfrom' and 'searchto' may contain a slice in pytext. -The returned value is a list of tuples, formatted like this: - [('keyword', 0, 6, None), ('keyword', 11, 17, None), ('comment', 23, 53, None), etc. ] -The tuple contents are always like this: - (tag, startindex, endindex, sublist) -tag is one of 'keyword', 'string', 'comment' or 'identifier' -sublist is not used, hence always None. -""" - -# Based on FontText.py by Mitchell S. Chapman, -# which was modified by Zachary Roadhouse, -# then un-Tk'd by Just van Rossum. -# Many thanks for regular expression debugging & authoring are due to: -# Tim (the-incredib-ly y'rs) Peters and Cristian Tismer -# So, who owns the copyright? ;-) How about this: -# Copyright 1996-2001: -# Mitchell S. Chapman, -# Zachary Roadhouse, -# Tim Peters, -# Just van Rossum - -__version__ = "0.4" - -import string -import re - -# First a little helper, since I don't like to repeat things. (Tismer speaking) -import string -def replace(where, what, with): - return string.join(string.split(where, what), with) - -# This list of keywords is taken from ref/node13.html of the -# Python 1.3 HTML documentation. ("access" is intentionally omitted.) -keywordsList = [ - "assert", "exec", - "del", "from", "lambda", "return", - "and", "elif", "global", "not", "try", - "break", "else", "if", "or", "while", - "class", "except", "import", "pass", - "continue", "finally", "in", "print", - "def", "for", "is", "raise", "yield"] - -# Build up a regular expression which will match anything -# interesting, including multi-line triple-quoted strings. -commentPat = r"#[^\n]*" - -pat = r"q[^\\q\n]*(\\[\000-\377][^\\q\n]*)*q" -quotePat = replace(pat, "q", "'") + "|" + replace(pat, 'q', '"') - -# Way to go, Tim! -pat = r""" - qqq - [^\\q]* - ( - ( \\[\000-\377] - | q - ( \\[\000-\377] - | [^\q] - | q - ( \\[\000-\377] - | [^\\q] - ) - ) - ) - [^\\q]* - )* - qqq -""" -pat = string.join(string.split(pat), '') # get rid of whitespace -tripleQuotePat = replace(pat, "q", "'") + "|" + replace(pat, 'q', '"') - -# Build up a regular expression which matches all and only -# Python keywords. This will let us skip the uninteresting -# identifier references. -# nonKeyPat identifies characters which may legally precede -# a keyword pattern. -nonKeyPat = r"(^|[^a-zA-Z0-9_.\"'])" - -keyPat = nonKeyPat + "(" + "|".join(keywordsList) + ")" + nonKeyPat - -matchPat = commentPat + "|" + keyPat + "|" + tripleQuotePat + "|" + quotePat -matchRE = re.compile(matchPat) - -idKeyPat = "[ \t]*[A-Za-z_][A-Za-z_0-9.]*" # Ident w. leading whitespace. -idRE = re.compile(idKeyPat) - - -def fontify(pytext, searchfrom = 0, searchto = None): - if searchto is None: - searchto = len(pytext) - # Cache a few attributes for quicker reference. - search = matchRE.search - idSearch = idRE.search - - tags = [] - tags_append = tags.append - commentTag = 'comment' - stringTag = 'string' - keywordTag = 'keyword' - identifierTag = 'identifier' - - start = 0 - end = searchfrom - while 1: - m = search(pytext, end) - if m is None: - break # EXIT LOOP - start = m.start() - if start >= searchto: - break # EXIT LOOP - match = m.group(0) - end = start + len(match) - c = match[0] - if c not in "#'\"": - # Must have matched a keyword. - if start <> searchfrom: - # there's still a redundant char before and after it, strip! - match = match[1:-1] - start = start + 1 - else: - # this is the first keyword in the text. - # Only a space at the end. - match = match[:-1] - end = end - 1 - tags_append((keywordTag, start, end, None)) - # If this was a defining keyword, look ahead to the - # following identifier. - if match in ["def", "class"]: - m = idSearch(pytext, end) - if m is not None: - start = m.start() - if start == end: - match = m.group(0) - end = start + len(match) - tags_append((identifierTag, start, end, None)) - elif c == "#": - tags_append((commentTag, start, end, None)) - else: - tags_append((stringTag, start, end, None)) - return tags - - -def test(path): - f = open(path) - text = f.read() - f.close() - tags = fontify(text) - for tag, start, end, sublist in tags: - print tag, repr(text[start:end]) |