12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- #!/usr/bin/python
- #
- # Copyright (c) 2013-2021 Winlin
- #
- # SPDX-License-Identifier: MIT
- #
- #################################################################################
- # to stat the code and comments lines
- #################################################################################
- import sys
- def trace(msg):
- print msg
- pass
- def info(msg):
- print msg
- pass
- def verbose(msg):
- #print msg
- pass
- def process(f, code_file):
- info("process file success")
- (stat_code, stat_block_comments, stat_line_comments) = (0, 0, 0)
- is_block_comments = False
- is_line_comments = False
- for line in f.readlines():
- line = line.strip()
- if is_block_comments:
- if "*/" in line:
- verbose("[block][end] %s"%line)
- is_block_comments = False
- is_line_comments = False
- else:
- verbose("[block][cont] %s"%line)
- stat_block_comments += 1
- continue
- if line.startswith("/*"):
- verbose("[block][start] %s"%line)
- is_block_comments = True
- is_line_comments = False
- stat_block_comments += 1
- # inline block comments
- if is_block_comments:
- if "*/" in line:
- verbose("[block][end] %s"%line)
- is_block_comments = False
- is_line_comments = False
- continue
- if line.startswith("//"):
- verbose("[line] %s"%line)
- is_block_comments = False
- is_line_comments = True
- stat_line_comments += 1
- continue
- verbose("[code] %s"%line)
- is_block_comments = False
- is_line_comments = False
- stat_code += 1
- total = stat_code + stat_block_comments + stat_line_comments
- comments = stat_block_comments + stat_line_comments
- trace("total:%s code:%s comments:%s block:%s line:%s file:%s"%(total, stat_code, comments, stat_block_comments, stat_line_comments, code_file))
- return (0, total, stat_code, comments, stat_block_comments, stat_line_comments, code_file)
- def do_stat(code_file):
- f = None
- try:
- f = open(code_file, "r")
- info("open file success");
- return process(f, code_file)
- finally:
- if f is not None:
- f.close()
- info("close file success")
- return (-1, 0, 0, 0, 0, 0, None)
-
- code_file = None
- if __name__ == "__main__":
- if len(sys.argv) <= 1:
- print "to stat the code and comments lines"
- print "Usage: python %s <code_file>"%(sys.argv[0])
- print " code_file: the code(header or source) file to stat"
- print "Example:"
- print " python %s src/core/srs_core.hpp"%(sys.argv[0])
- sys.exit(-1)
-
- code_file = sys.argv[1]
- info("stat %s"%(code_file))
- do_stat(code_file)
|