# brainhug
[](https://travis-ci.com/sn99/brainhug)
[](https://ci.appveyor.com/project/sn99/brainhug)
[](https://dependabot.com)
[](https://crates.io/crates/brainhug)
[](https://crates.io/crates/brainhug)
[](https://docs.rs/brainhug)
`brainhug` is a crate that is used to interpret brainf*ck code to any other language
#### Current languages covered are :
- [x] C
- [x] C++
- [x] C#
- [x] Python
- [x] Golang
- [x] Haskell
- [x] Lua
#### Why the name brainhug ?
Inspired from [link](https://lists.freedesktop.org/archives/dri-devel/2018-November/198581.html)
## Usage
Add this to your `Cargo.toml`:
```toml
[dependencies]
brainhug = "*"
```
and this to your crate root:
```rust
extern crate brainhug;
use brainhug::Lang;
```
## Contributing
Read [contributing](CONTRIBUTING.md) for Details
## Example
```rust
extern crate brainhug;
use brainhug::Lang;
fn main() {
// will print `Hello World!`
let input = "++++++++[>++++[>++>+++>+++>+<<<<-]>+>+>->>+[<]<-]>>.>---.+++++++..+++.>>.<-.<.+++.------.--------.>>+.>++.";
// `brainhug::generate` will generate a `String`
println!("{}", brainhug::generate(Lang::C, input));
}
```
#### It will produce
```c
#include "stdio.h"
int main() {
char tape[20000] = {0};
char *ptr = tape;
*ptr += 8;
while (*ptr) {
ptr += 1;
*ptr += 4;
while (*ptr) {
ptr += 1;
*ptr += 2;
ptr += 1;
*ptr += 3;
ptr += 1;
*ptr += 3;
ptr += 1;
*ptr += 1;
ptr -= 4;
*ptr -= 1;
}
ptr += 1;
*ptr += 1;
ptr += 1;
*ptr += 1;
ptr += 1;
*ptr -= 1;
ptr += 2;
*ptr += 1;
while (*ptr) {
ptr -= 1;
}
ptr -= 1;
*ptr -= 1;
}
ptr += 2;
putchar(*ptr);
ptr += 1;
*ptr -= 3;
putchar(*ptr);
*ptr += 7;
putchar(*ptr);
putchar(*ptr);
*ptr += 3;
putchar(*ptr);
ptr += 2;
putchar(*ptr);
ptr -= 1;
*ptr -= 1;
putchar(*ptr);
ptr -= 1;
putchar(*ptr);
*ptr += 3;
putchar(*ptr);
*ptr -= 6;
putchar(*ptr);
*ptr -= 8;
putchar(*ptr);
ptr += 2;
*ptr += 1;
putchar(*ptr);
ptr += 1;
*ptr += 2;
putchar(*ptr);
}
```
## License
Licensed under
* MIT license ([LICENSE.md](LICENSE.md) or http://opensource.org/licenses/MIT)