_state = { stack: {} element_aliases: {} element_modifier_aliases: {} block_modifier_aliases: {} element_alias_stack: () () element_modifier_alias_stack: () () block_modifier_alias_stack: () () } reset_state() _state.stack = {} _state.element_aliases = {} _state.element_modifier_aliases = {} _state.block_modifier_aliases ={} _state.element_alias_stack = () () _state.element_modifier_alias_stack = () () _state.block_modifier_alias_stack = () () push_level(level) push(_state.stack, level) set_element_alias(name, alias) _state.element_aliases[name] = alias get_element_alias(name) if name in _state.element_aliases return _state.element_aliases[name] else return name set_element_modifier_alias(name, alias) _state.element_modifier_aliases[name] = alias get_element_modifier_alias(name) if name in _state.element_modifier_aliases return _state.element_modifier_aliases[name] else return name set_block_modifier_alias(name, alias) _state.block_modifier_aliases[name] = alias get_block_modifier_alias(name) if name in _state.block_modifier_aliases return _state.block_modifier_aliases[name] else return name RV-Squash() {block} RV-Block(block_name) push(_block_name_stack, block_name) last_element_selector = null last_element_name = null last_bock_modifier_selector = null last_bock_modifier_name = null selector_list = () () .{block_name} {block} for level in _state.stack if level.type == 'RV-Block__Modifier' last_bock_modifier_name = block_name + '--' + level.name last_bock_modifier_selector = '.' + block_name + '.' + last_bock_modifier_name push(selector_list, { selector: last_bock_modifier_selector block_list: level.block_list }) else if level.type == 'RV-Element' name = get_element_alias(level.name) last_element_name = block_name + '__' + name element_selector = '.' + last_element_name if last_bock_modifier_selector != null element_selector = last_bock_modifier_selector + ' ' + element_selector last_element_selector = element_selector push(selector_list, { selector: last_element_selector block_list: level.block_list }) else if level.type == 'RV-Element__Modifier' if last_element_selector != null && last_element_name != null modifier_selector = '.' + last_element_name + '--' + level.name push(selector_list, { selector: last_element_selector + modifier_selector block_list: level.block_list }) reset_state() .{block_name} for item in selector_list if item != () & {item.selector} for block in item.block_list {block} RV-Element(element_name) if 'RV-Element' in called-from if lookup('block') != null push(_state.element_alias_stack, { name: element_name, block: block }) else for alias in _state.element_alias_stack set_element_alias(alias.name, element_name) push(element.block_list, alias.block) _state.element_alias_stack = () () push_level(element) RV-Element__Modifier(modifier_name) if 'RV-Element__Modifier' in called-from if lookup('block') != null push(_state.element_modifier_alias_stack, { name: modifier_name, block: block }) else modifier = { type: 'RV-Element__Modifier' name: modifier_name block_list: () } if lookup('block') != null push(modifier.block_list, block) for alias in _state.element_modifier_alias_stack if alias != () set_element_modifier_alias(alias.name, modifier_name) push(modifier.block_list, alias.block) _state.element_modifier_alias_stack = () () push_level(modifier) RV-Block__Modifier(modifier_name) if 'RV-Block__Modifier' in called-from if lookup('block') != null push(_state.block_modifier_alias_stack, { name: modifier_name, block: block }) else modifier = { type: 'RV-Block__Modifier' name: modifier_name block_list: () } if lookup('block') != null push(modifier.block_list, block) for alias in _state.block_modifier_alias_stack if alias != () set_block_modifier_alias(alias.name, modifier_name) push(modifier.block_list, alias.block) _state.block_modifier_alias_stack = () () push_level(modifier)