==================
If
==================

<html>
  {% if data.url != blank %}
    hello
  {% endif %}
</html>

---
  (program
   (template_content)
   (if_statement
    condition: (predicate
      left: (access
        receiver: (identifier)
        property: (identifier))
      right: (identifier))
    consequence: (block
      (template_content)))
   (template_content))

==================
If Contains
==================

<html>
  {% if product.tags contains 'healing' %}
    This potion contains restorative properties.
  {% endif %}
</html>

---
  (program
   (template_content)
   (if_statement
    condition: (predicate
      left: (access
        receiver: (identifier)
        property: (identifier))
      right: (string))
    consequence: (block
      (template_content)))
   (template_content))

==================
If Elsif Else
==================

<html>
  {%- if program contains 'list' -%}
    <div class="collection-hero-{{ product.title }}">
      {{ product.color }}
    </div>
  {% elsif sections.settings.grid == 10 %}
    <div class="page -header text-center">
      {% render "thing" %}
    </div>
  {%- else -%}
    {%- assign limit = 16 -%}
    <div class="collection-hero-{{ limit }}">
  {%- endif -%}
</html>

---
  (program
   (template_content)
   (if_statement
    condition: (predicate
      left: (identifier)
      right: (string))
    consequence: (block
      (template_content)
      (access
       receiver: (identifier)
       property: (identifier))
      (template_content)
      (access
       receiver: (identifier)
       property: (identifier))
      (template_content))
    alternative: (elsif_clause
      condition: (predicate
        left: (access
          receiver: (access
            receiver: (identifier)
            property: (identifier))
          property: (identifier))
        right: (number))
      (block
       (template_content)
       (render_statement
        file: (string))
       (template_content)))
    alternative: (else_clause
        (block
         (assignment_statement
          variable_name: (identifier)
          value: (number))
         (template_content)
         (identifier)
         (template_content))))
(template_content))

==================
Unless
==================

<html>
  {% unless product.has_only_default_variant %}
    {% assign title = product.name %}
    <div>{{ title }}</div>
  {% endunless %}
</html>

---
  (program
   (template_content)
   (unless_statement
    condition:
    (access
     receiver: (identifier)
     property: (identifier))
    consequence: (block
      (assignment_statement
       variable_name: (identifier)
       value:
       (access
        receiver: (identifier)
        property: (identifier)))
      (template_content)
      (identifier)
      (template_content)))
   (template_content))

==================
Case
==================

<html>
  {% case product.type %}
    {% when "Love" or "whateva" %}
      <div class="collection-{{ product.title }}">
        {{ product.color }}
      </div>
    {% when 'Strength' %}
      {% render "file" %}
      <p>This is a strength or health potion.</p>
    {% when 'Strength', 'dank', 'frank' %}
      {% render "file" %}
      <p>This is a strength or health potion.</p>
    {% else %}
      {% render "file" %}
      <div>content</div>
  {% endcase %}
</html>

---
  (program
   (template_content)
   (case_statement
    receiver: (access
      receiver: (identifier)
      property: (identifier))
    conditions: (block
      (when_clause
       condition: (predicate
         left: (string)
         right: (string))
       consequence: (block
         (template_content)
         (access
          receiver: (identifier)
          property: (identifier))
         (template_content)
         (access
          receiver: (identifier)
          property: (identifier))
         (template_content)))
      (when_clause
       condition: (argument_list
         (string))
       consequence: (block
         (render_statement
          file: (string))
         (template_content)))
      (when_clause
       condition: (argument_list
         (string)
         (string)
         (string))
       consequence: (block
         (render_statement
          file: (string))
         (template_content))))
  alternative: (else_clause
      (block
       (render_statement
        file: (string))
       (template_content))))
(template_content))

==================
Empty Case
==================

<html>
  {% case product.type %}
  {% endcase %}
</html>

---
  (program
   (template_content)
   (case_statement
    receiver: (access
      receiver: (identifier)
      property: (identifier)))
   (template_content))

==================
For Loop
==================

<html>
  {% for product in collection.products -%}
    {% assign name = product.title %}
    <div>{{ name }}</div>
    {% echo name %}
  {%- endfor %}
</html>

---
  (program
   (template_content)
   (for_loop_statement
    item: (identifier)
    iterator: (access
      receiver: (identifier)
      property: (identifier))
    body: (block
      (assignment_statement
       variable_name: (identifier)
       value: (access
         receiver: (identifier)
         property: (identifier)))
      (template_content)
      (identifier)
      (template_content)
      (echo_statement
       (identifier))))
   (template_content))

==================
For Loop wtih Offest
==================

<html>
  {% for product in collection.products offest: 2 -%}
    {% assign name = product.title %}
    {% if name != blank %}
      {% continue %}
    {% endif %}
    <div>{{ name }}</div>
    {% echo name %}
  {%- endfor %}
</html>

---

  (program
   (template_content)
   (for_loop_statement
    item: (identifier)
    iterator: (access
      receiver: (identifier)
      property: (identifier))
    modifier: (argument_list
      (argument
       key: (identifier)
       value: (number)))
    body: (block
      (assignment_statement
       variable_name: (identifier)
       value: (access
         receiver: (identifier)
         property: (identifier)))
      (if_statement
       condition: (predicate
         left: (identifier)
         right: (identifier))
       consequence: (block
         (continue_statement)))
      (template_content)
      (identifier)
      (template_content)
      (echo_statement
       (identifier))))
(template_content))

==================
For Loop wtih Range
==================

<html>
  {% for i in (1..upper_limit) -%}
    {{ i }}
    {% break %}
  {%- endfor %}
</html>

---
  (program
   (template_content)
   (for_loop_statement
    item: (identifier)
    iterator: (range
      start: (number)
      end: (identifier))
    body: (block
      (identifier)
    (break_statement)))
   (template_content))

==================
For Loop wtih Else
==================

<html>
  {% for i in array -%}
    {% assign name = i %}
    <div>{{ name }}</div>
    {% echo name %}
  {% else %}
    {% assign name = "cool" %}
    <div>{{ name }}</div>
    {% echo name %}
  {%- endfor %}
</html>

---
  (program
   (template_content)
   (for_loop_statement
    item: (identifier)
    iterator: (identifier)
    body: (block
      (assignment_statement
       variable_name: (identifier)
       value: (identifier))
      (template_content)
      (identifier)
      (template_content)
      (echo_statement
       (identifier)))
    alternative: (else_clause
      (block
       (assignment_statement
        variable_name: (identifier)
        value: (string))
       (template_content)
       (identifier)
       (template_content)
       (echo_statement
        (identifier)))))
(template_content))

==================
For Loop with Cycle
==================

<html>
  {% for product in collection.products -%}
    {% cycle "group": "one", string, access.string %}
  {%- endfor %}
</html>

---
  (program
   (template_content)
    (for_loop_statement
     item: (identifier)
     iterator: (access
       receiver: (identifier)
       property: (identifier))
     body: (block
       (cycle_statement
        group_name: (string)
        group_item: (string)
        group_item: (identifier)
        group_item: (access
          receiver: (identifier)
          property: (identifier)))))
   (template_content))

==================
Nested For / If
==================

<html>
  {% for i in list %}
    {% if i != blank %}
      {% for j in list %}
        <div>{{ i }}</div>
      {% endfor %}
    {% else %}
      <div>{{ i }}</div>
    {% endif %}
  {% endfor %}
</html>

---
  (program
   (template_content)
   (for_loop_statement
    item: (identifier)
    iterator: (identifier)
    body: (block
      (if_statement
       condition:
       (predicate
        left: (identifier)
        right: (identifier))
       consequence: (block
         (for_loop_statement
          item: (identifier)
          iterator: (identifier)
          body: (block
            (template_content)
            (identifier)
            (template_content))))
       alternative: (else_clause
         (block
          (template_content)
          (identifier)
          (template_content))))))
(template_content))

==================
Capture
==================

<html>
  {%- capture title -%}
    {% if show_up_title -%}
      Upcase title: {{ up_title }}
    {%- else -%}
      Downcase title: {{ down_title }}
    {%- endif %}
  {%- endcapture %}
</html>

---
  (program
   (template_content)
   (capture_statement
    variable: (identifier)
    value: (block
      (if_statement
       condition: (identifier)
       consequence: (block
         (template_content)
          (identifier))
       alternative: (else_clause
         (block
          (template_content)
          (identifier))))))
   (template_content))

==================
Tablerow
==================

<html>
  {%- tablerow item in arr -%}
    {{ item }}
  {%- endtablerow %}
</html>

---
  (program
   (template_content)
   (tablerow_statement
    item: (identifier)
    iterator: (identifier)
    body: (block
      (identifier)))
   (template_content))

==================
Paginate
==================

<html>
  {% paginate collection.products by 3, window_size: 1 %}
    {% for product in collection.products -%}
      {{ product.title }}
    {%- endfor %}
    {{- paginate | default_pagination }}
  {% endpaginate %}
</html>

---
  (program
   (template_content)
   (paginate_statement
    item: (access
      receiver: (identifier)
      property: (identifier))
    iterator: (number)
    modifier: (argument_list
      (argument
       key: (identifier)
       value: (number)))
    body: (block
      (for_loop_statement
       item: (identifier)
       iterator: (access
         receiver: (identifier)
         property: (identifier))
       body: (block
         (access
          receiver: (identifier)
          property: (identifier))))
      (filter
       body: (identifier)
       name: (identifier))))
(template_content))

==================
Form
==================

{% form 'storefront_password' %}
  <!-- form content -->
{% endform %}

---
(program
  (form_statement
   type: (string)
   (template_content))
 (template_content))

==================
Form with argument
==================

{% form 'form_type', return_to: string %}
  content
{% endform %}

---
(program
 (form_statement
  type: (string)
  parameters: (argument_list
    (argument
     key: (identifier)
     value: (identifier)))
  (template_content))
 (template_content))

==================
Form with many arguments
==================

{% form "product", product, id: 'custom-id', class: 'custom-class', data-example: '100' %}
  {{ somedata }}
{% endform %}

---
(program
 (form_statement
  (string)
  (argument_list
   (identifier)
   (argument
    (identifier)
    (string))
   (argument
    (identifier)
    (string))
   (argument
    (identifier)
    (string)))
  (identifier))
 (template_content))

==================
Javascript
==================

{% javascript %}
  {% comment %}
    js is cool
  {% endcomment %}
  let x = 10;
  let y = x + x;
  {% comment %} ! {% endcomment %}
{% endjavascript %}

---
(program
 (javascript_statement
  (comment)
  (js_content)
  (comment))
 (template_content))

==================
Schema
==================

{% schema %}
  {
    "property" : "value"
  }
{% endschema %}

---
(program
 (schema_statement
  (json_content))
 (template_content))

==================
Style
==================

{% style %}
  .el{ display: flex; }
{% endstyle %}

---
(program
  (style_statement
   (style_content))
 (template_content))

==================
Style with Liquid
==================

{% style %}
  .el{
    display: {{ something.style }};
    font-size: 14;
  }
{% endstyle %}

---
(program
  (style_statement
    (style_content)
    (access
      (identifier)
      (identifier))
    (style_content))
  (template_content))

==================
If with Nested Output in Include
==================

{% if page.my_variable %}
  {% include {{ page.my_variable }} %}
{% endif %}

---
(program
 (if_statement
  condition: (access
    receiver: (identifier)
    property: (identifier))
  consequence: (block
    (include_statement
     (access
      receiver: (identifier)
      property: (identifier)))))
 (template_content))

