[PATCH 1/1] Refactor class and main module per comments

Dannie Huang danxue.huang at gmail.com
Fri Aug 3 02:44:21 UTC 2018


---
 README.md                |  4 +-
 gen_rst_from_makedoc.py  | 31 +++++----------
 makedoc2rst.py           | 99 ++++++++++++++++++++++++++++++++++++++++++++++++
 makedoc2rst_converter.py | 85 -----------------------------------------
 strcmp.rst               | 47 -----------------------
 5 files changed, 110 insertions(+), 156 deletions(-)
 create mode 100644 makedoc2rst.py
 delete mode 100644 makedoc2rst_converter.py
 delete mode 100644 strcmp.rst

diff --git a/README.md b/README.md
index 8ebb224..64a3ba9 100644
--- a/README.md
+++ b/README.md
@@ -1,2 +1,2 @@
-# NewlibMarkup2SphinxConvertorPrivate
-(PRIVATE) This repo contains code for NewlibMarkup2SphinxConvertorPrivate.
+# NewlibMarkup2SphinxConverter
+This repo contains code for NewlibMarkup2SphinxConverter
diff --git a/gen_rst_from_makedoc.py b/gen_rst_from_makedoc.py
index 4100756..8e4d9b0 100755
--- a/gen_rst_from_makedoc.py
+++ b/gen_rst_from_makedoc.py
@@ -30,7 +30,7 @@
 #
 
 import argparse
-import makedoc2rst_converter
+import makedoc2rst
 
 
 def get_parser():
@@ -38,37 +38,24 @@ def get_parser():
         description='Convert newlib style markup to rst markup'
     )
     parser.add_argument(
-        '-s',
-        '--source_file_path',
+        '-c',
+        '--c_file_path',
         type=str,
-        help='Path of source file with newlib style comments',
+        help='Path of c source file with newlib style comments',
     )
     parser.add_argument(
-        '-d',
-        '--dest_file_path',
+        '-r',
+        '--rst_file_path',
         type=str,
         help='Path of destination file with rst markup',
     )
     return parser
 
 
-def main(source_file_dir, dest_file_dir):
-    with open(source_file_dir, 'r') as source_file, open(dest_file_dir, 'w') as dest_file:
-        file_content = source_file.read()
-
-        makedoc2rst = makedoc2rst_converter.makedoc2rst_converter()
-        # Get comments inside of /* */
-        comments = makedoc2rst.extract_comments(file_content)
-
-        # Parse comments
-        command_text_dict = makedoc2rst.extract_command_and_text(comments)
-
-        # Process text based on command type
-        rst_str = makedoc2rst.generate_rst(command_text_dict)
-
-        dest_file.write(rst_str)
+def main(c_file, rst_file):
+    makedoc2rst.makedoc2rst(c_file, rst_file).convert()
 
 
 if __name__ == '__main__':
     args = get_parser().parse_args()
-    main(args.source_file_path, args.dest_file_path)
+    main(args.c_file_path, args.rst_file_path)
diff --git a/makedoc2rst.py b/makedoc2rst.py
new file mode 100644
index 0000000..d887323
--- /dev/null
+++ b/makedoc2rst.py
@@ -0,0 +1,99 @@
+#!/usr/bin/env python
+#
+# RTEMS Tools Project (http://www.rtems.org/)
+# Copyright 2018 Danxue Huang (danxue.huang at gmail.com)
+# All rights reserved.
+#
+# This file is part of the RTEMS Tools package in 'rtems-tools'.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+#
+# 1. Redistributions of source code must retain the above copyright notice,
+# this list of conditions and the following disclaimer.
+#
+# 2. Redistributions in binary form must reproduce the above copyright notice,
+# this list of conditions and the following disclaimer in the documentation
+# and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+
+import re
+import rst
+
+
+class makedoc2rst():
+    """ Convert c source file with makedoc markup to rst markup file
+    c_file: c source file containing block comments (/* */) at the beginning
+    rst_file: destination file with rst markup
+    """
+    def __init__(self, c_file, rst_file):
+        self.c_file = c_file
+        self.rst_file = rst_file
+
+    def convert(self):
+        """ Implementation of converting c file to rst file """
+        rst_str = ''
+        with open(self.c_file, 'r') as c_file:
+            # Get comments inside of /* */
+            comments = self._extract_comments(c_file.read())
+            # Parse comments
+            command_text_dict = self._extract_command_and_text(comments)
+            # Process text based on command type
+            for command, text in command_text_dict.items():
+                rst_str += rst.get_command_processor(command)(command, text)
+
+        with open(self.rst_file, 'w') as rst_file:
+            rst_file.write(rst_str)
+        return rst_str
+
+    def _is_command(self, s):
+        """
+        A command is a single word of at least 3 characters, all uppercase
+        :param s: input string
+        :return: True if s is a single command, otherwise False
+        """
+        return True if re.match('^[A-Z_]{3,}\s*$', s) else False
+
+    def _extract_comments(self, content):
+        """
+        Extract content inside of /* */
+        :param content: input file content
+        :return: extracted comments
+        """
+        comments = ''
+        comments_match = re.match('/\*(\*(?!/)|[^*])*\*/', content)
+        if comments_match:
+            wrapped_comments = comments_match.group()
+            comments = wrapped_comments.lstrip('/*').rstrip('*/').lstrip().rstrip()
+        return comments
+
+    def _extract_command_and_text(self, comments):
+        """
+        Extract command and text from input string content
+        :param comments: input string containing command and text
+        :return: a tuple containing command and text
+        """
+        command = ''
+        text = ''
+        command_text_dict = {}
+        for line in comments.splitlines():
+            if self._is_command(line):
+                if command and text:
+                    command_text_dict[command] = text
+                command = line.rstrip()
+                text = ''
+            else:
+                text += line + '\n'
+        return command_text_dict
diff --git a/makedoc2rst_converter.py b/makedoc2rst_converter.py
deleted file mode 100644
index e4d2d72..0000000
--- a/makedoc2rst_converter.py
+++ /dev/null
@@ -1,85 +0,0 @@
-#!/usr/bin/env python
-#
-# RTEMS Tools Project (http://www.rtems.org/)
-# Copyright 2018 Danxue Huang (danxue.huang at gmail.com)
-# All rights reserved.
-#
-# This file is part of the RTEMS Tools package in 'rtems-tools'.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions are met:
-#
-# 1. Redistributions of source code must retain the above copyright notice,
-# this list of conditions and the following disclaimer.
-#
-# 2. Redistributions in binary form must reproduce the above copyright notice,
-# this list of conditions and the following disclaimer in the documentation
-# and/or other materials provided with the distribution.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
-# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-# POSSIBILITY OF SUCH DAMAGE.
-#
-
-import re
-import rst
-
-
-class makedoc2rst_converter():
-    @staticmethod
-    def is_command(s):
-        """
-        A command is a single word of at least 3 characters, all uppercase
-        :param s: input string
-        :return: True if s is a single command, otherwise False
-        """
-        return True if re.match('^[A-Z_]{3,}\s*$', s) else False
-
-    @staticmethod
-    def extract_comments(content):
-        """
-        Extract content inside of /* */
-        :param content: input file content
-        :return: extracted comments
-        """
-        comments = ''
-        comments_match = re.match('/\*(\*(?!/)|[^*])*\*/', content)
-        if comments_match:
-            wrapped_comments = comments_match.group()
-            comments = wrapped_comments.lstrip('/*').rstrip('*/').lstrip().rstrip()
-        return comments
-
-    @staticmethod
-    def extract_command_and_text(content):
-        """
-        Extract command and text from input string content
-        :param content: input string containing command and text
-        :return: a tuple containing command and text
-        """
-        command = ''
-        text = ''
-        command_text_dict = {}
-        for line in content.splitlines():
-            if makedoc2rst_converter.is_command(line):
-                if command and text:
-                    command_text_dict[command] = text
-                command = line.rstrip()
-                text = ''
-            else:
-                text += line + '\n'
-        return command_text_dict
-
-    @staticmethod
-    def generate_rst(command_text_dict):
-        rst_str = ''
-        for command, text in command_text_dict.items():
-            rst_str += rst.get_command_processor(command)(command, text)
-        return rst_str
diff --git a/strcmp.rst b/strcmp.rst
deleted file mode 100644
index c1dc543..0000000
--- a/strcmp.rst
+++ /dev/null
@@ -1,47 +0,0 @@
-.. strcmp:
-
-strcmp - Character string compare
------------------------------------------
-.. index:: strcmp
-.. index:: character string compare
-
-**INDEX:**
-
-	strcmp
-
-
-
-**SYNOPSIS:**
-
-.. code-block:: c
-
-	#include <string.h>
-	int strcmp(const char *<[a]>, const char *<[b]>);
-
-
-
-**DESCRIPTION:**
-
-	<<strcmp>> compares the string at <[a]> to
-	the string at <[b]>.
-
-
-
-**RETURNS:**
-
-	If <<*<[a]>>> sorts lexicographically after <<*<[b]>>>,
-	<<strcmp>> returns a number greater than zero.  If the two
-	strings match, <<strcmp>> returns zero.  If <<*<[a]>>>
-	sorts lexicographically before <<*<[b]>>>, <<strcmp>> returns a
-	number less than zero.
-
-
-
-**PORTABILITY:**
-
-<<strcmp>> is ANSI C.
-
-<<strcmp>> requires no supporting OS subroutines.
-
-
-
-- 
2.7.4



More information about the devel mailing list