Changeset 1497
- Timestamp:
- 07/21/08 20:33:13 (5 weeks ago)
- Location:
- trunk/peppy
- Files:
-
- 2 modified
-
fundamental_menu.py (modified) (3 diffs)
-
lib/textutil.py (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/peppy/fundamental_menu.py
r1477 r1497 11 11 from peppy.fundamental import * 12 12 from peppy.lib.userparams import * 13 from peppy.lib.textutil import * 13 14 14 15 … … 222 223 return self.mode.locals.use_tab_characters 223 224 225 class GuessIndentSize(SelectAction): 226 """Guess the tab size of the current document or selection and set the view parameters""" 227 name = "Guess Indent Size" 228 default_menu = ("View", 309) 229 230 def action(self, index=-1, multiplier=1): 231 s = self.mode 232 (start, end) = s.GetSelection() 233 if start==end: 234 text = s.GetText() 235 else: 236 text = s.GetTextRange(start, end) 237 size = guessSpacesPerIndent(text) 238 if size == 0: 239 s.locals.use_tab_characters = True 240 self.frame.SetStatusText("Indenting with tab characters") 241 elif size > 0: 242 s.locals.use_tab_characters = False 243 s.locals.indent_size = size 244 self.frame.SetStatusText("%d spaces per indent, indenting with spaces" % (size)) 245 else: 246 self.frame.SetStatusText("Can't determine indent size from document") 247 s.setTabStyle() 248 224 249 class TabHighlight(FundamentalRadioToggle): 225 250 local_setting = 'tab_highlight_style' … … 457 482 458 483 IndentationGuides, IndentSize, IndentWithTabsOrSpaces, 459 TabSize, 484 TabSize, GuessIndentSize, 460 485 461 486 CaretLineHighlight, CaretWidth, ViewWhitespace, -
trunk/peppy/lib/textutil.py
r1141 r1497 130 130 return True 131 131 return False 132 133 134 def guessSpacesPerIndent(text): 135 """Guess the number of spaces per indent level 136 137 Takes from the SciTE source file SciTEBase::DiscoverIndentSetting 138 """ 139 tabsizes = [0]*9 140 indent = 0 # current line indentation 141 previndent = 0 # previous line indentation 142 prevsize = -1 # previous line tab size 143 newline = True 144 for c in text: 145 if c == '\n' or c == '\r': 146 newline = True 147 indent = 0 148 elif newline: 149 if c == ' ': 150 indent += 1 151 else: 152 if indent: 153 if indent == previndent and prevsize >= 0: 154 tabsizes[prevsize] += 1 155 elif indent > previndent and previndent >= 0: 156 if indent - previndent <= 8: 157 prevsize = indent - previndent 158 tabsizes[prevsize] += 1 159 else: 160 prevsize = -1 161 previndent = indent 162 elif c == '\t': 163 tabsizes[0] += 1 164 newline = False 165 166 # find maximum non-zero indent 167 index = -1 168 for i, size in enumerate(tabsizes): 169 if size > 0 and (index == -1 or size > tabsizes[index]): 170 index = i 171 172 return index 173 174 175 if __name__ == "__main__": 176 import sys 177 178 for file in sys.argv[1:]: 179 fh = open(file) 180 text = fh.read() 181 print "file=%s, tabsize=%d" % (file, guessSpacesPerIndent(text))
