Advertisement
Guest User

Untitled

a guest
Mar 20th, 2017
118
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.87 KB | None | 0 0
  1.  
  2.  
  3. #приведи к PEP8
  4. #потестируй, найдешь багу - скажи
  5. #коменты убери
  6.  
  7. #да, быдлокод, согласен
  8.  
  9. import sys
  10. import argparse
  11.  
  12.  
  13.  
  14. signs = set(",.?!-:'") #вродь, ничего не забыл
  15. letters = set("qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM1234567890")
  16. #переименуй как-нить, а то называть цифру буквой - не комильфо
  17.  
  18. def is_letter(c):
  19. return (c in letters)
  20. def is_sign(c):
  21. return (c in signs)
  22.  
  23. def reformat(text_in, line_len, indent_len):
  24.  
  25. cur_lexem = ""
  26. was_space = False
  27. lexems = list()
  28. for c in text_in:
  29. if is_letter(c):
  30. if(was_space == False and (cur_lexem == "" or is_letter(cur_lexem[-1]))):
  31. cur_lexem += c
  32. else:
  33. lexems.append(cur_lexem)
  34. cur_lexem = c
  35. was_space = False
  36. elif is_sign(c):
  37. if(cur_lexem != "" and (is_letter(cur_lexem[-1]) or is_sign(cur_lexem[-1]))):
  38. cur_lexem += c
  39. else:
  40. raise RuntimeError("Идите нах*й, в условии такого не было")#эти исключения можешь убрать
  41. was_space = False
  42. elif c == '\n':
  43. if(not (cur_lexem == '\n' or cur_lexem == "")):
  44. lexems.append(cur_lexem)
  45. cur_lexem = '\n'
  46. was_space = False
  47. elif c == ' ':
  48. if(not(cur_lexem == "")):
  49. was_space = True
  50. else:
  51. raise RuntimeError("Идите нах*й, в условии такого не было") #эти исключения можешь убрать
  52. if(cur_lexem != ""):
  53. lexems.append(cur_lexem)
  54. text_out = ""
  55. cur_line = " " * indent_len
  56. was_newline = True
  57.  
  58. #костыль
  59. if(len(lexems) == 0):
  60. return ""
  61. #еще костыль
  62. while(lexems[-1] == '\n'):
  63. lexems.pop()
  64.  
  65.  
  66.  
  67.  
  68.  
  69. for lexem in lexems:
  70. if(len(lexem) > line_len):
  71. raise RuntimeError("Не форматируется") # а это нельзя, можно сообщение другое вписать
  72.  
  73. if(lexem == "\n"):
  74. text_out += cur_line
  75. text_out += '\n'
  76. cur_line = ""
  77. cur_line += ' ' * indent_len
  78. was_newline = True
  79.  
  80.  
  81.  
  82. elif(len(lexem) + len(cur_line) + 1 - int(was_newline) > line_len):
  83. text_out += cur_line
  84. text_out += '\n'
  85. cur_line = lexem
  86. was_newline = False
  87.  
  88. else:
  89. print(was_newline)
  90. print(int(was_newline))
  91. cur_line += ' ' * (1 - int(was_newline))
  92. cur_line += lexem
  93. was_newline = False
  94.  
  95. text_out += cur_line
  96. return text_out
  97.  
  98.  
  99.  
  100. parser = argparse.ArgumentParser()
  101. parser.add_argument('--input', '-i', dest = 'input_file', type = str)
  102. parser.add_argument('--output', '-o', dest = 'output_file', type = str)
  103. parser.add_argument( '--line-length', '-l', dest = 'line_len', type=int)
  104. parser.add_argument('--paragraph-spaces', '-p', dest = 'indent_len', type=int)
  105. argv = parser.parse_args (sys.argv[1:])
  106.  
  107. if(argv.input_file == None):
  108. filein = sys.stdin
  109. else:
  110. filein = open(argv.input_file, 'r')
  111.  
  112. if(argv.output_file == None):
  113. fileout = sys.stdout
  114. else:
  115. fileout = open(argv.output_file, 'w')
  116.  
  117. if(argv.line_len == None or argv.indent_len==None):
  118. print ("Wrong arguments")
  119. exit(0)
  120.  
  121. inputtext = ""
  122. for line in filein.readlines():
  123. inputtext += line + '\n'
  124.  
  125. print(reformat(inputtext, argv.line_len, argv.indent_len), file = fileout)
  126.  
  127. filein.close()
  128. fileout.close()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement