src/main/kotlin/com/eny/i18n/extensions/lang/php/PhpTranslationExtractor.kt
package com.eny.i18n.extensions.lang.php
import com.eny.i18n.plugin.factory.TranslationExtractor
import com.eny.i18n.plugin.utils.default
import com.eny.i18n.plugin.utils.type
import com.eny.i18n.plugin.utils.unQuote
import com.eny.i18n.plugin.utils.whenMatches
import com.intellij.openapi.util.TextRange
import com.intellij.psi.PsiElement
internal class PhpTranslationExtractor: TranslationExtractor {
override fun canExtract(element: PsiElement): Boolean =
(element.isPhpStringLiteral() || element.isBorderToken())
override fun isExtracted(element: PsiElement): Boolean =
PhpPatternsExt.phpArgument("t", 0).accepts(getTextElement(element.parent))
override fun template(element: PsiElement): (argument: String) -> String = {"t($it)"}
override fun text(element: PsiElement): String = getTextElement(element).text.unQuote()
override fun textRange(element: PsiElement): TextRange = getTextElement(element).parent.textRange
private fun getTextElement(element: PsiElement) =
element.whenMatches {it.isBorderToken()}?.prevSibling.default(element)
private fun PsiElement.isBorderToken(): Boolean = listOf("right double quote", "right single quote").contains(this.type())
private fun PsiElement.isPhpStringLiteral(): Boolean = listOf("double quoted string", "single quoted string").contains(this.type())
}