You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

35 lines
1.1 KiB

7 years ago
  1. import re
  2. from Npp import editor
  3. snake = re.compile('([a-z\\d]+_)+[a-z_\\d]+')
  4. camel = re.compile('((?<![A-Z])[a-zA-Z][a-z]*|\\d+)+')
  5. camel_split = re.compile('((?<![A-Z])[a-zA-Z][a-z]*|\\d+)')
  6. def toggle(text,pascal = False):
  7. if snake.match(text):
  8. groups = text.split('_')
  9. ret_s = groups[0]
  10. if pascal:
  11. ret_s = ret_s.capitalize()
  12. for group in groups[1:]:
  13. ret_s += group.capitalize()
  14. elif camel.match(text):
  15. groups = camel_split.findall(text)
  16. ret_s = '_'.join(group.lower() for group in groups)
  17. return ret_s
  18. if __name__ == "__main__":
  19. start = editor.getSelectionStart()
  20. content = editor.getSelText()
  21. pascal = 'P256' in content
  22. replace_all = 'R256' in content
  23. if pascal:
  24. content = content.replace('P256','')
  25. if replace_all:
  26. content = content.replace('R256','')
  27. editor.replaceSel(content)
  28. start += 2
  29. result = toggle(content,pascal)
  30. if replace_all:
  31. editor.replace(content,result)
  32. else:
  33. editor.replaceSel(result)
  34. editor.setSelectionStart(start)
  35. editor.setSelectionEnd(start + len(result))