public function compile()
	{
		// can happen if it parses only comments/artifacts
		if (!count($this->msgid))
			return "";

		$str = "";
		if ($this->comments)
			$str .= implode(self::NEWLINE, $this->comments) . self::NEWLINE;

		if ($this->msgctxt)
			$str .= 'msgctxt "' . $this->msgctxt . '"' . self::NEWLINE;

		$included_blocks = ['msgid'];
		if ($this->msgstr_plural)
			$included_blocks[] = 'msgid_plural';
		else
			$included_blocks[] = 'msgstr';

		foreach ($included_blocks as $key) {
			if (is_array($this->$key)) {
				$str .= "$key ";
				$str .= implode(self::NEWLINE, array_map([$this, 'quoteWrap'], $this->$key)) . self::NEWLINE;
			}
		}

		if ($this->msgid_plural && $this->msgstr_plural) {
			foreach ($this->msgstr_plural as $plural_key => $plural_message) {
				$str .= 'msgstr[' . $plural_key . '] ';
				$str .= implode(self::NEWLINE, array_map([$this, 'quoteWrap'], $plural_message)) . self::NEWLINE;
			}
		}

		return trim($str);
	}