Răsfoiți Sursa

Merge pull request #11757 from mhilbrunner/doc_status_py27

doc_status.py Python 2.7 backwards compatibility & Windows support
Andreas Haas 7 ani în urmă
părinte
comite
a4cfec4e21
1 a modificat fișierele cu 14 adăugiri și 4 ștergeri
  1. 14 4
      doc/tools/doc_status.py

+ 14 - 4
doc/tools/doc_status.py

@@ -92,7 +92,7 @@ def validate_tag(elem, tag):
 
 
 def color(color, string):
-    if flags['c']:
+    if flags['c'] and terminal_supports_color():
         color_format = ''
         for code in colors[color]:
             color_format += '\033[' + str(code) + 'm'
@@ -106,6 +106,15 @@ ansi_escape = re.compile(r'\x1b[^m]*m')
 def nonescape_len(s):
     return len(ansi_escape.sub('', s))
 
+def terminal_supports_color():
+    p = sys.platform
+    supported_platform = p != 'Pocket PC' and (p != 'win32' or
+                                           'ANSICON' in os.environ)
+
+    is_a_tty = hasattr(sys.stdout, 'isatty') and sys.stdout.isatty()
+    if not supported_platform or not is_a_tty:
+        return False
+    return True
 
 ################################################################################
 #                                   Classes                                    #
@@ -135,8 +144,8 @@ class ClassStatusProgress:
             return self.to_colored_string()
 
     def to_colored_string(self, format='{has}/{total}', pad_format='{pad_described}{s}{pad_total}'):
-        ratio = self.described / self.total if self.total != 0 else 1
-        percent = round(100 * ratio)
+        ratio = float(self.described) / float(self.total) if self.total != 0 else 1
+        percent = int(round(100 * ratio))
         s = format.format(has=str(self.described), total=str(self.total), percent=str(percent))
         if self.described >= self.total:
             s = color('part_good', s)
@@ -219,6 +228,7 @@ class ClassStatus:
 
         return output
 
+    @staticmethod
     def generate_for_class(c):
         status = ClassStatus()
         status.name = c.attrib['name']
@@ -439,7 +449,7 @@ for row_i, row in enumerate(table):
         if cell_i == 0:
             row_string += table_row_chars[3] + cell + table_row_chars[3] * (padding_needed - 1)
         else:
-            row_string += table_row_chars[3] * math.floor(padding_needed / 2) + cell + table_row_chars[3] * math.ceil((padding_needed / 2))
+            row_string += table_row_chars[3] * int(math.floor(float(padding_needed) / 2)) + cell + table_row_chars[3] * int(math.ceil(float(padding_needed) / 2))
         row_string += table_column_chars
 
     print(row_string)