11from abc import ABC
2+ from typing import Optional
23from xml .etree import ElementTree
34
45from ..scripture .verse_ref import Versification
910
1011
1112class ParatextProjectSettingsParserBase (ABC ):
12- def __init__ (self , paratext_project_file_handler : ParatextProjectFileHandler ):
13+ def __init__ (
14+ self ,
15+ paratext_project_file_handler : ParatextProjectFileHandler ,
16+ parent_paratext_project_file_handler : Optional [ParatextProjectFileHandler ] = None ,
17+ ):
1318 self ._paratext_project_file_handler = paratext_project_file_handler
19+ self ._parent_paratext_project_file_handler = parent_paratext_project_file_handler
1420
1521 def parse (self ) -> ParatextProjectSettings :
1622 settings_file_name = "Settings.xml"
@@ -21,6 +27,7 @@ def parse(self) -> ParatextProjectSettings:
2127 with self ._paratext_project_file_handler .open (settings_file_name ) as stream :
2228 settings_tree = ElementTree .parse (stream )
2329
30+ guid = settings_tree .getroot ().findtext ("Guid" , "" )
2431 name = settings_tree .getroot ().findtext ("Name" , "" )
2532 full_name = settings_tree .getroot ().findtext ("FullName" , "" )
2633 encoding_str = settings_tree .getroot ().findtext ("Encoding" , "65001" )
@@ -36,7 +43,6 @@ def parse(self) -> ParatextProjectSettings:
3643 versification_type = int (settings_tree .getroot ().findtext ("Versification" , "4" ))
3744 versification = Versification .get_builtin (versification_type )
3845 if self ._paratext_project_file_handler .exists ("custom.vrs" ):
39- guid = settings_tree .getroot ().findtext ("Guid" , "" )
4046 versification_name = f"{ versification .name } -{ guid } "
4147 versification = Versification .load (
4248 self ._paratext_project_file_handler .open ("custom.vrs" ),
@@ -77,12 +83,23 @@ def parse(self) -> ParatextProjectSettings:
7783 )
7884 language_code = None
7985 language_iso_code_setting = settings_tree .getroot ().findtext ("LanguageIsoCode" , "" )
80- if language_iso_code_setting :
81- language_iso_code_setting_parts = settings_tree . getroot (). findtext ( "LanguageIsoCode" , "" ) .split (":" )
86+ if language_iso_code_setting is not None :
87+ language_iso_code_setting_parts = language_iso_code_setting .split (":" )
8288 if language_iso_code_setting_parts :
8389 language_code = language_iso_code_setting_parts [0 ]
8490
91+ translation_info_setting = settings_tree .getroot ().findtext ("TranslationInfo" )
92+ translation_type = "Standard"
93+ parent_name = None
94+ parent_guid = None
95+ if translation_info_setting is not None :
96+ translation_info_setting_parts = translation_info_setting .split (":" )
97+ translation_type = translation_info_setting_parts [0 ]
98+ parent_name = translation_info_setting_parts [1 ] if translation_info_setting_parts [1 ] != "" else None
99+ parent_guid = translation_info_setting_parts [2 ] if translation_info_setting_parts [2 ] != "" else None
100+
85101 return ParatextProjectSettings (
102+ guid ,
86103 name ,
87104 full_name ,
88105 encoding ,
@@ -95,4 +112,7 @@ def parse(self) -> ParatextProjectSettings:
95112 parts [1 ],
96113 parts [2 ],
97114 language_code ,
115+ translation_type ,
116+ parent_guid ,
117+ parent_name ,
98118 )
0 commit comments