1919package com.hyperdevs.poeditor.gradle
2020
2121import com.hyperdevs.poeditor.gradle.adapters.PoEditorDateJsonAdapter
22- import com.hyperdevs.poeditor.gradle.ktx .downloadUrlToString
22+ import com.hyperdevs.poeditor.gradle.extensions .downloadUrlToString
2323import com.hyperdevs.poeditor.gradle.network.PoEditorApiControllerImpl
2424import com.hyperdevs.poeditor.gradle.network.api.ExportType
2525import com.hyperdevs.poeditor.gradle.network.api.FilterType
@@ -28,8 +28,9 @@ import com.hyperdevs.poeditor.gradle.network.api.PoEditorApi
2828import com.hyperdevs.poeditor.gradle.network.api.ProjectLanguage
2929import com.hyperdevs.poeditor.gradle.utils.TABLET_REGEX_STRING
3030import com.hyperdevs.poeditor.gradle.utils.logger
31- import com.hyperdevs.poeditor.gradle.xml.AndroidXmlWriter
32- import com.hyperdevs.poeditor.gradle.xml.XmlPostProcessor
31+ import com.hyperdevs.poeditor.gradle.xml.StringsXmlPostProcessor
32+ import com.hyperdevs.poeditor.gradle.xml.StringsXmlWriter
33+ import com.hyperdevs.poeditor.gradle.xml.parser.SaxStringsXmlDocumentParser
3334import com.squareup.moshi.Moshi
3435import com.squareup.moshi.kotlin.reflect.KotlinJsonAdapterFactory
3536import okhttp3.HttpUrl.Companion.toHttpUrl
@@ -59,12 +60,14 @@ object PoEditorStringsImporter {
5960 .connectTimeout(CONNECT_TIMEOUT_SECONDS , TimeUnit .SECONDS )
6061 .readTimeout(READ_TIMEOUT_SECONDS , TimeUnit .SECONDS )
6162 .writeTimeout(WRITE_TIMEOUT_SECONDS , TimeUnit .SECONDS )
62- .addInterceptor(HttpLoggingInterceptor (object : HttpLoggingInterceptor .Logger {
63- override fun log (message : String ) {
64- logger.debug(message)
65- }
66- })
67- .setLevel(HttpLoggingInterceptor .Level .BODY ))
63+ .addInterceptor(
64+ HttpLoggingInterceptor (object : HttpLoggingInterceptor .Logger {
65+ override fun log (message : String ) {
66+ logger.debug(message)
67+ }
68+ })
69+ .setLevel(HttpLoggingInterceptor .Level .BODY )
70+ )
6871 .build()
6972
7073 private val retrofit = Retrofit .Builder ()
@@ -75,27 +78,25 @@ object PoEditorStringsImporter {
7578
7679 private val poEditorApi: PoEditorApi = retrofit.create(PoEditorApi ::class .java)
7780
78- private val xmlPostProcessor = XmlPostProcessor ()
79-
80- private val xmlWriter = AndroidXmlWriter ()
81-
8281 /* *
8382 * Imports PoEditor strings.
8483 */
85- @Suppress(" LongParameterList" )
86- fun importPoEditorStrings (apiToken : String ,
87- projectId : Int ,
88- defaultLang : String ,
89- resDirPath : String ,
90- filters : List <FilterType >,
91- order : OrderType ,
92- tags : List <String >,
93- languageValuesOverridePathMap : Map <String , String >,
94- minimumTranslationPercentage : Int ,
95- resFileName : String ,
96- unquoted : Boolean ,
97- unescapeHtmlTags : Boolean ,
98- untranslatableStringsRegex : String? ) {
84+ @Suppress(" LongParameterList" , " LongMethod" )
85+ fun importPoEditorStrings (
86+ apiToken : String ,
87+ projectId : Int ,
88+ defaultLang : String ,
89+ resDirPath : String ,
90+ filters : List <FilterType >,
91+ order : OrderType ,
92+ tags : List <String >,
93+ languageValuesOverridePathMap : Map <String , String >,
94+ minimumTranslationPercentage : Int ,
95+ resFileName : String ,
96+ unquoted : Boolean ,
97+ unescapeHtmlTags : Boolean ,
98+ untranslatableStringsRegex : String?
99+ ) {
99100 try {
100101 val poEditorApiController = PoEditorApiControllerImpl (apiToken, moshi, poEditorApi)
101102
@@ -122,6 +123,8 @@ object PoEditorStringsImporter {
122123 logger.lifecycle(" Using the following filters for all languages: $filters " )
123124 }
124125
126+ val stringsXmlDocumentParser = SaxStringsXmlDocumentParser ()
127+
125128 projectLanguages.minus(skippedLanguages).forEach { languageData ->
126129 val languageCode = languageData.code
127130
@@ -143,26 +146,31 @@ object PoEditorStringsImporter {
143146 val translationFile = okHttpClient.downloadUrlToString(translationFileUrl)
144147
145148 // Extract final files from downloaded translation XML
146- val postProcessedXmlDocumentMap = xmlPostProcessor.postProcessTranslationXml(
147- translationFile,
149+ val originalStringsXmlDocument = stringsXmlDocumentParser.deserialize(translationFile)
150+
151+ val postProcessedStringsXmlDocumentMap = StringsXmlPostProcessor .processTranslationXml(
152+ originalStringsXmlDocument,
148153 listOf (TABLET_REGEX_STRING ),
149154 unescapeHtmlTags,
150- untranslatableStringsRegex
155+ untranslatableStringsRegex?.toRegex()
151156 )
152157
153- xmlWriter .saveXml(
158+ StringsXmlWriter .saveXml(
154159 resDirPath,
155160 resFileName,
156- postProcessedXmlDocumentMap,
161+ postProcessedStringsXmlDocumentMap.mapValues { (_, document) ->
162+ stringsXmlDocumentParser.serialize(document)
163+ },
157164 defaultLang,
158165 languageCode,
159- languageValuesOverridePathMap,
160- unescapeHtmlTags
166+ languageValuesOverridePathMap
161167 )
162168 }
163169 } catch (e: Exception ) {
164- logger.error(" An error happened when retrieving strings from project. " +
165- " Please review the plug-in's input parameters and try again" )
170+ logger.error(
171+ " An error happened when retrieving strings from project. " +
172+ " Please review the plug-in's input parameters and try again"
173+ )
166174 throw e
167175 }
168176 }
0 commit comments