<commit_before>#!/usr/bin/env python
# -*- coding: utf-8 -*-

# script to produce rst file from program's help output.

from __future__ import unicode_literals
import sys
import re
import argparse

arg_indent = ' ' * 21

def help2man(infile):
    # We assume that first line is usage line like this:
    #
    # Usage: nghttp [OPTIONS]... URI...
    #
    # The second line is description of the command.  Multiple lines
    # are permitted.  The blank line signals the end of this section.
    # After that, we parses positional and optional arguments.
    #
    # The positional argument is enclosed with < and >:
    #
    # <PRIVATE_KEY>
    #
    # We may describe default behavior without any options by encoding
    # ( and ):
    #
    # (default mode)
    #
    # "Options:" is treated specially and produces "OPTIONS" section.
    # We allow subsection under OPTIONS.  Lines not starting with (, <
    # and Options: are treated as subsection name and produces section
    # one level down:
    #
    # TLS/SSL:
    #
    # The above is an example of subsection.
    #
    # The description of arguments must be indented by len(arg_indent)
    # characters.  The default value should be placed in separate line
    # and should be start with "Default: " after indentation.

    line = infile.readline().strip()
    m = re.match(r'^Usage: (.*)', line)
    if not m:
        print 'usage line is invalid.  Expected following lines:'
        print 'Usage: cmdname ...'
        sys.exit(1)
    synopsis = m.group(1).split(' ', 1)
    if len(synopsis) == 2:
        cmdname, args = synopsis
    else:
        cmdname, args = synopsis[0], ''

    description = []
    for line in infile:
        line = line.strip()
        if not line:
            break
        description.append(line)

    print '''
{cmdname}(1)
{cmdnameunderline}

SYNOPSIS
--------

**{cmdname}** {args}

DESCRIPTION
-----------

{description}
'''.format(cmdname=cmdname, args=args,
           cmdnameunderline='=' * (len(cmdname) + 3),
           synopsis=synopsis, description=format_text('\n'.join(description)))

    in_arg = False

    for line in infile:
        line = line.rstrip()

        if not line.strip() and in_arg:
            print ''
            continue
        if line.startswith('   ') and in_arg:
            if not line.startswith(arg_indent):
                sys.stderr.write('warning: argument description is not indented correctly.  We need {} spaces as indentation.'.format(len(arg_indent)))
            print '{}'.format(format_arg_text(line[len(arg_indent):]))
            continue

        if in_arg:
            print ''
            in_arg = False

        if line == 'Options:':
            print 'OPTIONS:'
            print '--------'
            print ''
            continue

        if line.startswith('  <'):
            # positional argument
            m = re.match(r'^(?:\s+)([a-zA-Z0-9-_<>]+)(.*)', line)
            argname, rest = m.group(1), m.group(2)
            print '.. describe:: {}'.format(argname)
            print ''
            print '{}'.format(format_arg_text(rest.strip()))
            in_arg = True
            continue

        if line.startswith('  ('):
            # positional argument
            m = re.match(r'^(?:\s+)(\([a-zA-Z0-9-_<> ]+\))(.*)', line)
            argname, rest = m.group(1), m.group(2)
            print '.. describe:: {}'.format(argname)
            print ''<commit_msg>help2rst.py: Update number of indentation<commit_after>#!/usr/bin/env python
# -*- coding: utf-8 -*-

# script to produce rst file from program's help output.

from __future__ import unicode_literals
import sys
import re
import argparse

arg_indent = ' ' * 14

def help2man(infile):
    # We assume that first line is usage line like this:
    #
    # Usage: nghttp [OPTIONS]... URI...
    #
    # The second line is description of the command.  Multiple lines
    # are permitted.  The blank line signals the end of this section.
    # After that, we parses positional and optional arguments.
    #
    # The positional argument is enclosed with < and >:
    #
    # <PRIVATE_KEY>
    #
    # We may describe default behavior without any options by encoding
    # ( and ):
    #
    # (default mode)
    #
    # "Options:" is treated specially and produces "OPTIONS" section.
    # We allow subsection under OPTIONS.  Lines not starting with (, <
    # and Options: are treated as subsection name and produces section
    # one level down:
    #
    # TLS/SSL:
    #
    # The above is an example of subsection.
    #
    # The description of arguments must be indented by len(arg_indent)
    # characters.  The default value should be placed in separate line
    # and should be start with "Default: " after indentation.

    line = infile.readline().strip()
    m = re.match(r'^Usage: (.*)', line)
    if not m:
        print 'usage line is invalid.  Expected following lines:'
        print 'Usage: cmdname ...'
        sys.exit(1)
    synopsis = m.group(1).split(' ', 1)
    if len(synopsis) == 2:
        cmdname, args = synopsis
    else:
        cmdname, args = synopsis[0], ''

    description = []
    for line in infile:
        line = line.strip()
        if not line:
            break
        description.append(line)

    print '''
{cmdname}(1)
{cmdnameunderline}

SYNOPSIS
--------

**{cmdname}** {args}

DESCRIPTION
-----------

{description}
'''.format(cmdname=cmdname, args=args,
           cmdnameunderline='=' * (len(cmdname) + 3),
           synopsis=synopsis, description=format_text('\n'.join(description)))

    in_arg = False

    for line in infile:
        line = line.rstrip()

        if not line.strip() and in_arg:
            print ''
            continue
        if line.startswith('   ') and in_arg:
            if not line.startswith(arg_indent):
                sys.stderr.write('warning: argument description is not indented correctly.  We need {} spaces as indentation.\n'.format(len(arg_indent)))
            print '{}'.format(format_arg_text(line[len(arg_indent):]))
            continue

        if in_arg:
            print ''
            in_arg = False

        if line == 'Options:':
            print 'OPTIONS:'
            print '--------'
            print ''
            continue

        if line.startswith('  <'):
            # positional argument
            m = re.match(r'^(?:\s+)([a-zA-Z0-9-_<>]+)(.*)', line)
            argname, rest = m.group(1), m.group(2)
            print '.. describe:: {}'.format(argname)
            print ''
            print '{}'.format(format_arg_text(rest.strip()))
            in_arg = True
            continue

        if line.startswith('  ('):
            # positional argument
            m = re.match(r'^(?:\s+)(\([a-zA-Z0-9-_<> ]+\))(.*)', line)
            argname, rest = m.group(1), m.group(2)
            print '.. describe:: {}'.format(argname)
            print ''
{'fraction_non_alphanumeric': 0.13268561484918792, 'fraction_numerical': 0.005655452436194895, 'mean_word_length': 2.0157411456055967, 'pattern_counts': {'":': 0, '<': 15, '<?xml version=': 0, '>': 11, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '2911764', 'n_tokens_mistral': 2101, 'n_tokens_neox': 2017, 'n_words': 606}