Re: How to automatically get the indent level from code?

2013-03-18 Thread Peng Yu
On Sun, Mar 17, 2013 at 1:23 AM, Mark Shroyer mshro...@awaredigital.com wrote:
 I realize this isn't yet precisely what you're asking for, but look at the 
 inspect and ast modules:

 import ast, inspect

 def indent_level():
 lineno = inspect.currentframe().f_back.f_lineno

 with open(__file__) as source_file:
 tree = ast.parse(source_file.read(), filename=__file__)

 for node in ast.walk(tree):
 if hasattr(node, 'lineno') and node.lineno == lineno:
 return node.col_offset

 def example_usage():
 print(first indent_level() = {0}.format(indent_level()))
 if True:
 print(second indent_level() = {0}.format(indent_level()))

 if __name__ == '__main__':
 example_usage()

 The indent_level function above returns the textual column offset rather than 
 the logical block level you're asking for, e.g.:

 first indent_level() = 4
 second indent_level() = 8

 But hopefully it's a start.

Thanks. I try to run it from stdin. Obviously, it does not work. The
problem is the stdin can not be read again. Is there a way to extend
the code that indentation can be computed even the code is from stdin?

~/linux/test/python/tricks/indent_level$ python -  main.py
Traceback (most recent call last):
  File stdin, line 23, in module
  File stdin, line 16, in example_usage
  File stdin, line 8, in indent_level
IOError: [Errno 2] No such file or directory: 'stdin'
~/linux/test/python/tricks/indent_level$ cat main.py
#!/usr/bin/env python

import ast, inspect

def indent_level():
  lineno = inspect.currentframe().f_back.f_lineno

  with open(__file__) as source_file:
tree = ast.parse(source_file.read(), filename=__file__)

  for node in ast.walk(tree):
if hasattr(node, 'lineno') and node.lineno == lineno:
  return node.col_offset

def example_usage():
  print indent_level()
  #print(first indent_level() = {0}.format(indent_level()))
  if True:
print indent_level()
#print(second indent_level() = {0}.format(indent_level()))

if __name__ == '__main__':
  example_usage()

-- 
Regards,
Peng
-- 
http://mail.python.org/mailman/listinfo/python-list


RE: How to automatically get the indent level from code?

2013-03-17 Thread Mark Shroyer
I realize this isn't yet precisely what you're asking for, but look at the 
inspect and ast modules:

import ast, inspect

def indent_level():
lineno = inspect.currentframe().f_back.f_lineno

with open(__file__) as source_file:
tree = ast.parse(source_file.read(), filename=__file__)

for node in ast.walk(tree):
if hasattr(node, 'lineno') and node.lineno == lineno:
return node.col_offset

def example_usage():
print(first indent_level() = {0}.format(indent_level()))
if True:
print(second indent_level() = {0}.format(indent_level()))

if __name__ == '__main__':
example_usage()

The indent_level function above returns the textual column offset rather than 
the logical block level you're asking for, e.g.:

first indent_level() = 4
second indent_level() = 8

But hopefully it's a start.

Mark

-Original Message-
From: Python-list 
[mailto:python-list-bounces+mshroyer=awaredigital@python.org] On Behalf Of 
Peng Yu
Sent: Sunday, March 17, 2013 12:53 AM
To: python-list@python.org
Subject: How to automatically get the indent level from code?

Hi,

I want to get the indent level within the code. For example, I want to
print 1 within the while loop as the line is indented 1 level. Is it
possible to get it within python?

while 1:
   #print the level of indent, which is 1 here.

-- 
Regards,
Peng
-- 
http://mail.python.org/mailman/listinfo/python-list
-- 
http://mail.python.org/mailman/listinfo/python-list


How to automatically get the indent level from code?

2013-03-16 Thread Peng Yu
Hi,

I want to get the indent level within the code. For example, I want to
print 1 within the while loop as the line is indented 1 level. Is it
possible to get it within python?

while 1:
   #print the level of indent, which is 1 here.

-- 
Regards,
Peng
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: How to automatically get the indent level from code?

2013-03-16 Thread Rodrick Brown
No


On Sun, Mar 17, 2013 at 12:52 AM, Peng Yu pengyu...@gmail.com wrote:

 Hi,

 I want to get the indent level within the code. For example, I want to
 print 1 within the while loop as the line is indented 1 level. Is it
 possible to get it within python?

 while 1:
#print the level of indent, which is 1 here.

 --
 Regards,
 Peng
 --
 http://mail.python.org/mailman/listinfo/python-list

-- 
http://mail.python.org/mailman/listinfo/python-list