scriptgen 0.0.5
A collection of script generation helpers and templates.
License: MIT

[//]: # (Auto-generated: 2021-01-13T09:44:07.865904)

# scriptgen

[//]: # (badges)
[![Repo](https://img.shields.io/badge/repo-github-brightgreen)](https://github.com/Fopoon/scriptgen)
[![Version](https://img.shields.io/badge/version-0.0.5-brightgreen.svg)](https://github.com/Fopoon/scriptgen/releases)
[![PyPI](https://img.shields.io/pypi/v/scriptgen)](https://pypi.org/project/scriptgen/#history)
![PyPI - Python Version](https://img.shields.io/pypi/pyversions/scriptgen)
![PyPI - Status](https://img.shields.io/pypi/status/scriptgen)
[![PyPI - License](https://img.shields.io/pypi/l/scriptgen)](LICENSE.txt)
![PyPI - Format](https://img.shields.io/pypi/format/scriptgen)
[![Downloads](https://pepy.tech/badge/scriptgen)](https://pepy.tech/project/scriptgen)

A collection of script generation helpers and templates.

## Installation

```sh
pip install scriptgen
```

## Usage

```python
from scriptgen import StringBuilder


if __name__ == "__main__":
    # Create a StringBuilder instance.
    sb = StringBuilder()

    sb.wt("Hello ")  # write text "Hello "
    sb.wl("World!")  # write line "World!\n"

    print(str(sb))
```

```
Hello World!

```

<hr/>

```python
from scriptgen import StringBuilder

from scriptgen.templates.csharp import \
    csharp_usings, \
    csharp_namespace, \
    csharp_class, \
    csharp_method


if __name__ == "__main__":
    # Create a StringBuilder instance.
    sb = StringBuilder()

    # Write using statements.
    sb.wb(csharp_usings(
        "System"
    ))

    # Add a new line after the using statements.
    sb.nl()

    # Create a namespace StringBuilder instance.
    ns = csharp_namespace("Sample")

    # Create a class StringBuilder instance.
    c = csharp_class(
        class_name="Program",
        access_modifier="public"
    )

    # Create a method StringBuilder instance.
    m = csharp_method(
        method_name="Main",
        access_modifier="public static",
        return_type="int"
    )

    # Write the following lines inside the method.
    m.wl('Console.WriteLine("Hello World!");')
    m.wl("return 0;")

    c.wb(m)  # Write the method inside the class.
    ns.wb(c)  # Write the class inside the namespace.
    sb.wb(ns)  # Write the namespace.

    print(str(sb))

```

```csharp
using System;

namespace Sample
{
    public class Program
    {
        public static int Main()
        {
            Console.WriteLine("Hello World!");
            return 0;
        }
    }
}

```

<hr/>

```python
from scriptgen import StringBuilder

from scriptgen.templates.csharp import \
    csharp_autogen, \
    csharp_namespace, \
    csharp_class, \
    csharp_region


if __name__ == "__main__":
    # Get version from arguments..
    # i.e. python script.py -major 0 -minor 0 -patch 1
    major: int = 0
    minor: int = 0
    patch: int = 1

    # Create a StringBuilder instance.
    sb = StringBuilder()

    # Write timestamp.
    sb.wb(csharp_autogen())

    # Add a new line after the using statements.
    sb.nl()

    # Create a namespace StringBuilder instance.
    ns = csharp_namespace("Sample")

    # Create a class StringBuilder instance.
    c = csharp_class(
        class_name="BuildInfo",
        access_modifier="public static partial"
    )

    # Create a "Constants" region StringBuilder instance.
    r = csharp_region("Constants")

    # Write the following lines inside the "Constants" region.
    r.wl(f"public const int MAJOR = {major};")
    r.nl()
    r.wl(f"public const int MINOR = {minor};")
    r.nl()
    r.wl(f"public const int PATCH = {patch};")

    c.wb(r)  # Write the region inside the class.
    ns.wb(c)  # Write the class inside the namespace.
    sb.wb(ns)  # Write the namespace.

    print(str(sb))

```

```csharp
// Auto-generated: 2020-03-15T04:20:47.909851

namespace Sample
{
    public static partial class BuildInfo
    {
        #region Constants
        
        public const int MAJOR = 0;
        
        public const int MINOR = 0;
        
        public const int PATCH = 1;
        
        #endregion Constants
    }
}

```

<hr/>

Look at this [script](tools/gen_docs.py) to see its practical use case.

## Contribution

Suggestions and contributions are always welcome.
Make sure to read the [Contribution Guidelines](CONTRIBUTING.md) file for more information before submitting a `pull request`.

## License

`scriptgen` is released under the MIT License. See the [LICENSE](LICENSE.txt) file for details.


# Changelog

## v0.0.5
- Fixed multiple new lines in Windows.
- Added more C# templates.

## v0.0.4

- Added XML templates.

## v0.0.3

- Added index parameter in filter_func.
- Changed from current working path to file directory path in `gen_docs.py` script.

## v0.0.2

- Added default values for the builder classes.
- Added optional parameters.
- Exposed `CSharpBlockBuilder` class in `scriptgen.templates.csharp` package.
- Bug fixes.

## v0.0.1

- Added `IndentType`, `StringBuilder`, and `BlockBuilder` classes.
- Added `diff_lines`, `diff_text`, `interpolate_text`, `timestamp`, and `write_text_file` utility methods.
- Added C# and Markdown templates.
- Added tests for the utility methods, C# templates, and Markdown templates.
- Added `gen_docs.py` script and template files.