pug-php/twig

View on GitHub
README.md

Summary

Maintainability
Test Coverage
# PugToTwig

[![Latest Stable Version](https://poser.pugx.org/pug/twig/v/stable.png)](https://packagist.org/packages/pug/twig)
[![Build Status](https://travis-ci.org/pug-php/twig.svg?branch=master)](https://travis-ci.org/pug-php/twig)
[![Test Coverage](https://codeclimate.com/github/pug-php/twig/badges/coverage.svg)](https://codeclimate.com/github/pug-php/twig/coverage)
[![StyleCI](https://styleci.io/repos/112490740/shield?branch=master)](https://styleci.io/repos/112490740)

This package can convert basic pug codes into **Twig** code. Caution,
this package should not be used to handle **Pug** templates in Symfony,
the right way to do it is to use
[pug-symfony](https://github.com/pug-php/pug-symfony)
and to either polyfill Twig expressions only or delegate expression
handle to the **Twig** code parser.

This package can help you moving from **Pug** to **Twig** by generating
equivalent code or can be used to create a **Pug** input interface
to insert **Twig** templates in an existing application. These are
the only kind of business you should handle with this package.

For a full-featured **Pug** template engine in **Symfony**
[pug-symfony](https://github.com/pug-php/pug-symfony)
is what you need. If you miss a feature, ask in the issues, there
probably already exists a way to do the same, else we'll try
to add it.

## Instalation

First install composer if you have not: https://getcomposer.org/

Then run the following command:
```shell
composer require pug/twig
```

Or if you installed composer locally:
```shell
php composer.phar require pug/twig
```

Extension for Phug/Pug-php to output Twig (PHP pug to twig converter)

**my-pug-input.pug**:
```pug
ul#users
  - for user in users
    li.user
      // comment
      = user.name
      | Email: #{user.email}
      a(href=user.url) Home page
```

**index.php**:
```php
include 'vendor/autoload.php';

echo PugToTwig::convert(file_get_contents('my-pug-input.pug'));
```

Will output:
```twig
<ul id="users">
  {% for user in users %}
    <li class="user">
      {#  comment #}
      {{ user.name | e }}
      Email: {{ user.email | e }}
      <a href="{{ user.url | e }}">Home page</a>
    </li>
  {% endfor %}
</ul>
```

(indentation not guaranteed).

Some features such as mixins could output PHP that you would need
to evaluate:

```
$html = eval('?>' . PugToTwig::convert($pugCode));
```

Warning: you should be sure you don't let user input appears
between `<?php` and `?>`. It should not happen easily because
expressions and codes are turned into **Twig** code that the
PHP `eval` will just ignore, but be careful.

### Not supported features:

- **Mixins with dynamic names**
- **Mixins arguments**: de facto, argument display will become
Twig interpolation and Twig can't handle pug mixins, so
mixins are evaluated before Twig will evaluate code/expressions.