protected static function wrap ($in, $data, $tag) {
		$data  = static::smart_array_merge(is_array($in) ? $in : ['in' => $in], is_array($data) ? $data : []);
		$in    = $attributes = '';
		$level = 1;
		if (isset($data['level'])) {
			$level = $data['level'];
			unset($data['level']);
		}
		static::pre_processing($tag, $data);
		if (!static::data_prepare($data, $tag, $in, $attributes)) {
			return false;
		}
		if (
			!$in &&
			$in !== 0 &&
			$in !== '0'
		) {
			$in = '';
		} elseif (
			$level &&
			(
				strpos($in, "\n") !== false ||
				strpos($in, '<') !== false
			)
		) {
			$in = "\n".static::level("$in\n", $level);
		}
		return "<$tag$attributes>$in</$tag>".($level ? "\n" : '');
	}