arelle-release 2.17.1__py3-none-any.whl → 2.37.71__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (893) hide show
  1. arelle/Aspect.py +6 -3
  2. arelle/BetaFeatures.py +3 -0
  3. arelle/Cntlr.py +117 -413
  4. arelle/CntlrCmdLine.py +364 -227
  5. arelle/CntlrQuickBooks.py +4 -2
  6. arelle/CntlrWebMain.py +179 -119
  7. arelle/CntlrWinMain.py +342 -124
  8. arelle/DialogAbout.py +1 -1
  9. arelle/DialogArcroleGroup.py +1 -1
  10. arelle/DialogFind.py +1 -1
  11. arelle/DialogFormulaParameters.py +2 -2
  12. arelle/DialogLanguage.py +45 -36
  13. arelle/DialogNewFactItem.py +1 -1
  14. arelle/DialogOpenArchive.py +30 -34
  15. arelle/DialogPackageManager.py +11 -8
  16. arelle/DialogPluginManager.py +43 -89
  17. arelle/DialogRssWatch.py +2 -2
  18. arelle/DialogURL.py +1 -1
  19. arelle/DialogUserPassword.py +1 -1
  20. arelle/DisclosureSystem.py +69 -1
  21. arelle/ErrorManager.py +321 -0
  22. arelle/FileSource.py +201 -99
  23. arelle/FunctionFn.py +44 -5
  24. arelle/FunctionIxt.py +16 -13
  25. arelle/FunctionUtil.py +1 -1
  26. arelle/FunctionXfi.py +68 -24
  27. arelle/FunctionXs.py +1 -1
  28. arelle/HtmlUtil.py +5 -4
  29. arelle/LeiUtil.py +63 -43
  30. arelle/LinkbaseType.py +94 -0
  31. arelle/LocalViewer.py +8 -2
  32. arelle/Locale.py +239 -79
  33. arelle/ModelDocument.py +180 -48
  34. arelle/ModelDtsObject.py +32 -27
  35. arelle/ModelFormulaObject.py +14 -6
  36. arelle/ModelInstanceObject.py +43 -14
  37. arelle/ModelManager.py +6 -1
  38. arelle/ModelObject.py +12 -8
  39. arelle/ModelObjectFactory.py +18 -2
  40. arelle/ModelRelationshipSet.py +46 -3
  41. arelle/ModelRenderingObject.py +899 -951
  42. arelle/ModelRssItem.py +2 -4
  43. arelle/ModelTestcaseObject.py +41 -4
  44. arelle/ModelValue.py +42 -14
  45. arelle/ModelVersReport.py +1 -1
  46. arelle/ModelXbrl.py +133 -273
  47. arelle/PackageManager.py +202 -176
  48. arelle/PluginManager.py +551 -239
  49. arelle/PluginUtils.py +54 -0
  50. arelle/PrototypeInstanceObject.py +53 -12
  51. arelle/PythonUtil.py +166 -25
  52. arelle/RuntimeOptions.py +32 -18
  53. arelle/SocketUtils.py +3 -0
  54. arelle/SystemInfo.py +1 -1
  55. arelle/TkTableWrapper.py +33 -5
  56. arelle/UITkTable.py +27 -21
  57. arelle/Updater.py +7 -3
  58. arelle/UrlUtil.py +6 -2
  59. arelle/Validate.py +596 -402
  60. arelle/ValidateDuplicateFacts.py +584 -0
  61. arelle/ValidateFileSource.py +38 -0
  62. arelle/ValidateFilingText.py +46 -29
  63. arelle/ValidateInfoset.py +104 -32
  64. arelle/ValidateUtr.py +31 -4
  65. arelle/ValidateXbrl.py +144 -120
  66. arelle/ValidateXbrlCalcs.py +51 -66
  67. arelle/ValidateXbrlDTS.py +98 -29
  68. arelle/Version.py +2 -7
  69. arelle/ViewFile.py +2 -0
  70. arelle/ViewFileDTS.py +7 -2
  71. arelle/ViewFileFactList.py +1 -1
  72. arelle/ViewFileFactTable.py +4 -4
  73. arelle/ViewFileRelationshipSet.py +36 -19
  74. arelle/ViewFileRenderedGrid.py +164 -753
  75. arelle/ViewFileRenderedLayout.py +174 -0
  76. arelle/ViewFileRenderedStructure.py +108 -0
  77. arelle/ViewWinDTS.py +4 -1
  78. arelle/ViewWinFactList.py +1 -1
  79. arelle/ViewWinFactTable.py +1 -1
  80. arelle/ViewWinRelationshipSet.py +14 -8
  81. arelle/ViewWinRenderedGrid.py +397 -287
  82. arelle/ViewWinRssFeed.py +4 -0
  83. arelle/ViewWinTree.py +15 -9
  84. arelle/ViewWinXml.py +1 -1
  85. arelle/WebCache.py +510 -272
  86. arelle/XbrlConst.py +202 -196
  87. arelle/XbrlUtil.py +2 -1
  88. arelle/XhtmlValidate.py +9 -23
  89. arelle/XmlUtil.py +24 -19
  90. arelle/XmlValidate.py +95 -67
  91. arelle/XmlValidateParticles.py +4 -4
  92. arelle/_version.py +33 -3
  93. arelle/api/Session.py +183 -0
  94. arelle/config/creationSoftwareNames.json +24 -10
  95. arelle/config/disclosuresystems.xml +1 -1
  96. arelle/config/disclosuresystems.xsd +3 -0
  97. arelle/config/sbr-text-formatting.xsd +737 -0
  98. arelle/conformance/CSVTestcaseLoader.py +102 -0
  99. arelle/formula/FactAspectsCache.py +10 -4
  100. arelle/formula/ValidateFormula.py +82 -194
  101. arelle/formula/XPathContext.py +42 -28
  102. arelle/formula/XPathParser.py +15 -9
  103. arelle/locale/ar_EG/LC_MESSAGES/ar_EG.po +3 -4
  104. arelle/locale/messages.pot +1 -2
  105. arelle/locale/ru/LC_MESSAGES/ru.po +2 -2
  106. arelle/logging/formatters/LogFormatter.py +47 -0
  107. arelle/logging/handlers/LogHandlerWithXml.py +94 -0
  108. arelle/logging/handlers/LogToBufferHandler.py +20 -0
  109. arelle/logging/handlers/LogToPrintHandler.py +41 -0
  110. arelle/logging/handlers/LogToXmlHandler.py +244 -0
  111. arelle/logging/handlers/StructuredMessageLogHandler.py +74 -0
  112. arelle/model/CommentBase.py +3 -0
  113. arelle/model/ElementBase.py +3 -0
  114. arelle/model/PIBase.py +3 -0
  115. arelle/model/__init__.py +3 -0
  116. arelle/oim/Load.py +2869 -0
  117. arelle/oim/Validate.py +155 -0
  118. arelle/oim/xml/Save.py +21 -0
  119. arelle/packages/PackageConst.py +7 -0
  120. arelle/packages/PackageType.py +13 -0
  121. arelle/packages/PackageUtils.py +22 -0
  122. arelle/packages/PackageValidation.py +200 -0
  123. arelle/packages/report/DetectReportPackage.py +13 -0
  124. arelle/packages/report/ReportPackage.py +265 -0
  125. arelle/packages/report/ReportPackageConst.py +79 -0
  126. arelle/packages/report/ReportPackageValidator.py +207 -0
  127. arelle/plugin/EdgarRendererAllReports.py +12 -12
  128. arelle/plugin/OimTaxonomy/ModelValueMore.py +15 -0
  129. arelle/plugin/OimTaxonomy/ValidateDTS.py +484 -0
  130. arelle/plugin/OimTaxonomy/ViewXbrlTxmyObj.py +239 -0
  131. arelle/plugin/OimTaxonomy/XbrlAbstract.py +16 -0
  132. arelle/plugin/OimTaxonomy/XbrlConcept.py +68 -0
  133. arelle/plugin/OimTaxonomy/XbrlConst.py +261 -0
  134. arelle/plugin/OimTaxonomy/XbrlCube.py +91 -0
  135. arelle/plugin/OimTaxonomy/XbrlDimension.py +38 -0
  136. arelle/plugin/OimTaxonomy/XbrlDts.py +152 -0
  137. arelle/plugin/OimTaxonomy/XbrlEntity.py +16 -0
  138. arelle/plugin/OimTaxonomy/XbrlGroup.py +22 -0
  139. arelle/plugin/OimTaxonomy/XbrlImportedTaxonomy.py +22 -0
  140. arelle/plugin/OimTaxonomy/XbrlLabel.py +31 -0
  141. arelle/plugin/OimTaxonomy/XbrlNetwork.py +100 -0
  142. arelle/plugin/OimTaxonomy/XbrlProperty.py +28 -0
  143. arelle/plugin/OimTaxonomy/XbrlReference.py +33 -0
  144. arelle/plugin/OimTaxonomy/XbrlReport.py +24 -0
  145. arelle/plugin/OimTaxonomy/XbrlTableTemplate.py +35 -0
  146. arelle/plugin/OimTaxonomy/XbrlTaxonomy.py +93 -0
  147. arelle/plugin/OimTaxonomy/XbrlTaxonomyObject.py +154 -0
  148. arelle/plugin/OimTaxonomy/XbrlTransform.py +17 -0
  149. arelle/plugin/OimTaxonomy/XbrlTypes.py +23 -0
  150. arelle/plugin/OimTaxonomy/XbrlUnit.py +17 -0
  151. arelle/plugin/OimTaxonomy/__init__.py +1037 -0
  152. arelle/plugin/OimTaxonomy/resources/iso4217.json +4479 -0
  153. arelle/plugin/OimTaxonomy/resources/oim-taxonomy-schema.json +935 -0
  154. arelle/plugin/OimTaxonomy/resources/ref.json +333 -0
  155. arelle/plugin/OimTaxonomy/resources/transform-types.json +2481 -0
  156. arelle/plugin/OimTaxonomy/resources/types.json +727 -0
  157. arelle/plugin/OimTaxonomy/resources/utr.json +3046 -0
  158. arelle/plugin/OimTaxonomy/resources/xbrlSpec.json +1082 -0
  159. arelle/plugin/formulaLoader.py +3 -3
  160. arelle/plugin/formulaSaver.py +4 -4
  161. arelle/plugin/inlineXbrlDocumentSet.py +331 -102
  162. arelle/plugin/internet/proxyNTLM/HTTPNtlmAuthHandler.py +1 -1
  163. arelle/plugin/loadFromExcel.py +13 -10
  164. arelle/plugin/loadFromOIM.py +16 -3096
  165. arelle/plugin/logging/saveMessages.py +1 -1
  166. arelle/plugin/saveHtmlEBAtables.py +293 -213
  167. arelle/plugin/saveLoadableOIM.py +652 -361
  168. arelle/plugin/saveOIMTaxonomy.py +311 -0
  169. arelle/plugin/streamingExtensions.py +1 -1
  170. arelle/plugin/systemInfo.py +46 -0
  171. arelle/plugin/transforms/tester.py +4 -4
  172. arelle/plugin/validate/CIPC/Const.py +18 -0
  173. arelle/plugin/validate/CIPC/__init__.py +34 -13
  174. arelle/plugin/validate/DBA/DisclosureSystems.py +12 -0
  175. arelle/plugin/validate/DBA/PluginValidationDataExtension.py +165 -0
  176. arelle/plugin/validate/DBA/ValidationPluginExtension.py +545 -0
  177. arelle/plugin/validate/DBA/__init__.py +49 -0
  178. arelle/plugin/validate/DBA/resources/config.xml +21 -0
  179. arelle/plugin/validate/DBA/rules/__init__.py +323 -0
  180. arelle/plugin/validate/DBA/rules/fr.py +1377 -0
  181. arelle/plugin/validate/DBA/rules/tc.py +45 -0
  182. arelle/plugin/validate/DBA/rules/th.py +172 -0
  183. arelle/plugin/validate/DBA/rules/tm.py +351 -0
  184. arelle/plugin/validate/DBA/rules/tr.py +373 -0
  185. arelle/plugin/validate/EBA/__init__.py +11 -12
  186. arelle/plugin/validate/EDINET/Constants.py +208 -0
  187. arelle/plugin/validate/EDINET/ContextRequirement.py +58 -0
  188. arelle/plugin/validate/EDINET/ControllerPluginData.py +298 -0
  189. arelle/plugin/validate/EDINET/CoverItemRequirements.py +42 -0
  190. arelle/plugin/validate/EDINET/DeiRequirements.py +118 -0
  191. arelle/plugin/validate/EDINET/DisclosureSystems.py +1 -0
  192. arelle/plugin/validate/EDINET/FilingFormat.py +275 -0
  193. arelle/plugin/validate/EDINET/FormType.py +134 -0
  194. arelle/plugin/validate/EDINET/ManifestInstance.py +236 -0
  195. arelle/plugin/validate/EDINET/PluginValidationDataExtension.py +640 -0
  196. arelle/plugin/validate/EDINET/ReportFolderType.py +162 -0
  197. arelle/plugin/validate/EDINET/Statement.py +139 -0
  198. arelle/plugin/validate/EDINET/TableOfContentsBuilder.py +493 -0
  199. arelle/plugin/validate/EDINET/UploadContents.py +48 -0
  200. arelle/plugin/validate/EDINET/ValidationPluginExtension.py +64 -0
  201. arelle/plugin/validate/EDINET/__init__.py +109 -0
  202. arelle/plugin/validate/EDINET/resources/config.xml +22 -0
  203. arelle/plugin/validate/EDINET/resources/cover-item-requirements.json +793 -0
  204. arelle/plugin/validate/EDINET/resources/dei-requirements.csv +27 -0
  205. arelle/plugin/validate/EDINET/resources/edinet-taxonomies.xml +62 -0
  206. arelle/plugin/validate/EDINET/rules/contexts.py +547 -0
  207. arelle/plugin/validate/EDINET/rules/edinet.py +1991 -0
  208. arelle/plugin/validate/EDINET/rules/frta.py +301 -0
  209. arelle/plugin/validate/EDINET/rules/gfm.py +2394 -0
  210. arelle/plugin/validate/EDINET/rules/manifests.py +88 -0
  211. arelle/plugin/validate/EDINET/rules/upload.py +1370 -0
  212. arelle/plugin/validate/ESEF/Const.py +16 -75
  213. arelle/plugin/validate/ESEF/Dimensions.py +2 -2
  214. arelle/plugin/validate/ESEF/ESEF_2021/DTS.py +6 -1
  215. arelle/plugin/validate/ESEF/ESEF_2021/Image.py +7 -4
  216. arelle/plugin/validate/ESEF/ESEF_2021/ValidateXbrlFinally.py +80 -57
  217. arelle/plugin/validate/ESEF/ESEF_Current/DTS.py +60 -22
  218. arelle/plugin/validate/ESEF/ESEF_Current/ValidateXbrlFinally.py +272 -133
  219. arelle/plugin/validate/ESEF/Util.py +5 -19
  220. arelle/plugin/validate/ESEF/__init__.py +61 -46
  221. arelle/plugin/validate/ESEF/resources/authority-validations.json +120 -10
  222. arelle/plugin/validate/ESEF/resources/config.xml +44 -3
  223. arelle/plugin/validate/FERC/__init__.py +31 -18
  224. arelle/plugin/validate/FERC/config.xml +18 -18
  225. arelle/plugin/validate/NL/DisclosureSystems.py +19 -3
  226. arelle/plugin/validate/NL/PluginValidationDataExtension.py +710 -7
  227. arelle/plugin/validate/NL/ValidationPluginExtension.py +117 -12
  228. arelle/plugin/validate/NL/__init__.py +21 -10
  229. arelle/plugin/validate/NL/resources/config.xml +27 -6
  230. arelle/plugin/validate/NL/rules/br_kvk.py +81 -21
  231. arelle/plugin/validate/NL/rules/fg_nl.py +292 -0
  232. arelle/plugin/validate/NL/rules/fr_kvk.py +60 -7
  233. arelle/plugin/validate/NL/rules/fr_nl.py +705 -24
  234. arelle/plugin/validate/NL/rules/nl_kvk.py +2182 -0
  235. arelle/plugin/validate/ROS/DisclosureSystems.py +1 -0
  236. arelle/plugin/validate/ROS/PluginValidationDataExtension.py +109 -0
  237. arelle/plugin/validate/ROS/ValidationPluginExtension.py +27 -0
  238. arelle/plugin/validate/ROS/__init__.py +28 -341
  239. arelle/plugin/validate/ROS/resources/config.xml +20 -0
  240. arelle/plugin/validate/ROS/rules/__init__.py +56 -0
  241. arelle/plugin/validate/ROS/rules/ros.py +393 -0
  242. arelle/plugin/validate/UK/ValidateUK.py +1372 -0
  243. arelle/plugin/validate/{HMRC → UK}/__init__.py +195 -189
  244. arelle/plugin/validate/{HMRC → UK}/config.xml +1 -1
  245. arelle/plugin/xbrlDB/SqlDb.py +1 -1
  246. arelle/plugin/xbrlDB/XbrlOpenSqlDB.py +5 -5
  247. arelle/plugin/xbrlDB/XbrlPublicPostgresDB.py +1 -1
  248. arelle/plugin/xbrlDB/XbrlSemanticJsonDB.py +1 -1
  249. arelle/plugin/xbrlDB/XbrlSemanticRdfDB.py +1 -1
  250. arelle/plugin/xbrlDB/__init__.py +4 -1
  251. arelle/{RenderingEvaluator.py → rendering/RenderingEvaluator.py} +120 -99
  252. arelle/rendering/RenderingLayout.py +476 -0
  253. arelle/rendering/RenderingResolution.py +814 -0
  254. arelle/resources/cache/http/www.eurofiling.info/eu/fr/xbrl/ext/filing-indicators.xsd +20 -0
  255. arelle/resources/cache/http/www.w3.org/2001/03/xml.xsd +117 -0
  256. arelle/resources/cache/http/www.w3.org/2001/XMLSchema.xsd +2534 -0
  257. arelle/resources/cache/http/www.w3.org/2001/xml.xsd +287 -0
  258. arelle/resources/cache/http/www.xbrl.org/2003/xbrl-instance-2003-12-31.xsd +779 -0
  259. arelle/resources/cache/http/www.xbrl.org/2003/xbrl-linkbase-2003-12-31.xsd +486 -0
  260. arelle/resources/cache/http/www.xbrl.org/2003/xl-2003-12-31.xsd +251 -0
  261. arelle/resources/cache/http/www.xbrl.org/2003/xlink-2003-12-31.xsd +121 -0
  262. arelle/resources/cache/http/www.xbrl.org/2004/ref-2004-08-10.xsd +129 -0
  263. arelle/resources/cache/http/www.xbrl.org/2005/xbrldt-2005.xsd +53 -0
  264. arelle/resources/cache/http/www.xbrl.org/2006/ref-2006-02-27.xsd +120 -0
  265. arelle/resources/cache/http/www.xbrl.org/2006/xbrldi-2006.xsd +41 -0
  266. arelle/resources/cache/http/www.xbrl.org/2008/boolean-filter.xsd +51 -0
  267. arelle/resources/cache/http/www.xbrl.org/2008/concept-filter.xsd +127 -0
  268. arelle/resources/cache/http/www.xbrl.org/2008/conformance.xsd +116 -0
  269. arelle/resources/cache/http/www.xbrl.org/2008/conformanceFunction.xsd +51 -0
  270. arelle/resources/cache/http/www.xbrl.org/2008/consistency-assertion.xsd +66 -0
  271. arelle/resources/cache/http/www.xbrl.org/2008/dimension-filter.xsd +86 -0
  272. arelle/resources/cache/http/www.xbrl.org/2008/entity-filter.xsd +92 -0
  273. arelle/resources/cache/http/www.xbrl.org/2008/existence-assertion.xsd +44 -0
  274. arelle/resources/cache/http/www.xbrl.org/2008/formula.xsd +261 -0
  275. arelle/resources/cache/http/www.xbrl.org/2008/function.xsd +90 -0
  276. arelle/resources/cache/http/www.xbrl.org/2008/general-filter.xsd +38 -0
  277. arelle/resources/cache/http/www.xbrl.org/2008/generic-label.xsd +80 -0
  278. arelle/resources/cache/http/www.xbrl.org/2008/generic-link.xsd +81 -0
  279. arelle/resources/cache/http/www.xbrl.org/2008/generic-reference.xsd +63 -0
  280. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xbrl/xbrl-instance-2003-12-31-ixmod.xsd +788 -0
  281. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xbrl/xbrl-linkbase-2003-12-31-ixmod.xsd +488 -0
  282. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xbrl/xl-2003-12-31.xsd +248 -0
  283. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xbrl/xlink-2003-12-31.xsd +117 -0
  284. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xframes-1.xsd +166 -0
  285. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-applet-1.xsd +66 -0
  286. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-attribs-1.xsd +72 -0
  287. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-base-1.xsd +36 -0
  288. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-basic-form-1.xsd +195 -0
  289. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-basic-table-1.xsd +169 -0
  290. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-basic10-model-1.xsd +376 -0
  291. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-basic10-module-redefines-1.xsd +61 -0
  292. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-basic10-modules-1.xsd +259 -0
  293. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-basic10.xsd +98 -0
  294. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-bdo-1.xsd +78 -0
  295. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-blkphras-1.xsd +161 -0
  296. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-blkpres-1.xsd +37 -0
  297. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-blkstruct-1.xsd +49 -0
  298. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-charent-1.xsd +38 -0
  299. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-copyright-1.xsd +29 -0
  300. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-csismap-1.xsd +96 -0
  301. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-datatypes-1.xsd +128 -0
  302. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-edit-1.xsd +39 -0
  303. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-events-1.xsd +130 -0
  304. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-form-1.xsd +326 -0
  305. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-frames-1.xsd +113 -0
  306. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-framework-1.xsd +66 -0
  307. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-hypertext-1.xsd +47 -0
  308. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-iframe-1.xsd +68 -0
  309. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-image-1.xsd +45 -0
  310. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-inlphras-1.xsd +163 -0
  311. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-inlpres-1.xsd +39 -0
  312. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-inlstruct-1.xsd +50 -0
  313. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-inlstyle-1.xsd +27 -0
  314. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-legacy-1.xsd +97 -0
  315. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-link-1.xsd +45 -0
  316. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-list-1.xsd +99 -0
  317. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-meta-1.xsd +42 -0
  318. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-misc-1.xsd +441 -0
  319. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-nameident-1.xsd +63 -0
  320. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-notations-1.xsd +69 -0
  321. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-object-1.xsd +76 -0
  322. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-param-1.xsd +51 -0
  323. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-pres-1.xsd +51 -0
  324. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-ruby-1.xsd +171 -0
  325. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-ruby-basic-1.xsd +89 -0
  326. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-script-1.xsd +70 -0
  327. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-ssismap-1.xsd +43 -0
  328. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-struct-1.xsd +112 -0
  329. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-style-1.xsd +52 -0
  330. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-table-1.xsd +272 -0
  331. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-target-1.xsd +53 -0
  332. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-text-1.xsd +67 -0
  333. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml11-model-1.xsd +677 -0
  334. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml11-module-redefines-1.xsd +335 -0
  335. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml11-modules-1.xsd +528 -0
  336. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml11.xsd +104 -0
  337. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml2.xsd +21 -0
  338. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xml-events-1.xsd +73 -0
  339. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xml-events-2.xsd +74 -0
  340. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xml-events-attribs-1.xsd +73 -0
  341. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xml-events-attribs-2.xsd +75 -0
  342. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xml-events-copyright-1.xsd +34 -0
  343. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xml-events-copyright-2.xsd +34 -0
  344. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xml-handlers-2.xsd +98 -0
  345. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml-inlinexbrl-1_0-definitions.xsd +225 -0
  346. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml-inlinexbrl-1_0-model.xsd +681 -0
  347. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml-inlinexbrl-1_0-modules.xsd +535 -0
  348. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml-inlinexbrl-1_0.xsd +40 -0
  349. arelle/resources/cache/http/www.xbrl.org/2008/match-filter.xsd +94 -0
  350. arelle/resources/cache/http/www.xbrl.org/2008/period-filter.xsd +86 -0
  351. arelle/resources/cache/http/www.xbrl.org/2008/registry.xsd +145 -0
  352. arelle/resources/cache/http/www.xbrl.org/2008/relative-filter.xsd +38 -0
  353. arelle/resources/cache/http/www.xbrl.org/2008/segment-scenario-filter.xsd +41 -0
  354. arelle/resources/cache/http/www.xbrl.org/2008/tuple-filter.xsd +83 -0
  355. arelle/resources/cache/http/www.xbrl.org/2008/unit-filter.xsd +58 -0
  356. arelle/resources/cache/http/www.xbrl.org/2008/validation.xsd +78 -0
  357. arelle/resources/cache/http/www.xbrl.org/2008/value-assertion.xsd +43 -0
  358. arelle/resources/cache/http/www.xbrl.org/2008/value-filter.xsd +43 -0
  359. arelle/resources/cache/http/www.xbrl.org/2008/variable.xsd +240 -0
  360. arelle/resources/cache/http/www.xbrl.org/2010/aspect-cover-filter.xsd +67 -0
  361. arelle/resources/cache/http/www.xbrl.org/2010/concept-relation-filter.xsd +108 -0
  362. arelle/resources/cache/http/www.xbrl.org/2010/custom-function-implementation.xsd +71 -0
  363. arelle/resources/cache/http/www.xbrl.org/2010/generic-message.xsd +68 -0
  364. arelle/resources/cache/http/www.xbrl.org/2010/validation-message.xsd +50 -0
  365. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xbrl/xbrl-instance-2003-12-31-ixmod.xsd +788 -0
  366. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xbrl/xbrl-linkbase-2003-12-31-ixmod.xsd +488 -0
  367. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xbrl/xl-2003-12-31.xsd +248 -0
  368. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xbrl/xlink-2003-12-31.xsd +117 -0
  369. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xframes-1.xsd +166 -0
  370. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-applet-1.xsd +66 -0
  371. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-attribs-1.xsd +72 -0
  372. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-base-1.xsd +36 -0
  373. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-basic-form-1.xsd +195 -0
  374. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-basic-table-1.xsd +169 -0
  375. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-basic10-model-1.xsd +376 -0
  376. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-basic10-module-redefines-1.xsd +61 -0
  377. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-basic10-modules-1.xsd +259 -0
  378. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-basic10.xsd +98 -0
  379. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-bdo-1.xsd +78 -0
  380. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-blkphras-1.xsd +161 -0
  381. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-blkpres-1.xsd +37 -0
  382. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-blkstruct-1.xsd +49 -0
  383. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-charent-1.xsd +38 -0
  384. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-copyright-1.xsd +29 -0
  385. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-csismap-1.xsd +96 -0
  386. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-datatypes-1.xsd +128 -0
  387. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-edit-1.xsd +39 -0
  388. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-events-1.xsd +130 -0
  389. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-form-1.xsd +326 -0
  390. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-frames-1.xsd +113 -0
  391. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-framework-1.xsd +66 -0
  392. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-hypertext-1.xsd +47 -0
  393. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-iframe-1.xsd +68 -0
  394. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-image-1.xsd +45 -0
  395. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-inlphras-1.xsd +163 -0
  396. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-inlpres-1.xsd +39 -0
  397. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-inlstruct-1.xsd +50 -0
  398. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-inlstyle-1.xsd +27 -0
  399. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-legacy-1.xsd +97 -0
  400. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-link-1.xsd +45 -0
  401. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-list-1.xsd +99 -0
  402. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-meta-1.xsd +42 -0
  403. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-misc-1.xsd +441 -0
  404. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-nameident-1.xsd +63 -0
  405. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-notations-1.xsd +69 -0
  406. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-object-1.xsd +76 -0
  407. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-param-1.xsd +51 -0
  408. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-pres-1.xsd +51 -0
  409. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-ruby-1.xsd +171 -0
  410. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-ruby-basic-1.xsd +89 -0
  411. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-script-1.xsd +70 -0
  412. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-ssismap-1.xsd +43 -0
  413. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-struct-1.xsd +112 -0
  414. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-style-1.xsd +52 -0
  415. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-table-1.xsd +272 -0
  416. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-target-1.xsd +53 -0
  417. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-text-1.xsd +67 -0
  418. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml11-model-1.xsd +677 -0
  419. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml11-module-redefines-1.xsd +335 -0
  420. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml11-modules-1.xsd +528 -0
  421. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml11.xsd +104 -0
  422. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml2.xsd +21 -0
  423. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xml-events-1.xsd +73 -0
  424. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xml-events-2.xsd +74 -0
  425. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xml-events-attribs-1.xsd +73 -0
  426. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xml-events-attribs-2.xsd +75 -0
  427. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xml-events-copyright-1.xsd +34 -0
  428. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xml-events-copyright-2.xsd +34 -0
  429. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xml-handlers-2.xsd +98 -0
  430. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml-inlinexbrl-1_1-definitions.xsd +252 -0
  431. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml-inlinexbrl-1_1-model.xsd +681 -0
  432. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml-inlinexbrl-1_1-modules.xsd +535 -0
  433. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml-inlinexbrl-1_1.xsd +40 -0
  434. arelle/resources/cache/http/www.xbrl.org/2013/match-filter.xsd +94 -0
  435. arelle/resources/cache/http/www.xbrl.org/2013/preferred-label.xsd +12 -0
  436. arelle/resources/cache/http/www.xbrl.org/2013/versioning-base.xsd +142 -0
  437. arelle/resources/cache/http/www.xbrl.org/2013/versioning-concept-details.xsd +143 -0
  438. arelle/resources/cache/http/www.xbrl.org/2013/versioning-concept-use.xsd +64 -0
  439. arelle/resources/cache/http/www.xbrl.org/2013/versioning-dimensions.xsd +162 -0
  440. arelle/resources/cache/http/www.xbrl.org/2014/extensible-enumerations.xsd +27 -0
  441. arelle/resources/cache/http/www.xbrl.org/2014/table.xsd +356 -0
  442. arelle/resources/cache/http/www.xbrl.org/2014/tablemodel.xsd +156 -0
  443. arelle/resources/cache/http/www.xbrl.org/2016/assertion-severity.xsd +29 -0
  444. arelle/resources/cache/http/www.xbrl.org/2016/severities.xml +21 -0
  445. arelle/resources/cache/http/www.xbrl.org/2016/taxonomy-package-catalog.xsd +38 -0
  446. arelle/resources/cache/http/www.xbrl.org/2016/taxonomy-package.xsd +154 -0
  447. arelle/resources/cache/http/www.xbrl.org/2022/assertion-severity.xsd +43 -0
  448. arelle/resources/cache/http/www.xbrl.org/2022/severities.xml +21 -0
  449. arelle/resources/cache/http/www.xbrl.org/dtr/type/nonNumeric-2009-12-16.xsd +76 -0
  450. arelle/resources/cache/http/www.xbrl.org/dtr/type/numeric-2009-12-16.xsd +78 -0
  451. arelle/resources/cache/http/www.xbrl.org/lrr/arcrole/accounting-arcrole-2023-01-04.xsd +39 -0
  452. arelle/resources/cache/http/www.xbrl.org/lrr/arcrole/deprecated-2009-12-16.xsd +29 -0
  453. arelle/resources/cache/http/www.xbrl.org/lrr/arcrole/esma-arcrole-2018-11-21.xsd +14 -0
  454. arelle/resources/cache/http/www.xbrl.org/lrr/arcrole/factExplanatory-2009-12-16.xsd +13 -0
  455. arelle/resources/cache/http/www.xbrl.org/lrr/arcrole/jpfr-arcrole-2007-11-07.xsd +27 -0
  456. arelle/resources/cache/http/www.xbrl.org/lrr/arcrole/parent-child-2013-09-19.xsd +12 -0
  457. arelle/resources/cache/http/www.xbrl.org/lrr/role/deprecated-2009-12-16.xsd +17 -0
  458. arelle/resources/cache/http/www.xbrl.org/lrr/role/jpfr-role-2007-11-07.xsd +47 -0
  459. arelle/resources/cache/http/www.xbrl.org/lrr/role/negated-2008-03-31.xsd +30 -0
  460. arelle/resources/cache/http/www.xbrl.org/lrr/role/negated-2009-12-16.xsd +33 -0
  461. arelle/resources/cache/http/www.xbrl.org/lrr/role/negative-2009-12-16.xsd +25 -0
  462. arelle/resources/cache/http/www.xbrl.org/lrr/role/net-2009-12-16.xsd +13 -0
  463. arelle/resources/cache/http/www.xbrl.org/lrr/role/positive-2009-12-16.xsd +25 -0
  464. arelle/resources/cache/http/www.xbrl.org/lrr/role/property-2022-09-28.xsd +15 -0
  465. arelle/resources/cache/http/www.xbrl.org/lrr/role/reference-2009-12-16.xsd +21 -0
  466. arelle/resources/cache/http/www.xbrl.org/lrr/role/restated-2006-02-21.xsd +19 -0
  467. arelle/resources/cache/http/www.xbrl.org/utr/2012-01-30/utr.xml +4543 -0
  468. arelle/resources/cache/http/www.xbrl.org/utr/2012-10-31/utr.xml +4510 -0
  469. arelle/resources/cache/http/www.xbrl.org/utr/2012-11-30/utr.xml +4567 -0
  470. arelle/resources/cache/http/www.xbrl.org/utr/2013-02-28/utr.xml +5180 -0
  471. arelle/resources/cache/http/www.xbrl.org/utr/2013-05-17/utr.xml +5349 -0
  472. arelle/resources/cache/http/www.xbrl.org/utr/2016-08-10/utr.xml +5363 -0
  473. arelle/resources/cache/http/www.xbrl.org/utr/2017-07-12/utr.xml +6164 -0
  474. arelle/resources/cache/http/www.xbrl.org/utr/2021-02-16/utr.xml +6370 -0
  475. arelle/resources/cache/http/www.xbrl.org/utr/2021-12-08/utr.xml +6493 -0
  476. arelle/resources/cache/http/www.xbrl.org/utr/2022-02-16/utr.xml +6551 -0
  477. arelle/resources/cache/http/www.xbrl.org/utr/2022-07-20/utr.xml +6638 -0
  478. arelle/resources/cache/http/www.xbrl.org/utr/2023-12-20/utr.xml +6680 -0
  479. arelle/resources/cache/http/www.xbrl.org/utr/2024-01-31/utr.xml +6680 -0
  480. arelle/resources/cache/http/www.xbrl.org/utr/2024-10-22/utr.xml +6693 -0
  481. arelle/resources/cache/http/www.xbrl.org/utr/utr.xml +6693 -0
  482. arelle/resources/cache/https/www.xbrl.org/2005/conformance.xsd +87 -0
  483. arelle/resources/cache/https/www.xbrl.org/2020/extensible-enumerations-2.0.xsd +51 -0
  484. arelle/resources/cache/https/www.xbrl.org/2023/calculation-1.1.xsd +27 -0
  485. arelle/resources/cache/https/www.xbrl.org/dtr/type/2020-01-21/types.xsd +812 -0
  486. arelle/resources/cache/https/www.xbrl.org/dtr/type/2022-03-31/types.xsd +847 -0
  487. arelle/resources/cache/https/www.xbrl.org/dtr/type/2024-01-31/types.xsd +897 -0
  488. arelle/resources/cache/https/www.xbrl.org/taxonomy/int/filing-indicators/REC/2021-02-03/filing-indicators-def.xml +68 -0
  489. arelle/resources/cache/https/www.xbrl.org/taxonomy/int/filing-indicators/REC/2021-02-03/filing-indicators-label.xml +84 -0
  490. arelle/resources/cache/https/www.xbrl.org/taxonomy/int/filing-indicators/REC/2021-02-03/filing-indicators.xsd +67 -0
  491. arelle/resources/libs/Tktable2.11/linux-x86_64/README.txt +149 -0
  492. arelle/resources/libs/Tktable2.11/linux-x86_64/html/tkTable.html +2039 -0
  493. arelle/resources/libs/Tktable2.11/linux-x86_64/libTktable2.11.so +0 -0
  494. arelle/resources/libs/Tktable2.11/linux-x86_64/license.txt +51 -0
  495. arelle/resources/libs/Tktable2.11/linux-x86_64/pkgIndex.tcl +3 -0
  496. arelle/resources/libs/Tktable2.11/linux-x86_64/tkTable.tcl +825 -0
  497. arelle/resources/libs/Tktable2.11/linux-x86_64/tktable.py +674 -0
  498. arelle/resources/libs/Tktable2.11/macos-arm64/README.txt +149 -0
  499. arelle/resources/libs/Tktable2.11/macos-arm64/html/tkTable.html +2039 -0
  500. arelle/resources/libs/Tktable2.11/macos-arm64/libTktable2.11.dylib +0 -0
  501. arelle/resources/libs/Tktable2.11/macos-arm64/license.txt +51 -0
  502. arelle/resources/libs/Tktable2.11/macos-arm64/pkgIndex.tcl +2 -0
  503. arelle/resources/libs/Tktable2.11/macos-arm64/tkTable.tcl +825 -0
  504. arelle/resources/libs/Tktable2.11/macos-arm64/tktable.py +674 -0
  505. arelle/resources/libs/Tktable2.11/macos-x86_64/README.txt +149 -0
  506. arelle/resources/libs/Tktable2.11/macos-x86_64/html/tkTable.html +2039 -0
  507. arelle/resources/libs/Tktable2.11/macos-x86_64/libTktable2.11.dylib +0 -0
  508. arelle/resources/libs/Tktable2.11/macos-x86_64/license.txt +51 -0
  509. arelle/resources/libs/Tktable2.11/macos-x86_64/pkgIndex.tcl +2 -0
  510. arelle/resources/libs/Tktable2.11/macos-x86_64/tkTable.tcl +825 -0
  511. arelle/resources/libs/Tktable2.11/macos-x86_64/tktable.py +674 -0
  512. arelle/resources/libs/Tktable2.11/win-x86_64/Tktable.dll +0 -0
  513. arelle/resources/libs/Tktable2.11/win-x86_64/pkgIndex.tcl +2 -0
  514. arelle/resources/libs/Tktable2.11/win-x86_64/tkTable.tcl +825 -0
  515. arelle/typing.py +9 -4
  516. arelle/utils/Contexts.py +38 -0
  517. arelle/utils/EntryPointDetection.py +139 -0
  518. arelle/utils/Equivalence.py +22 -0
  519. arelle/utils/{validate/PluginValidationData.py → PluginData.py} +5 -2
  520. arelle/utils/PluginHooks.py +256 -5
  521. arelle/utils/Units.py +36 -0
  522. arelle/utils/validate/Decorator.py +5 -3
  523. arelle/utils/validate/DetectScriptsInXhtml.py +99 -0
  524. arelle/utils/validate/ESEFImage.py +283 -0
  525. arelle/utils/validate/Validation.py +9 -1
  526. arelle/utils/validate/ValidationPlugin.py +74 -11
  527. arelle/utils/validate/ValidationUtil.py +55 -0
  528. arelle/webserver/bottle.py +5 -4424
  529. {arelle_release-2.17.1.dist-info → arelle_release-2.37.71.dist-info}/METADATA +51 -42
  530. arelle_release-2.37.71.dist-info/RECORD +697 -0
  531. {arelle_release-2.17.1.dist-info → arelle_release-2.37.71.dist-info}/WHEEL +1 -1
  532. {arelle_release-2.17.1.dist-info → arelle_release-2.37.71.dist-info/licenses}/LICENSE.md +1 -4
  533. {arelle_release-2.17.1.dist-info → arelle_release-2.37.71.dist-info}/top_level.txt +0 -1
  534. arelle/DialogOpenTaxonomyPackage.py +0 -1
  535. arelle/RenderingResolver.py +0 -624
  536. arelle/examples/.pydevproject +0 -5
  537. arelle/examples/CustomLogger.py +0 -43
  538. arelle/examples/LoadEFMvalidate.py +0 -32
  539. arelle/examples/LoadSavePreLbCsv.py +0 -26
  540. arelle/examples/LoadValidate.cs +0 -31
  541. arelle/examples/LoadValidate.py +0 -36
  542. arelle/examples/LoadValidateCmdLine.java +0 -69
  543. arelle/examples/LoadValidatePostedZip.java +0 -57
  544. arelle/examples/LoadValidateWebService.java +0 -34
  545. arelle/examples/SaveTableToExelle.py +0 -140
  546. arelle/examples/TR3toTR4.py +0 -88
  547. arelle/examples/plugin/bigInstance.py +0 -394
  548. arelle/examples/plugin/cmdWebServerExtension.py +0 -42
  549. arelle/examples/plugin/crashTest.py +0 -38
  550. arelle/examples/plugin/formulaSuiteConverter.py +0 -212
  551. arelle/examples/plugin/functionsCustom.py +0 -59
  552. arelle/examples/plugin/hello_dolly.py +0 -64
  553. arelle/examples/plugin/hello_i18n.pot +0 -26
  554. arelle/examples/plugin/hello_i18n.py +0 -32
  555. arelle/examples/plugin/importTestChild1.py +0 -21
  556. arelle/examples/plugin/importTestChild2.py +0 -22
  557. arelle/examples/plugin/importTestGrandchild1.py +0 -21
  558. arelle/examples/plugin/importTestGrandchild2.py +0 -21
  559. arelle/examples/plugin/importTestImported1.py +0 -23
  560. arelle/examples/plugin/importTestImported11.py +0 -22
  561. arelle/examples/plugin/importTestParent.py +0 -48
  562. arelle/examples/plugin/locale/fr/LC_MESSAGES/hello_i18n.po +0 -25
  563. arelle/examples/plugin/packagedImportTest/__init__.py +0 -47
  564. arelle/examples/plugin/packagedImportTest/importTestChild1.py +0 -21
  565. arelle/examples/plugin/packagedImportTest/importTestChild2.py +0 -22
  566. arelle/examples/plugin/packagedImportTest/importTestGrandchild1.py +0 -21
  567. arelle/examples/plugin/packagedImportTest/importTestGrandchild2.py +0 -21
  568. arelle/examples/plugin/packagedImportTest/importTestImported1.py +0 -24
  569. arelle/examples/plugin/packagedImportTest/importTestImported11.py +0 -21
  570. arelle/examples/plugin/packagedImportTest/subdir/importTestImported111.py +0 -21
  571. arelle/examples/plugin/packagedImportTest/subdir/subsubdir/importTestImported1111.py +0 -21
  572. arelle/examples/plugin/sakaCalendar.py +0 -215
  573. arelle/examples/plugin/saveInstanceInfoset.py +0 -121
  574. arelle/examples/plugin/streamingExtensions.py +0 -335
  575. arelle/examples/plugin/testcaseCalc11ValidateSetup.py +0 -32
  576. arelle/examples/plugin/testcaseIxExpectedHtmlFixup.py +0 -45
  577. arelle/examples/plugin/updateTableLB.py +0 -242
  578. arelle/examples/plugin/validate/XYZ/DisclosureSystems.py +0 -2
  579. arelle/examples/plugin/validate/XYZ/PluginValidationDataExtension.py +0 -10
  580. arelle/examples/plugin/validate/XYZ/ValidationPluginExtension.py +0 -49
  581. arelle/examples/plugin/validate/XYZ/__init__.py +0 -75
  582. arelle/examples/plugin/validate/XYZ/resources/config.xml +0 -16
  583. arelle/examples/plugin/validate/XYZ/rules/rules01.py +0 -109
  584. arelle/examples/plugin/validate/XYZ/rules/rules02.py +0 -58
  585. arelle/examples/plugin/validateSchemaLxml.py +0 -156
  586. arelle/examples/plugin/validateTableInfoset.py +0 -52
  587. arelle/examples/us-gaap-dei-docType-extraction-frm.xml +0 -90
  588. arelle/examples/us-gaap-dei-ratio-cash-frm.xml +0 -150
  589. arelle/plugin/functionsXmlCreation.py +0 -106
  590. arelle/plugin/instanceInfo.py +0 -306
  591. arelle/plugin/loadFromOIM-2018.py +0 -1282
  592. arelle/plugin/objectmaker.py +0 -285
  593. arelle/plugin/sphinx/FormulaGenerator.py +0 -823
  594. arelle/plugin/sphinx/SphinxContext.py +0 -404
  595. arelle/plugin/sphinx/SphinxEvaluator.py +0 -783
  596. arelle/plugin/sphinx/SphinxMethods.py +0 -1287
  597. arelle/plugin/sphinx/SphinxParser.py +0 -1093
  598. arelle/plugin/sphinx/SphinxValidator.py +0 -163
  599. arelle/plugin/sphinx/US-GAAP Ratios Example.xsr +0 -52
  600. arelle/plugin/sphinx/__init__.py +0 -285
  601. arelle/plugin/transforms/SEC/__init__.py +0 -308
  602. arelle/plugin/transforms/SEC/conf/README.md +0 -39
  603. arelle/plugin/transforms/SEC/conf/extractTestcase.sh +0 -2
  604. arelle/plugin/transforms/SEC/conf/extractTestcase.xsl +0 -109
  605. arelle/plugin/transforms/SEC/conf/runIxtSecTests.sh +0 -16
  606. arelle/plugin/transforms/SEC/conf/saxon9.jar +0 -0
  607. arelle/plugin/transforms/SEC/conf/testcase.xml +0 -7117
  608. arelle/plugin/transforms/SEC/conf/tests.xml +0 -848
  609. arelle/plugin/transforms/SEC/text2num.py +0 -110
  610. arelle/plugin/transforms/SEC/transformationRegistry/registry/ixt-sec-boolballotbox.xml +0 -66
  611. arelle/plugin/transforms/SEC/transformationRegistry/registry/ixt-sec-countrynameen.xml +0 -65
  612. arelle/plugin/transforms/SEC/transformationRegistry/registry/ixt-sec-datequarterend.xml +0 -66
  613. arelle/plugin/transforms/SEC/transformationRegistry/registry/ixt-sec-durday.xml +0 -61
  614. arelle/plugin/transforms/SEC/transformationRegistry/registry/ixt-sec-durhour.xml +0 -69
  615. arelle/plugin/transforms/SEC/transformationRegistry/registry/ixt-sec-durmonth.xml +0 -71
  616. arelle/plugin/transforms/SEC/transformationRegistry/registry/ixt-sec-durweek.xml +0 -70
  617. arelle/plugin/transforms/SEC/transformationRegistry/registry/ixt-sec-durwordsen.xml +0 -56
  618. arelle/plugin/transforms/SEC/transformationRegistry/registry/ixt-sec-duryear.xml +0 -64
  619. arelle/plugin/transforms/SEC/transformationRegistry/registry/ixt-sec-edgarprovcountryen.xml +0 -65
  620. arelle/plugin/transforms/SEC/transformationRegistry/registry/ixt-sec-entityfilercategoryen.xml +0 -63
  621. arelle/plugin/transforms/SEC/transformationRegistry/registry/ixt-sec-exchnameen.xml +0 -86
  622. arelle/plugin/transforms/SEC/transformationRegistry/registry/ixt-sec-numwordsen.xml +0 -55
  623. arelle/plugin/transforms/SEC/transformationRegistry/registry/ixt-sec-stateprovnameen.xml +0 -64
  624. arelle/plugin/transforms/SEC/transformationRegistry/registry/ixt-sec-yesnoballotbox.xml +0 -66
  625. arelle/plugin/transforms/SEC/transformationRegistry/registry/transform-registry.xml +0 -314
  626. arelle/plugin/transforms/SEC/transformationRegistry/schema/inlinexbrl-sec-transformation.xsd +0 -418
  627. arelle/plugin/validate/EFM/Consts.py +0 -362
  628. arelle/plugin/validate/EFM/DTS.py +0 -569
  629. arelle/plugin/validate/EFM/Dimensions.py +0 -264
  630. arelle/plugin/validate/EFM/Document.py +0 -206
  631. arelle/plugin/validate/EFM/Filing.py +0 -4383
  632. arelle/plugin/validate/EFM/IsolateSeparateIXDSes.py +0 -19
  633. arelle/plugin/validate/EFM/MessageNumericId.py +0 -142
  634. arelle/plugin/validate/EFM/PreCalAlignment.py +0 -324
  635. arelle/plugin/validate/EFM/Util.py +0 -688
  636. arelle/plugin/validate/EFM/__init__.py +0 -843
  637. arelle/plugin/validate/EFM/config.xml +0 -333
  638. arelle/plugin/validate/EFM/resources/README.md +0 -57
  639. arelle/plugin/validate/EFM/resources/axiswarnings.json +0 -27
  640. arelle/plugin/validate/EFM/resources/cef-deprecated-concepts.json +0 -8
  641. arelle/plugin/validate/EFM/resources/country-deprecated-concepts.json +0 -19
  642. arelle/plugin/validate/EFM/resources/currency-deprecated-concepts.json +0 -7
  643. arelle/plugin/validate/EFM/resources/dei-deprecated-concepts.json +0 -8
  644. arelle/plugin/validate/EFM/resources/dei-validations.json +0 -2884
  645. arelle/plugin/validate/EFM/resources/dqc-us-rules.json +0 -1389
  646. arelle/plugin/validate/EFM/resources/ecd-deprecated-concepts.json +0 -1
  647. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-16-4.xml +0 -115
  648. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-17-0-4.xml +0 -300
  649. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-17-1.xml +0 -304
  650. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-17-2.xml +0 -290
  651. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-17-3-1.xml +0 -294
  652. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-18.1.xml +0 -549
  653. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-18.2.xml +0 -506
  654. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-18.3.xml +0 -496
  655. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-19-1.xml +0 -662
  656. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-19-2.xml +0 -3761
  657. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-19-3.xml +0 -3577
  658. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-20-1.xml +0 -4020
  659. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-20-2.xml +0 -3320
  660. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-20-3.xml +0 -2998
  661. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-2012.xml +0 -957
  662. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-2013.xml +0 -982
  663. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-2014.xml +0 -1001
  664. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-2015.xml +0 -1076
  665. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-2016.xml +0 -120
  666. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-21-1.xml +0 -3329
  667. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-21-2.xml +0 -1230
  668. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-21-3.xml +0 -1113
  669. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-21-4.xml +0 -1321
  670. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-22-1-preview.xml +0 -1721
  671. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-22-1.xml +0 -1841
  672. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-22-2-2.xml +0 -1450
  673. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-22-2.xml +0 -1429
  674. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-22-4.xml +0 -1527
  675. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-23-1-1.xml +0 -2049
  676. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-23-1.xml +0 -2065
  677. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-23-2.xml +0 -1674
  678. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-23-3.xml +0 -1715
  679. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-all-years.xml +0 -10671
  680. arelle/plugin/validate/EFM/resources/edgartaxonomies/erxl.xsd +0 -69
  681. arelle/plugin/validate/EFM/resources/edgartaxonomies/extendedtaxonomies-all-years.xml +0 -18
  682. arelle/plugin/validate/EFM/resources/edgartaxonomies/ifrs-taxonomies.xml +0 -3126
  683. arelle/plugin/validate/EFM/resources/edgartaxonomies/ifrstaxonomies-all-years.xml +0 -22
  684. arelle/plugin/validate/EFM/resources/ex26-validations.json +0 -255
  685. arelle/plugin/validate/EFM/resources/exch-deprecated-concepts.json +0 -163
  686. arelle/plugin/validate/EFM/resources/ifrs-full-deprecated-concepts.json +0 -204
  687. arelle/plugin/validate/EFM/resources/invest-deprecated-concepts.json +0 -99
  688. arelle/plugin/validate/EFM/resources/ixbrl-transform-registries.json +0 -16
  689. arelle/plugin/validate/EFM/resources/naics-deprecated-concepts.json +0 -295
  690. arelle/plugin/validate/EFM/resources/oef-deprecated-concepts.json +0 -59
  691. arelle/plugin/validate/EFM/resources/other-standard-taxonomies.json +0 -12
  692. arelle/plugin/validate/EFM/resources/rr-deprecated-concepts.json +0 -14
  693. arelle/plugin/validate/EFM/resources/rxp-deprecated-concepts.json +0 -1
  694. arelle/plugin/validate/EFM/resources/shr-deprecated-concepts.json +0 -1
  695. arelle/plugin/validate/EFM/resources/sic-deprecated-concepts.json +0 -1
  696. arelle/plugin/validate/EFM/resources/signwarnings.json +0 -112
  697. arelle/plugin/validate/EFM/resources/srt-deprecated-concepts.json +0 -1
  698. arelle/plugin/validate/EFM/resources/stpr-deprecated-concepts.json +0 -1
  699. arelle/plugin/validate/EFM/resources/taxonomy-compatibility.json +0 -79
  700. arelle/plugin/validate/EFM/resources/us-gaap-deprecated-concepts.json +0 -2886
  701. arelle/plugin/validate/EFM/resources/us-gaap-rels-2020.json +0 -29068
  702. arelle/plugin/validate/EFM/resources/us-gaap-rels-2021.json +0 -29598
  703. arelle/plugin/validate/EFM/resources/us-gaap-rels-2022.json +0 -29141
  704. arelle/plugin/validate/EFM/resources/us-gaap-rels-2023.json +0 -29400
  705. arelle/plugin/validate/EFM/resources/vip-deprecated-concepts.json +0 -1
  706. arelle/plugin/validate/EFM/tools/CheckTxmyRefs.py +0 -180
  707. arelle/plugin/validate/EFM-htm/Const.py +0 -205
  708. arelle/plugin/validate/EFM-htm/__init__.py +0 -217
  709. arelle/plugin/validate/EFM-htm/config.xml +0 -17
  710. arelle/plugin/validate/EFM-htm/resources/efm-htm.dtd +0 -664
  711. arelle/plugin/validate/ESEF/ESEF_Current/Image.py +0 -199
  712. arelle/plugin/validate/ESEF_2022/__init__.py +0 -47
  713. arelle/plugin/validate/GFM/__init__.py +0 -59
  714. arelle/plugin/validate/GFM/config.xml +0 -82
  715. arelle/plugin/validate/SBRnl/CustomLoader.py +0 -19
  716. arelle/plugin/validate/SBRnl/DTS.py +0 -305
  717. arelle/plugin/validate/SBRnl/Dimensions.py +0 -357
  718. arelle/plugin/validate/SBRnl/Document.py +0 -799
  719. arelle/plugin/validate/SBRnl/Filing.py +0 -467
  720. arelle/plugin/validate/SBRnl/__init__.py +0 -75
  721. arelle/plugin/validate/SBRnl/config.xml +0 -26
  722. arelle/plugin/validate/SBRnl/sbr-nl-taxonomies.xml +0 -754
  723. arelle/plugin/validate/USBestPractices.py +0 -570
  724. arelle/plugin/validate/USCorpAction.py +0 -557
  725. arelle/plugin/validate/USSecTagging.py +0 -337
  726. arelle/plugin/validate/XDC/__init__.py +0 -77
  727. arelle/plugin/validate/XDC/config.xml +0 -20
  728. arelle/plugin/validate/XFsyntax/__init__.py +0 -64
  729. arelle/plugin/validate/XFsyntax/xf.py +0 -2227
  730. arelle/plugin/validate/__init__.py +0 -20
  731. arelle/plugin/validate/calc2.py +0 -536
  732. arelle/plugin/validateSBRnl.py +0 -530
  733. arelle/scripts-macOS/startWebServer.command +0 -3
  734. arelle/scripts-unix/startWebServer.sh +0 -1
  735. arelle/scripts-windows/startWebServer.bat +0 -5
  736. arelle_release-2.17.1.dist-info/RECORD +0 -676
  737. tests/__init__.py +0 -0
  738. tests/integration_tests/ui_tests/ArelleGUITest/ArelleGUITest/ArelleGUITest.csproj +0 -30
  739. tests/integration_tests/ui_tests/ArelleGUITest/ArelleGUITest/Tests.cs +0 -381
  740. tests/integration_tests/ui_tests/ArelleGUITest/ArelleGUITest/Usings.cs +0 -1
  741. tests/integration_tests/ui_tests/ArelleGUITest/ArelleGUITest.sln +0 -31
  742. tests/integration_tests/ui_tests/resources/workiva.zip +0 -0
  743. tests/integration_tests/validation/README.md +0 -50
  744. tests/integration_tests/validation/conformance_suite_config.py +0 -59
  745. tests/integration_tests/validation/conformance_suite_configs.py +0 -63
  746. tests/integration_tests/validation/conformance_suite_configurations/efm_current.py +0 -261
  747. tests/integration_tests/validation/conformance_suite_configurations/esef_ixbrl_2021.py +0 -85
  748. tests/integration_tests/validation/conformance_suite_configurations/esef_ixbrl_2022.py +0 -90
  749. tests/integration_tests/validation/conformance_suite_configurations/esef_xhtml_2021.py +0 -15
  750. tests/integration_tests/validation/conformance_suite_configurations/esef_xhtml_2022.py +0 -15
  751. tests/integration_tests/validation/conformance_suite_configurations/nl_nt16.py +0 -13
  752. tests/integration_tests/validation/conformance_suite_configurations/nl_nt17.py +0 -13
  753. tests/integration_tests/validation/conformance_suite_configurations/nl_nt18.py +0 -13
  754. tests/integration_tests/validation/conformance_suite_configurations/xbrl_2_1.py +0 -34
  755. tests/integration_tests/validation/conformance_suite_configurations/xbrl_calculations_1_1.py +0 -40
  756. tests/integration_tests/validation/conformance_suite_configurations/xbrl_dimensions_1_0.py +0 -28
  757. tests/integration_tests/validation/conformance_suite_configurations/xbrl_extensible_enumerations_1_0.py +0 -10
  758. tests/integration_tests/validation/conformance_suite_configurations/xbrl_extensible_enumerations_2_0.py +0 -10
  759. tests/integration_tests/validation/conformance_suite_configurations/xbrl_formula_1_0.py +0 -9
  760. tests/integration_tests/validation/conformance_suite_configurations/xbrl_formula_1_0_assertion_severity_2_0.py +0 -9
  761. tests/integration_tests/validation/conformance_suite_configurations/xbrl_formula_1_0_function_registry.py +0 -14
  762. tests/integration_tests/validation/conformance_suite_configurations/xbrl_ixbrl_1_1.py +0 -22
  763. tests/integration_tests/validation/conformance_suite_configurations/xbrl_link_role_registry_1_0.py +0 -11
  764. tests/integration_tests/validation/conformance_suite_configurations/xbrl_oim_1_0.py +0 -19
  765. tests/integration_tests/validation/conformance_suite_configurations/xbrl_table_linkbase_1_0.py +0 -296
  766. tests/integration_tests/validation/conformance_suite_configurations/xbrl_taxonomy_packages_1_0.py +0 -13
  767. tests/integration_tests/validation/conformance_suite_configurations/xbrl_transformation_registry_3.py +0 -13
  768. tests/integration_tests/validation/conformance_suite_configurations/xbrl_transformation_registry_4.py +0 -13
  769. tests/integration_tests/validation/conformance_suite_configurations/xbrl_transformation_registry_5.py +0 -13
  770. tests/integration_tests/validation/conformance_suite_configurations/xbrl_utr_malformed_1_0.py +0 -31
  771. tests/integration_tests/validation/conformance_suite_configurations/xbrl_utr_registry_1_0.py +0 -22
  772. tests/integration_tests/validation/conformance_suite_configurations/xbrl_utr_structure_1_0.py +0 -18
  773. tests/integration_tests/validation/conftest.py +0 -24
  774. tests/integration_tests/validation/discover_tests.py +0 -22
  775. tests/integration_tests/validation/download_conformance_suites.py +0 -47
  776. tests/integration_tests/validation/run_conformance_suites.py +0 -175
  777. tests/integration_tests/validation/test_conformance_suites.py +0 -14
  778. tests/integration_tests/validation/validation_util.py +0 -271
  779. tests/resources/conformance_suites/nl_nt16/br_kvk/2-04-invalid-period.xbrl +0 -63
  780. tests/resources/conformance_suites/nl_nt16/br_kvk/2-04-testcase.xml +0 -22
  781. tests/resources/conformance_suites/nl_nt16/br_kvk/3-01-missing.xbrl +0 -53
  782. tests/resources/conformance_suites/nl_nt16/br_kvk/3-01-multiple.xbrl +0 -60
  783. tests/resources/conformance_suites/nl_nt16/br_kvk/3-01-testcase.xml +0 -33
  784. tests/resources/conformance_suites/nl_nt16/br_kvk/4-07-invalid.xbrl +0 -57
  785. tests/resources/conformance_suites/nl_nt16/br_kvk/4-07-testcase.xml +0 -22
  786. tests/resources/conformance_suites/nl_nt16/br_kvk/4-10-invalid.xbrl +0 -58
  787. tests/resources/conformance_suites/nl_nt16/br_kvk/4-10-testcase.xml +0 -22
  788. tests/resources/conformance_suites/nl_nt16/br_kvk/4-12-invalid.xbrl +0 -63
  789. tests/resources/conformance_suites/nl_nt16/br_kvk/4-12-testcase.xml +0 -22
  790. tests/resources/conformance_suites/nl_nt16/br_kvk/4-16-missing.xbrl +0 -61
  791. tests/resources/conformance_suites/nl_nt16/br_kvk/4-16-testcase.xml +0 -22
  792. tests/resources/conformance_suites/nl_nt16/br_kvk/4-20-invalid-date.xbrl +0 -89
  793. tests/resources/conformance_suites/nl_nt16/br_kvk/4-20-testcase.xml +0 -22
  794. tests/resources/conformance_suites/nl_nt16/fr_kvk/1-01-invalid-file-extension.xml +0 -56
  795. tests/resources/conformance_suites/nl_nt16/fr_kvk/1-01-testcase.xml +0 -22
  796. tests/resources/conformance_suites/nl_nt16/fr_kvk/2-01-invalid-lang.xbrl +0 -56
  797. tests/resources/conformance_suites/nl_nt16/fr_kvk/2-01-missing-lang.xbrl +0 -55
  798. tests/resources/conformance_suites/nl_nt16/fr_kvk/2-01-testcase.xml +0 -33
  799. tests/resources/conformance_suites/nl_nt16/fr_kvk/2-03-entrypoint.xsd +0 -6
  800. tests/resources/conformance_suites/nl_nt16/fr_kvk/2-03-invalid-entrypoint.xbrl +0 -63
  801. tests/resources/conformance_suites/nl_nt16/fr_kvk/2-03-testcase.xml +0 -22
  802. tests/resources/conformance_suites/nl_nt16/fr_kvk/5-01-invalid-decimals.xbrl +0 -49
  803. tests/resources/conformance_suites/nl_nt16/fr_kvk/5-01-testcase.xml +0 -22
  804. tests/resources/conformance_suites/nl_nt16/fr_kvk/5-02-invalid-decimals.xbrl +0 -49
  805. tests/resources/conformance_suites/nl_nt16/fr_kvk/5-02-testcase.xml +0 -22
  806. tests/resources/conformance_suites/nl_nt16/fr_nl/1-01-invalid-file.xbrl +0 -2
  807. tests/resources/conformance_suites/nl_nt16/fr_nl/1-01-invalid-zip.zip +0 -0
  808. tests/resources/conformance_suites/nl_nt16/fr_nl/1-01-testcase.xml +0 -33
  809. tests/resources/conformance_suites/nl_nt16/fr_nl/1-03-invalid-doctype.xbrl +0 -4
  810. tests/resources/conformance_suites/nl_nt16/fr_nl/1-03-testcase.xml +0 -22
  811. tests/resources/conformance_suites/nl_nt16/fr_nl/1-05-invalid-encoding.xbrl +0 -0
  812. tests/resources/conformance_suites/nl_nt16/fr_nl/1-05-testcase.xml +0 -22
  813. tests/resources/conformance_suites/nl_nt16/fr_nl/1-06-testcase.xml +0 -22
  814. tests/resources/conformance_suites/nl_nt16/fr_nl/1-06.invalid.xbrl +0 -2
  815. tests/resources/conformance_suites/nl_nt16/fr_nl/2-06-invalid-file.xbrl +0 -8
  816. tests/resources/conformance_suites/nl_nt16/fr_nl/2-06-invalid-zip.zip +0 -0
  817. tests/resources/conformance_suites/nl_nt16/fr_nl/2-06-testcase.xml +0 -33
  818. tests/resources/conformance_suites/nl_nt16/index.xml +0 -20
  819. tests/resources/conformance_suites/nl_nt17/br_kvk/2-04-invalid-period.xbrl +0 -63
  820. tests/resources/conformance_suites/nl_nt17/br_kvk/2-04-testcase.xml +0 -22
  821. tests/resources/conformance_suites/nl_nt17/br_kvk/3-01-missing.xbrl +0 -53
  822. tests/resources/conformance_suites/nl_nt17/br_kvk/3-01-multiple.xbrl +0 -60
  823. tests/resources/conformance_suites/nl_nt17/br_kvk/3-01-testcase.xml +0 -33
  824. tests/resources/conformance_suites/nl_nt17/br_kvk/4-07-invalid.xbrl +0 -57
  825. tests/resources/conformance_suites/nl_nt17/br_kvk/4-07-testcase.xml +0 -22
  826. tests/resources/conformance_suites/nl_nt17/br_kvk/4-10-invalid.xbrl +0 -58
  827. tests/resources/conformance_suites/nl_nt17/br_kvk/4-10-testcase.xml +0 -22
  828. tests/resources/conformance_suites/nl_nt17/br_kvk/4-12-invalid.xbrl +0 -63
  829. tests/resources/conformance_suites/nl_nt17/br_kvk/4-12-testcase.xml +0 -22
  830. tests/resources/conformance_suites/nl_nt17/br_kvk/4-16-missing.xbrl +0 -61
  831. tests/resources/conformance_suites/nl_nt17/br_kvk/4-16-testcase.xml +0 -22
  832. tests/resources/conformance_suites/nl_nt17/br_kvk/4-20-invalid-date.xbrl +0 -89
  833. tests/resources/conformance_suites/nl_nt17/br_kvk/4-20-testcase.xml +0 -22
  834. tests/resources/conformance_suites/nl_nt17/fr_kvk/1-01-invalid-file-extension.xml +0 -56
  835. tests/resources/conformance_suites/nl_nt17/fr_kvk/1-01-testcase.xml +0 -22
  836. tests/resources/conformance_suites/nl_nt17/fr_kvk/2-01-invalid-lang.xbrl +0 -56
  837. tests/resources/conformance_suites/nl_nt17/fr_kvk/2-01-missing-lang.xbrl +0 -55
  838. tests/resources/conformance_suites/nl_nt17/fr_kvk/2-01-testcase.xml +0 -33
  839. tests/resources/conformance_suites/nl_nt17/fr_kvk/2-03-entrypoint.xsd +0 -6
  840. tests/resources/conformance_suites/nl_nt17/fr_kvk/2-03-invalid-entrypoint.xbrl +0 -63
  841. tests/resources/conformance_suites/nl_nt17/fr_kvk/2-03-testcase.xml +0 -22
  842. tests/resources/conformance_suites/nl_nt17/fr_kvk/5-01-invalid-decimals.xbrl +0 -49
  843. tests/resources/conformance_suites/nl_nt17/fr_kvk/5-01-testcase.xml +0 -22
  844. tests/resources/conformance_suites/nl_nt17/fr_kvk/5-02-invalid-decimals.xbrl +0 -49
  845. tests/resources/conformance_suites/nl_nt17/fr_kvk/5-02-testcase.xml +0 -22
  846. tests/resources/conformance_suites/nl_nt17/fr_nl/1-01-invalid-file.xbrl +0 -2
  847. tests/resources/conformance_suites/nl_nt17/fr_nl/1-01-invalid-zip.zip +0 -0
  848. tests/resources/conformance_suites/nl_nt17/fr_nl/1-01-testcase.xml +0 -33
  849. tests/resources/conformance_suites/nl_nt17/fr_nl/1-03-invalid-doctype.xbrl +0 -4
  850. tests/resources/conformance_suites/nl_nt17/fr_nl/1-03-testcase.xml +0 -22
  851. tests/resources/conformance_suites/nl_nt17/fr_nl/1-05-invalid-encoding.xbrl +0 -0
  852. tests/resources/conformance_suites/nl_nt17/fr_nl/1-05-testcases.xml +0 -22
  853. tests/resources/conformance_suites/nl_nt17/fr_nl/1-06-testcase.xml +0 -22
  854. tests/resources/conformance_suites/nl_nt17/fr_nl/1-06.invalid.xbrl +0 -2
  855. tests/resources/conformance_suites/nl_nt17/fr_nl/2-06-invalid-file.xbrl +0 -8
  856. tests/resources/conformance_suites/nl_nt17/fr_nl/2-06-invalid-zip.zip +0 -0
  857. tests/resources/conformance_suites/nl_nt17/fr_nl/2-06-testcase.xml +0 -33
  858. tests/resources/conformance_suites/nl_nt17/index.xml +0 -20
  859. tests/resources/conformance_suites/nl_nt18/fr_nl/1-03-invalid-doctype.xbrl +0 -4
  860. tests/resources/conformance_suites/nl_nt18/fr_nl/1-03-testcase.xml +0 -22
  861. tests/resources/conformance_suites/nl_nt18/fr_nl/1-05-invalid-encoding.xbrl +0 -0
  862. tests/resources/conformance_suites/nl_nt18/fr_nl/1-05-testcases.xml +0 -22
  863. tests/resources/conformance_suites/nl_nt18/fr_nl/1-06-testcase.xml +0 -22
  864. tests/resources/conformance_suites/nl_nt18/fr_nl/1-06.invalid.xbrl +0 -2
  865. tests/resources/conformance_suites/nl_nt18/fr_nl/1.01-invalid-file.xbrl +0 -2
  866. tests/resources/conformance_suites/nl_nt18/fr_nl/1.01-invalid-zip.zip +0 -0
  867. tests/resources/conformance_suites/nl_nt18/fr_nl/1.01-testcase.xml +0 -33
  868. tests/resources/conformance_suites/nl_nt18/fr_nl/2-06-invalid-file.xbrl +0 -8
  869. tests/resources/conformance_suites/nl_nt18/fr_nl/2-06-invalid-zip.zip +0 -0
  870. tests/resources/conformance_suites/nl_nt18/fr_nl/2-06-testcase.xml +0 -33
  871. tests/resources/conformance_suites/nl_nt18/index.xml +0 -8
  872. tests/unit_tests/arelle/conftest.py +0 -16
  873. tests/unit_tests/arelle/formula/test_fact_aspects_cache.py +0 -170
  874. tests/unit_tests/arelle/plugin/test_loadfromoim.py +0 -40
  875. tests/unit_tests/arelle/plugin/test_plugin_imports.py +0 -27
  876. tests/unit_tests/arelle/test_betafeatures.py +0 -81
  877. tests/unit_tests/arelle/test_cntlr.py +0 -28
  878. tests/unit_tests/arelle/test_import.py +0 -40
  879. tests/unit_tests/arelle/test_locale.py +0 -73
  880. tests/unit_tests/arelle/test_modelmanager.py +0 -15
  881. tests/unit_tests/arelle/test_packagemanager.py +0 -65
  882. tests/unit_tests/arelle/test_pluginmanager.py +0 -176
  883. tests/unit_tests/arelle/test_qname.py +0 -140
  884. tests/unit_tests/arelle/test_runtimeoptions.py +0 -56
  885. tests/unit_tests/arelle/test_system_info.py +0 -26
  886. tests/unit_tests/arelle/test_updater.py +0 -507
  887. tests/unit_tests/arelle/test_urlutil.py +0 -49
  888. tests/unit_tests/arelle/test_version.py +0 -46
  889. tests/unit_tests/arelle/utils/validate/test_decorator.py +0 -59
  890. /arelle/{examples/plugin/validate/XYZ → plugin/validate/EDINET}/rules/__init__.py +0 -0
  891. /arelle/plugin/validate/{HMRC → UK}/consistencyChecksByName.json +0 -0
  892. /arelle/plugin/validate/{HMRC → UK}/hmrc-taxonomies.xml +0 -0
  893. {arelle_release-2.17.1.dist-info → arelle_release-2.37.71.dist-info}/entry_points.txt +0 -0
@@ -1,1093 +0,0 @@
1
- '''
2
- SphinxParser is an example of a package plug-in parser for the CoreFiling Sphinx language.
3
-
4
- See COPYRIGHT.md for copyright information.
5
-
6
- Sphinx is a Rules Language for XBRL described by a Sphinx 2 Primer
7
- (c) Copyright 2012 CoreFiling, Oxford UK.
8
- Sphinx copyright applies to the Sphinx language, not to this software.
9
- Workiva, Inc. conveys neither rights nor license for the Sphinx language.
10
- '''
11
-
12
- import time, sys, os, os.path, zipfile
13
- import regex as re
14
- from arelle.ModelValue import qname
15
- from arelle.ModelFormulaObject import Aspect, aspectStr
16
- from arelle.ModelXbrl import DEFAULT, NONDEFAULT, DEFAULTorNONDEFAULT
17
-
18
- # Debugging flag can be set to either "debug_flag=True" or "debug_flag=False"
19
- debug_flag=True
20
-
21
- logMessage = None
22
- sphinxFile = None
23
- lastLoc = 0
24
- lineno = None
25
- xmlns = {}
26
-
27
- reservedWords = {"tuple", "primary", "entity", "period", "unit", "segment", "scenario",
28
- "NaN", "unbound", "none"}
29
-
30
- isGrammarCompiled = False
31
-
32
- class PrefixError(Exception):
33
- def __init__(self, qnameToken):
34
- self.qname = qnameToken
35
- self.message = "QName prefix undeclared"
36
- self.args = ( self.__repr__(), )
37
- def __repr__(self):
38
- return _("QName prefix undeclared: {0}").format(self.qname)
39
-
40
- # parse operations ("compile methods") are listed alphabetically
41
-
42
- def compileAnnotation( sourceStr, loc, toks ):
43
- return None
44
-
45
- def compileAnnotationDeclaration( sourceStr, loc, toks ):
46
- global lastLoc # for exception handling
47
- lastLoc = loc
48
- return astAnnotationDeclaration(sourceStr, loc, toks[0], toks[1] if len(toks) > 1 else None)
49
-
50
- def compileBinaryOperation( sourceStr, loc, toks ):
51
- if len(toks) == 1:
52
- return toks
53
- global lastLoc; lastLoc = loc
54
- return astBinaryOperation(sourceStr, loc, toks[0], toks[1], toks[2])
55
-
56
- def compileBrackets( sourceStr, loc, toks ):
57
- if len(toks) == 1: # parentheses around an expression
58
- return astUnaryOperation(sourceStr, loc, "brackets", toks[0])
59
- return astFunctionReference(sourceStr, loc, "list", [tok for tok in toks if tok != ','])
60
-
61
- def compileComment( sourceStr, loc, toks ):
62
- global lastLoc; lastLoc = loc
63
- return astComment(sourceStr, loc, toks[0])
64
-
65
- def compileConstant( sourceStr, loc, toks ):
66
- return astConstant(sourceStr, loc, toks)
67
-
68
- def compileFloatLiteral( sourceStr, loc, toks ):
69
- global lastLoc; lastLoc = loc
70
- return astNumericLiteral(sourceStr, loc, float(toks[0]))
71
-
72
- def compileFor( sourceStr, loc, toks ):
73
- global lastLoc; lastLoc = loc
74
- return astFor(sourceStr, loc, toks[1], toks[2], toks[3])
75
-
76
- def compileFormulaRule( sourceStr, loc, toks ):
77
- return astFormulaRule(sourceStr, loc, toks)
78
-
79
- def compileFunctionDeclaration( sourceStr, loc, toks ):
80
- global lastLoc; lastLoc = loc
81
- return astFunctionDeclaration(sourceStr, loc, toks[0], toks[1], toks[3:-2], toks[-1])
82
-
83
- def compileFunctionReference( sourceStr, loc, toks ):
84
- global lastLoc; lastLoc = loc
85
- name = toks[0]
86
- if isinstance(name, astFunctionReference) and not name.args:
87
- name = name.name
88
- if name == "unit":
89
- try:
90
- return astFunctionReference(sourceStr, loc, name, toks[astQnameLiteral(sourceStr, loc, toks[1])])
91
- except PrefixError as err:
92
- logMessage("ERROR", "sphinxCompiler:missingXmlnsDeclarations",
93
- _("Missing xmlns for prefix in unit %(qname)s"),
94
- sourceFileLines=((sphinxFile, lineno(loc, sourceStr)),),
95
- qname=err.qname)
96
- return None
97
- # compile any args
98
- return astFunctionReference(sourceStr, loc, name, toks[1:])
99
-
100
- def compileHyperspaceAxis( sourceStr, loc, toks ):
101
- try:
102
- return astHyperspaceAxis( sourceStr, loc, toks )
103
- except PrefixError as err:
104
- logMessage("ERROR", "sphinxCompiler:missingXmlnsDeclarations",
105
- _("Missing xmlns for prefix in %(qname)s"),
106
- sourceFileLines=((sphinxFile, lineno(loc, sourceStr)),),
107
- qname=err.qname)
108
- return None
109
-
110
- def compileHyperspaceExpression( sourceStr, loc, toks ):
111
- try:
112
- return astHyperspaceExpression(sourceStr, loc, toks)
113
- except PrefixError as err:
114
- logMessage("ERROR", "sphinxCompiler:missingXmlnsDeclarations",
115
- _("Missing xmlns for prefix in %(qname)s"),
116
- sourceFileLines=((sphinxFile, lineno(loc, sourceStr)),),
117
- qname=err.qname)
118
- return None
119
-
120
- def compileIf( sourceStr, loc, toks ):
121
- global lastLoc; lastLoc = loc
122
- return astIf(sourceStr, loc, toks[1], toks[2], toks[3])
123
-
124
- def compileIntegerLiteral( sourceStr, loc, toks ):
125
- global lastLoc; lastLoc = loc
126
- return astNumericLiteral(sourceStr, loc, int(toks[0]))
127
-
128
- def compileMessage( sourceStr, loc, toks ):
129
- # construct a message object and return it
130
- global lastLoc; lastLoc = loc
131
- return astMessage(sourceStr, loc, toks[0])
132
-
133
- def compileMethodReference( sourceStr, loc, toks ):
134
- if len(toks) == 1:
135
- return toks
136
- global lastLoc; lastLoc = loc
137
- if len(toks) > 1 and toks[0] == "::": # method with no object, e.g., ::taxonomy
138
- result = None
139
- methNameTokNdx = 1
140
- elif len(toks) > 2 and toks[1] == "::":
141
- result = toks[0]
142
- methNameTokNdx = 2
143
- else:
144
- return toks
145
- while methNameTokNdx < len(toks):
146
- taggedExpr = toks[methNameTokNdx]
147
- if isinstance(taggedExpr, astTagAssignment):
148
- methArg = taggedExpr.expr
149
- else:
150
- methArg = taggedExpr
151
- if isinstance(methArg, str):
152
- methName = methArg
153
- methArgs = []
154
- elif isinstance(methArg, astQnameLiteral) and methArg.value.namespaceURI is None:
155
- methName = methArg.value.localName
156
- methArgs = []
157
- elif isinstance(methArg, astFunctionReference):
158
- methName = methArg.name
159
- methArgs = methArg.args
160
- else:
161
- logMessage("ERROR", "sphinxCompiler:methodNameNotRecognized",
162
- _("Method name not recognized: %(name)s"),
163
- sourceFileLines=((sphinxFile, lineno(loc, sourceStr)),),
164
- name=methArg)
165
- return "none" # probably syntax error?? need message???
166
- result = astMethodReference(sourceStr, loc, methName, [result] + methArgs)
167
- if isinstance(taggedExpr, astTagAssignment):
168
- taggedExpr.expr = result
169
- result = taggedExpr
170
- if methNameTokNdx + 2 < len(toks) and toks[methNameTokNdx + 1] == "::":
171
- methNameTokNdx += 2
172
- else:
173
- # probably suntax if extra toks
174
- break
175
- return result
176
-
177
- def compileNamespaceDeclaration( sourceStr, loc, toks ):
178
- global lastLoc; lastLoc = loc
179
- prefix = None if len(toks) == 2 else toks[1]
180
- namespaceNode = toks[-1]
181
- if prefix in xmlns:
182
- logMessage("ERROR", "sphinxCompiler:multipleXmlnsDeclarations",
183
- _("Duplicate xmlns for prefix %(prefix)s"),
184
- sourceFileLines=((sphinxFile, lineno(loc, sourceStr)),),
185
- prefix=prefix)
186
- elif not isinstance(namespaceNode, astStringLiteral):
187
- logMessage("ERROR", "sphinxCompiler:xmlnsNotStringConstant",
188
- _("Xmlns for prefix %(prefix)s does not assign a string constant."),
189
- sourceFileLines=((sphinxFile, lineno(loc, sourceStr)),),
190
- prefix=prefix)
191
- else:
192
- namespace = namespaceNode.text
193
- xmlns[prefix] = namespace
194
- return astNamespaceDeclaration(sourceStr, loc, prefix, namespace)
195
- return astNoOp(sourceStr, loc)
196
-
197
- def compileOp( sourceStr, loc, toks ):
198
- global lastLoc; lastLoc = loc
199
- return toks
200
-
201
- def compilePackageDeclaration( sourceStr, loc, toks ):
202
- global lastLoc; lastLoc = loc
203
- global currentPackage
204
- currentPackage = toks[0]
205
- return None
206
-
207
- def compilePrecondition( sourceStr, loc, toks ):
208
- # construct a precondition object and return it
209
- return astPreconditionReference(sourceStr, loc, toks)
210
-
211
- def compilePreconditionDeclaration( sourceStr, loc, toks ):
212
- global lastLoc; lastLoc = loc
213
- if len(toks) >= 2 and toks[-2] == "otherwise": # has otherwise
214
- return astPreconditionReference(sourceStr, loc, toks[0:-2], toks[-1])
215
- return astPreconditionDeclaration(sourceStr, loc, toks[0], toks[1], None)
216
-
217
- def compileQname( sourceStr, loc, toks ):
218
- global lastLoc; lastLoc = loc
219
- qnameTok = toks[0]
220
- if qnameTok in {"error", "warning", "info", "pass"}:
221
- return astFunctionReference(sourceStr, loc, qnameTok, [])
222
- return astQnameLiteral(sourceStr, loc, qnameTok)
223
-
224
- def compileReportRule( sourceStr, loc, toks ):
225
- return astReportRule(sourceStr, loc, toks)
226
-
227
- def compileRuleBase( sourceStr, loc, toks ):
228
- global lastLoc; lastLoc = loc
229
- result = [tok for tok in toks if isinstance(tok, astTransform)]
230
- if len(toks) >= 1 and isinstance(toks[0], astPreconditionReference):
231
- result.insert(0, astRuleBasePrecondition(sourceStr, loc, toks[0]))
232
- return result
233
-
234
- def compileSeverity( sourceStr, loc, toks ):
235
- global lastLoc; lastLoc = loc
236
- # construct a severity object and return it
237
- return astSeverity(sourceStr, loc, toks[0])
238
-
239
- def compileStringLiteral( sourceStr, loc, toks ):
240
- global lastLoc; lastLoc = loc
241
- return astStringLiteral(sourceStr, loc, toks[0])
242
-
243
- def compileTagAssignment( sourceStr, loc, toks ):
244
- if len(toks) == 1:
245
- return toks
246
- global lastLoc; lastLoc = loc
247
- return astTagAssignment(sourceStr, loc, toks[2], toks[0])
248
-
249
- def compileTransform( sourceStr, loc, toks ):
250
- global lastLoc; lastLoc = loc
251
- return astTransform(sourceStr, loc, toks[0], toks[1], toks[2])
252
-
253
- def compileUnaryOperation( sourceStr, loc, toks ):
254
- if len(toks) == 1:
255
- return toks
256
- global lastLoc; lastLoc = loc
257
- return astUnaryOperation(sourceStr, loc, toks[0], toks[1])
258
-
259
- def compileValuesIteration( sourceStr, loc, toks ):
260
- if len(toks) == 1:
261
- return toks
262
- global lastLoc; lastLoc = loc
263
- return astValuesIteration(sourceStr, loc, toks[1])
264
-
265
- def compileValidationRule( sourceStr, loc, toks ):
266
- return astValidationRule(sourceStr, loc, toks)
267
-
268
- def compileVariableAssignment( sourceStr, loc, toks ):
269
- if len(toks) == 1:
270
- return toks
271
- return astVariableAssignment(sourceStr, loc, toks)
272
-
273
- def compileVariableReference( sourceStr, loc, toks ):
274
- global lastLoc; lastLoc = loc
275
- return astVariableReference(sourceStr, loc, toks[0][1:])
276
-
277
- def compileWith( sourceStr, loc, toks ):
278
- if len(toks) == 1:
279
- return toks
280
- return astWith(sourceStr, loc, toks[1], toks[2:-1], toks[-1])
281
-
282
- class astNode:
283
- def __init__(self, sourceStr=None, loc=None):
284
- self.sphinxFile = sphinxFile
285
- self.sourceStr = sourceStr
286
- self.loc = loc
287
- global lastLoc # for exception handling
288
- lastLoc = loc
289
-
290
- def clear(self):
291
- self.__dict__.clear() # delete local attributes
292
-
293
- @property
294
- def sourceLine(self):
295
- if self.sourceStr and self.loc:
296
- return lineno(self.loc, self.sourceStr)
297
- return None # no line number available
298
-
299
- @property
300
- def sourceFileLine(self):
301
- return (self.sphinxFile, self.sourceLine)
302
-
303
- @property
304
- def nodeTypeName(self):
305
- return type(self).__name__[3:]
306
-
307
- def __repr__(self):
308
- return "{0}({1})".format(type(self).__name__, "")
309
-
310
- # subtypes of astNode are arranged alphabetically
311
-
312
- class astAnnotationDeclaration(astNode):
313
- def __init__(self, sourceStr, loc, name, annotationType):
314
- super(astAnnotationDeclaration, self).__init__(sourceStr, loc)
315
- self.name = name
316
- self.annotationType = annotationType # "string"
317
- def __repr__(self):
318
- return "annotationDeclaration({0}{2}(".format(self.name,
319
- (" as " + self.annotationType) if self.annotationType else "")
320
-
321
- class astBinaryOperation(astNode):
322
- def __init__(self, sourceStr, loc, leftExpr, op, rightExpr):
323
- super(astBinaryOperation, self).__init__(sourceStr, loc)
324
- self.op = op
325
- self.leftExpr = leftExpr
326
- self.rightExpr = rightExpr
327
- def __repr__(self):
328
- return "binaryOperation({0} {1} {2})".format(self.leftExpr, self.op, self.rightExpr)
329
-
330
- class astComment(astNode):
331
- def __init__(self, sourceStr, loc, text):
332
- super(astComment, self).__init__(sourceStr, loc)
333
- self.text = text
334
- def __repr__(self):
335
- return "comment({0})".format(self.text)
336
-
337
- class astConstant(astNode):
338
- def __init__(self, sourceStr, loc, toks):
339
- super(astConstant, self).__init__(sourceStr, loc)
340
- self.constantName = toks[0]
341
- self.expr = toks[-1]
342
- self.value = None # dynamically assigned
343
- self.tagName = None
344
- if len(toks) > 2 and toks[1] == "#": # has tag
345
- if len(toks) > 4: # named tag
346
- self.tagName = toks[2]
347
- else: # use name for tag
348
- self.tagName = self.constantName
349
- def __repr__(self):
350
- return "constant({0}{1} = {2})".format(self.constantName,
351
- ("#" + self.tagName) if self.tagName else "",
352
- self.expr)
353
-
354
- namedAxes = {"primary": Aspect.CONCEPT,
355
- "entity": Aspect.ENTITY_IDENTIFIER,
356
- "period": Aspect.PERIOD,
357
- "segment": Aspect.NON_XDT_SEGMENT,
358
- "scenario":Aspect.NON_XDT_SCENARIO,
359
- "unit": Aspect.UNIT}
360
-
361
- class astFor(astNode):
362
- def __init__(self, sourceStr, loc, name, collectionExpr, expr):
363
- super(astFor, self).__init__(sourceStr, loc)
364
- self.name = name
365
- self.collectionExpr = collectionExpr
366
- self.expr = expr
367
- def __repr__(self):
368
- return "for({0} in {1}, {2})".format(self.name, self.collectionExpr, self.expr)
369
-
370
- class astFunctionDeclaration(astNode):
371
- def __init__(self, sourceStr, loc, functionType, name, params, expr):
372
- try:
373
- super(astFunctionDeclaration, self).__init__(sourceStr, loc)
374
- self.functionType = functionType # "function", "macro"
375
- self.name = name
376
- self.params = params
377
- if (expr) == "unit": # expr is a QName
378
- self.expr = astQnameLiteral(sourceStr, loc, expr)
379
- else:
380
- self.expr = expr
381
- except PrefixError as err:
382
- logMessage("ERROR", "sphinxCompiler:missingXmlnsDeclarations",
383
- _("Missing xmlns for prefix in %(qname)s"),
384
- sourceFileLines=((sphinxFile, lineno(loc, sourceStr)),),
385
- qname=err.qname)
386
- return None
387
- def __repr__(self):
388
- return "functionDeclaration({0}({1})) {2}".format(self.name,
389
- ", ".join(str(p) for p in self.params),
390
- self.expr)
391
-
392
- class astFunctionReference(astNode):
393
- def __init__(self, sourceStr, loc, name, args):
394
- super(astFunctionReference, self).__init__(sourceStr, loc)
395
- self.name = name
396
- self.localVariables = [a for a in args if isinstance(a, astVariableAssignment)]
397
- self.args = [a for a in args if not isinstance(a, astVariableAssignment)]
398
- def __repr__(self):
399
- return "functionReference({0}({1}))".format(self.name,
400
- ", ".join(str(a) for a in self.args))
401
-
402
- class astHyperspaceAxis(astNode):
403
- def __init__(self, sourceStr, loc, toks):
404
- STATE_AXIS_NAME_EXPECTED = 0
405
- STATE_AXIS_NAMED = 1
406
- STATE_EQ_VALUE = 10
407
- STATE_IN_LIST = 11
408
- STATE_AS_NAME = 20
409
- STATE_AS_NAMED = 21
410
- STATE_AS_EQ_VALUE = 22
411
- STATE_AS_EQ_WHERE = 23
412
- STATE_AS_RESTRICTION = 30
413
- STATE_WHERE = 40
414
- STATE_INDETERMINATE = 99
415
-
416
- super(astHyperspaceAxis, self).__init__(sourceStr, loc)
417
- self.aspect = None # case of only a where clause has no specified aspect
418
- self.name = None
419
- self.asVariableName = None
420
- self.restriction = None # qname, expr, * or **
421
- self.whereExpr = None
422
-
423
- state = STATE_AXIS_NAME_EXPECTED
424
- for tok in toks:
425
- if tok == "where" and state in (STATE_AXIS_NAME_EXPECTED, STATE_AS_EQ_WHERE):
426
- state = STATE_WHERE
427
- elif tok == "=" and state == STATE_EQ_VALUE:
428
- state = STATE_EQ_VALUE
429
- elif tok == "in" and state == STATE_AXIS_NAMED:
430
- state = STATE_IN_LIST
431
- elif tok == "as" and state == STATE_AXIS_NAMED:
432
- state = STATE_AS_NAME
433
- elif tok == "=" and state == STATE_AXIS_NAMED:
434
- state = STATE_EQ_VALUE
435
- elif tok == "=" and state == STATE_AS_NAMED:
436
- state = STATE_AS_EQ_VALUE
437
- elif state == STATE_AXIS_NAME_EXPECTED:
438
- if isinstance(tok, astQnameLiteral):
439
- axisQname = tok.value
440
- if axisQname.namespaceURI is None and axisQname.localName in namedAxes:
441
- self.name = axisQname.localName
442
- self.aspect = namedAxes[self.name]
443
- else:
444
- self.name = self.aspect = axisQname
445
- elif isinstance(tok, astVariableReference):
446
- self.name = '$' + tok.variableName
447
- self.aspect = tok
448
- elif tok in namedAxes: # e.g., "primary"
449
- self.name = tok
450
- self.aspect = namedAxes[tok]
451
- state = STATE_AXIS_NAMED
452
- elif state in (STATE_EQ_VALUE, STATE_AS_EQ_VALUE):
453
- if isinstance(tok, astNode):
454
- self.restriction = [tok]
455
- elif tok == '*':
456
- self.restriction = (NONDEFAULT,)
457
- elif tok == '**':
458
- self.restriction = (DEFAULTorNONDEFAULT,)
459
- elif tok == 'none':
460
- self.restriction = (DEFAULT,)
461
- elif isinstance(tok, str):
462
- self.restriction = [astQnameLiteral(sourceStr, loc, tok)]
463
- elif isinstance(tok, astQnameLiteral):
464
- self.restriction = [tok]
465
- state = {STATE_EQ_VALUE: STATE_INDETERMINATE,
466
- STATE_AS_EQ_VALUE: STATE_AS_EQ_WHERE}[state]
467
- elif state == STATE_IN_LIST:
468
- self.restriction = tok
469
- state = STATE_INDETERMINATE
470
- elif state == STATE_AS_NAME:
471
- self.asVariableName = tok
472
- state = STATE_AS_NAMED
473
- elif state == STATE_WHERE:
474
- self.whereExpr = tok
475
- state = STATE_INDETERMINATE
476
- else:
477
- logMessage("ERROR", "sphinxCompiler:axisIndeterminate",
478
- _("Axis indeterminte expression at %(element)s."),
479
- sourceFileLines=((sphinxFile, lineno(loc, sourceStr)),),
480
- element=tok)
481
- def __repr__(self):
482
- if self.name:
483
- s = str(self.name)
484
- else:
485
- s = ""
486
- if self.asVariableName:
487
- s += " as " + str(self.asVariableName) + "=" + str(self.restriction)
488
- elif self.restriction:
489
- if isinstance(self.restriction, (tuple,list)) and len(self.restriction) == 1:
490
- s += "=" + str(self.restriction[0])
491
- else:
492
- s += " in " + str(self.restriction)
493
- if self.whereExpr:
494
- s += " where " + str(self.whereExpr)
495
- return s
496
-
497
- class astHyperspaceExpression(astNode):
498
- def __init__(self, sourceStr, loc, toks):
499
- super(astHyperspaceExpression, self).__init__(sourceStr, loc)
500
- self.isClosed = False
501
- self.axes = []
502
- for i, tok in enumerate(toks):
503
- if tok in ('[', '[['):
504
- if i == 1:
505
- self.axes.append(astHyperspaceAxis(sourceStr, loc,
506
- ["primary", "=", toks[i-1]]))
507
- self.isClosed = tok == '[['
508
- elif tok in (']', ']]'):
509
- if self.isClosed != tok == ']]':
510
- logMessage("ERROR", "sphinxCompiler:mismatchedClosed",
511
- _("Axis restrictions syntax mismatches closed brackets."),
512
- sourceFileLines=((sphinxFile, lineno(loc, sourceStr)),))
513
- elif isinstance(tok, astHyperspaceAxis):
514
- self.axes.append(tok)
515
-
516
- def __repr__(self):
517
- return "{0}{1}{2}".format({False:'[',True:'[['}[self.isClosed],
518
- "; ".join(str(axis) for axis in self.axes),
519
- {False:']',True:']]'}[self.isClosed])
520
-
521
- class astIf(astNode):
522
- def __init__(self, sourceStr, loc, condition, thenExpr, elseExpr):
523
- super(astIf, self).__init__(sourceStr, loc)
524
- self.condition = condition
525
- self.thenExpr = thenExpr
526
- self.elseExpr = elseExpr
527
- def __repr__(self):
528
- return "if(({0}) {1} else {2})".format(self.condition, self.thenExpr, self.elseExpr)
529
-
530
- class astMessage(astNode):
531
- def __init__(self, sourceStr, loc, message):
532
- super(astMessage, self).__init__(sourceStr, loc)
533
- self.message = message
534
- def __repr__(self):
535
- return "message({0})".format(self.message)
536
-
537
- class astMethodReference(astNode):
538
- def __init__(self, sourceStr, loc, name, args):
539
- super(astMethodReference, self).__init__(sourceStr, loc)
540
- self.name = name
541
- self.args = args
542
- def __repr__(self):
543
- return "methodReference({0}({1}))".format(self.name,
544
- ", ".join(str(a) for a in self.args))
545
-
546
- class astNamespaceDeclaration(astNode):
547
- def __init__(self, sourceStr, loc, prefix, namespace):
548
- super(astNamespaceDeclaration, self).__init__(sourceStr, loc)
549
- self.prefix = prefix
550
- self.namespace = namespace
551
- def __repr__(self):
552
- return "xmlns{0}={1}".format((":" + self.prefix) if self.prefix else "",
553
- self.namespace)
554
-
555
- class astNoOp(astNode):
556
- def __init__(self, sourceStr, loc):
557
- super(astNoOp, self).__init__(sourceStr, loc)
558
- def __repr__(self):
559
- return "noOp()"
560
-
561
- class astNumericLiteral(astNode):
562
- def __init__(self, sourceStr, loc, value):
563
- super(astNumericLiteral, self).__init__(sourceStr, loc)
564
- self.value = value
565
- def __repr__(self):
566
- return "numericLiteral({0})".format(self.value)
567
-
568
- class astPreconditionDeclaration(astNode):
569
- def __init__(self, sourceStr, loc, name, expr, otherwiseExpr):
570
- super(astPreconditionDeclaration, self).__init__(sourceStr, loc)
571
- self.name = name
572
- self.expr = expr
573
- self.otherwiseExpr = otherwiseExpr
574
- def __repr__(self):
575
- return "preconditionDeclaration({0}, {1}(".format(self.name, self.expr)
576
-
577
- class astPreconditionReference(astNode):
578
- def __init__(self, sourceStr, loc, names):
579
- super(astPreconditionReference, self).__init__(sourceStr, loc)
580
- self.names = names
581
- def __repr__(self):
582
- return "preconditionReference({0})".format(self.names)
583
-
584
- class astQnameLiteral(astNode):
585
- def __init__(self, sourceStr, loc, qnameToken):
586
- super(astQnameLiteral, self).__init__(sourceStr, loc)
587
- try:
588
- self.value = qname(qnameToken,
589
- xmlns,
590
- prefixException=KeyError,
591
- noPrefixIsNoNamespace=(qnameToken in methodImplementation or
592
- qnameToken in reservedWords))
593
- except KeyError:
594
- raise PrefixError(qnameToken)
595
- def __repr__(self):
596
- return "qnameLiteral({0})".format(self.value)
597
-
598
- class astRuleBasePrecondition(astNode):
599
- def __init__(self, sourceStr, loc, precondition):
600
- super(astRuleBasePrecondition, self).__init__(sourceStr, loc)
601
- self.precondition = precondition
602
- def __repr__(self):
603
- return "ruleBasePrecondition({0})".format(self.precondition)
604
-
605
- class astSeverity(astNode):
606
- def __init__(self, sourceStr, loc, severity):
607
- super(astSeverity, self).__init__(sourceStr, loc)
608
- self.severity = severity
609
- def __repr__(self):
610
- return "severity({0})".format(self.severity)
611
-
612
- class astSourceFile(astNode):
613
- def __init__(self, fileName):
614
- super(astSourceFile, self).__init__(None, 0)
615
- self.fileName = fileName
616
- def __repr__(self):
617
- return "sourceFile({0})".format(self.fileName)
618
-
619
- escChar = {r"\n": "\n",
620
- r"\t": "\t",
621
- r"\b": "\b",
622
- r"\r": "\r",
623
- r"\f": "\f",
624
- r"\\": "\\",
625
- r"\'": "'",
626
- r"\"": '"'}
627
- class astStringLiteral(astNode):
628
- def __init__(self, sourceStr, loc, quotedString):
629
- super(astStringLiteral, self).__init__(sourceStr, loc)
630
- # dequote leading/trailing quotes and backslashed characters in sphinx table
631
- self.text = re.sub(r"\\[ntbrf\\'\"]",lambda m: escChar[m.group(0)], quotedString[1:-1])
632
- @property
633
- def value(self):
634
- return self.text
635
- def __repr__(self):
636
- return "stringLiteral({0})".format(self.text)
637
-
638
- class astTagAssignment(astNode):
639
- def __init__(self, sourceStr, loc, tagName, expr):
640
- super(astTagAssignment, self).__init__(sourceStr, loc)
641
- self.tagName = tagName
642
- self.expr = expr
643
- def __repr__(self):
644
- return "tagAssignment({0}#{1})".format(self.expr, self.tagName)
645
-
646
- class astTransform(astNode):
647
- def __init__(self, sourceStr, loc, transformType, fromExpr, toExpr):
648
- super(astTransform, self).__init__(sourceStr, loc)
649
- self.transformType = transformType
650
- self.fromExpr = fromExpr
651
- self.toExpr = toExpr
652
- def __repr__(self):
653
- return "transform({0}, {1}, {2})".format(self.transformType, self.fromTransform, self.toTransform)
654
-
655
- class astUnaryOperation(astNode):
656
- def __init__(self, sourceStr, loc, op, expr):
657
- super(astUnaryOperation, self).__init__(sourceStr, loc)
658
- self.op = op
659
- self.expr = expr
660
- def __repr__(self):
661
- return "unaryOperation({0} {1})".format(self.op, self.expr)
662
-
663
- class astValuesIteration(astNode):
664
- def __init__(self, sourceStr, loc, expr):
665
- super(astValuesIteration, self).__init__(sourceStr, loc)
666
- self.expr = expr
667
- def __repr__(self):
668
- return "values {0}".format(self.expr)
669
-
670
- class astRule(astNode):
671
- def __init__(self, sourceStr, loc, nodes):
672
- super(astRule, self).__init__(sourceStr, loc)
673
- self.name = None
674
- self.precondition = None
675
- self.severity = None
676
- self.message = None
677
- self.variableAssignments = []
678
- prev = None
679
- for node in nodes:
680
- if isinstance(node, astPreconditionReference):
681
- self.precondition = node
682
- elif isinstance(node, astSeverity):
683
- self.severity = node.severity
684
- elif isinstance(node, astMessage):
685
- self.message = node
686
- elif isinstance(node, astVariableAssignment):
687
- self.variableAssignments.append(node)
688
- else:
689
- if prev in ("formula", "report", "raise"):
690
- self.name = currentPackage + '.' + node if currentPackage else node
691
- self.expr = None
692
- elif prev == "bind": # formula only
693
- self.bind = node
694
- elif node not in ("bind", "formula", "report", "raise"):
695
- self.expr = node
696
- prev = node
697
-
698
- class astFormulaRule(astRule):
699
- def __init__(self, sourceStr, loc, nodes):
700
- self.bind = None
701
- super(astFormulaRule, self).__init__(sourceStr, loc, nodes)
702
- def __repr__(self):
703
- return "formula({0}name={1}, {2}{3}{4} := {5}{6})".format(
704
- ("str(self.precondition) + ", "" ) if self.precondition else "",
705
- self.name,
706
- (str(self.severity) + ", ") if self.severity else "",
707
- ("bind=" + str(self.bind) + ", ") if self.bind else "",
708
- self.expr,
709
- (", " + str(self.message)) if self.message else "")
710
-
711
- class astReportRule(astRule):
712
- def __init__(self, sourceStr, loc, nodes):
713
- super(astReportRule, self).__init__(sourceStr, loc, nodes)
714
- def __repr__(self):
715
- return "reportRule({0}report={1}, {2}{3}{4})".format(
716
- (str(self.precondition) + ", " ) if self.precondition else "",
717
- self.name,
718
- (str(self.severity) + ", ") if self.severity else "",
719
- self.expr,
720
- (", " + str(self.message)) if self.message else "")
721
-
722
- class astValidationRule(astRule):
723
- def __init__(self, sourceStr, loc, nodes):
724
- super(astValidationRule, self).__init__(sourceStr, loc, nodes)
725
- def __repr__(self):
726
- return "validationRule({0}raise={1}, {2}{3}{4})".format(
727
- (str(self.precondition) + ", " ) if self.precondition else "",
728
- self.name,
729
- (str(self.severity) + ", ") if self.severity else "",
730
- self.expr,
731
- (", " + str(self.message)) if self.message else "")
732
-
733
- class astVariableAssignment(astNode):
734
- def __init__(self, sourceStr, loc, toks):
735
- super(astVariableAssignment, self).__init__(sourceStr, loc)
736
- self.variableName = toks[0]
737
- self.expr = toks[-1]
738
- self.tagName = None
739
- if len(toks) > 2 and toks[1] == "#": # has tag
740
- if len(toks) > 3: # named tag
741
- self.tagName = toks[2]
742
- else: # use name for tag
743
- self.tagName = self.variableName
744
- def __repr__(self):
745
- return "variableAssignment({0}{1} = {2})".format(self.variableName,
746
- ("#" + self.tagName) if self.tagName else "",
747
- self.expr)
748
-
749
- class astVariableReference(astNode):
750
- def __init__(self, sourceStr, loc, variableName):
751
- super(astVariableReference, self).__init__(sourceStr, loc)
752
- self.variableName = variableName
753
- def __repr__(self):
754
- return "variableReference({0})".format(self.variableName)
755
-
756
- class astWith(astNode):
757
- def __init__(self, sourceStr, loc, withExpr, variableAssignments, bodyExpr):
758
- super(astWith, self).__init__(sourceStr, loc)
759
- self.restrictionExpr = withExpr
760
- self.variableAssignments = variableAssignments
761
- self.bodyExpr = bodyExpr
762
- def __repr__(self):
763
- return "with({0}, {1})".format(self.restrictionExpr, self.bodyExpr)
764
-
765
- def compileSphinxGrammar( cntlr ):
766
- global isGrammarCompiled, sphinxProg, lineno
767
-
768
- if isGrammarCompiled:
769
- return sphinxProg
770
-
771
- debugParsing = True
772
-
773
- cntlr.showStatus(_("Compiling Sphinx Grammar"))
774
- from pyparsing import (
775
- Word, Keyword, Literal, CaselessLiteral, Combine, Opt, nums, Forward, ZeroOrMore,
776
- StringEnd, ParserElement, quoted_string, delimitedList as DelimitedList, Suppress,
777
- Regex, lineno
778
- )
779
-
780
- ParserElement.enable_packrat()
781
-
782
- """
783
- the pyparsing parser constructs are defined in this method to prevent the need to compile
784
- the grammar when the plug in is loaded (which is likely to be when setting up GUI
785
- menus or command line parser).
786
-
787
- instead the grammar is compiled the first time that any sphinx needs to be parsed
788
-
789
- only the sphinxExpression (result below) needs to be global for the parser
790
- """
791
-
792
- # define grammar
793
- sphinxComment = Regex(r"/(?:\*(?:[^*]*\*+)+?/|/[^\n]*(?:\n[^\n]*)*?(?:(?<!\\)|\Z))").set_parse_action(compileComment)
794
-
795
- variableRef = Regex("[$]" # variable prefix
796
- # localname part
797
- "([A-Za-z\xC0-\xD6\xD8-\xF6\xF8-\xFF\u0100-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD_]"
798
- "[A-Za-z0-9\xC0-\xD6\xD8-\xF6\xF8-\xFF\u0100-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\u0300-\u036F\u203F-\u2040\xB7_.-]*)"
799
- )
800
-
801
-
802
- qName = Regex("([A-Za-z\xC0-\xD6\xD8-\xF6\xF8-\xFF\u0100-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD_]"
803
- "[A-Za-z0-9\xC0-\xD6\xD8-\xF6\xF8-\xFF\u0100-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\u0300-\u036F\u203F-\u2040\xB7_.-]*:)?"
804
- # localname or wildcard-localname part
805
- "([A-Za-z\xC0-\xD6\xD8-\xF6\xF8-\xFF\u0100-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD_]"
806
- "[A-Za-z0-9\xC0-\xD6\xD8-\xF6\xF8-\xFF\u0100-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\u0300-\u036F\u203F-\u2040\xB7_.-]*|[*])"
807
- )
808
-
809
- ncName = Regex("([A-Za-z\xC0-\xD6\xD8-\xF6\xF8-\xFF\u0100-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD_]"
810
- "[A-Za-z0-9\xC0-\xD6\xD8-\xF6\xF8-\xFF\u0100-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\u0300-\u036F\u203F-\u2040\xB7_.-]*)"
811
- ).set_name("ncName").set_debug(debugParsing)
812
-
813
- #annotationName = Word("@",alphanums + '_-.').set_name("annotationName").set_debug(debugParsing)
814
- annotationName = Regex("@[A-Za-z\xC0-\xD6\xD8-\xF6\xF8-\xFF\u0100-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD_]\w*").set_name("annotationName").set_debug(debugParsing)
815
-
816
-
817
- decimalPoint = Literal('.')
818
- exponentLiteral = CaselessLiteral('e')
819
- plusorminusLiteral = Literal('+') | Literal('-')
820
- digits = Word(nums)
821
- integerLiteral = Combine( Opt(plusorminusLiteral) + digits )
822
- decimalFractionLiteral = Combine( Opt(plusorminusLiteral) + decimalPoint + digits )
823
- infLiteral = Combine( Opt(plusorminusLiteral) + Literal("INF") )
824
- nanLiteral = Literal("NaN")
825
- floatLiteral = ( Combine( integerLiteral +
826
- ( ( decimalPoint + Opt(digits) + exponentLiteral + integerLiteral ) |
827
- ( exponentLiteral + integerLiteral ) |
828
- ( decimalPoint + Opt(digits) ) )
829
- ) |
830
- Combine( decimalFractionLiteral + exponentLiteral + integerLiteral ) |
831
- decimalFractionLiteral |
832
- infLiteral | nanLiteral )
833
-
834
-
835
- #emptySequence = Literal( "(" ) + Literal( ")" )
836
- lParen = Literal( "(" )
837
- rParen = Literal( ")" )
838
- lPred = Literal( "[[" ) | Literal("[")
839
- rPred = Literal( "]]" ) | Literal("]")
840
-
841
- commaOp = Literal(",")
842
- ifOp = Keyword("if")
843
- elseOp = Keyword("else")
844
- forOp = Keyword("for")
845
- inOp = Keyword("in")
846
- withOp = Keyword("with")
847
- notOp = Keyword("not")
848
- valuesOp = Keyword("values")
849
- andOp = Keyword("and")
850
- orOp = Keyword("or")
851
- neOp = Literal("!=")
852
- leOp = Literal("<=")
853
- ltOp = Literal("<")
854
- geOp = Literal(">=")
855
- gtOp = Literal(">")
856
- eqOp = Literal("==")
857
- compOp = leOp | ltOp | geOp | gtOp
858
- plusOp = Literal("|+|") | Literal("|+") | Literal("+|") | Literal("+")
859
- minusOp = Literal("|-|") | Literal("|-") | Literal("-|") | Literal("-")
860
- plusMinusOp = ( plusOp | minusOp ).set_parse_action(compileOp)
861
- multOp = Literal("*")
862
- divOp = Literal("/")
863
- varAssign = Literal("=")
864
- tagOp = Literal("#")
865
- asOp = Keyword("as")
866
- whereOp = Keyword("where")
867
- wildOp = Literal("**") | Literal("*")
868
- methodOp = Literal("::")
869
- formulaOp = Literal(":=")
870
-
871
- namespaceDeclaration = (Literal("xmlns") + Opt( Suppress(Literal(":")) + ncName ) + Suppress(Literal("=")) + quoted_string ).set_parse_action(compileNamespaceDeclaration).ignore(sphinxComment)
872
- annotationDeclaration = (Suppress(Keyword("annotation")) + ncName + Opt( Suppress(Keyword("as")) + ncName )).set_parse_action(compileAnnotationDeclaration).ignore(sphinxComment)
873
-
874
- packageDeclaration = (Suppress(Keyword("package")) + ncName ).set_parse_action(compilePackageDeclaration).ignore(sphinxComment)
875
-
876
- severity = ( Suppress(Keyword("severity")) + ( ncName ) ).set_parse_action(compileSeverity).ignore(sphinxComment)
877
-
878
- expr = Forward()
879
-
880
- atom = (
881
- ( forOp - Suppress(lParen) - ncName - Suppress(inOp) - expr - Suppress(rParen) - expr ).set_parse_action(compileFor) |
882
- ( ifOp - Suppress(lParen) - expr - Suppress(rParen) - expr - Suppress(elseOp) - expr ).set_parse_action(compileIf) |
883
- ( ncName + Suppress(lParen) + Opt(DelimitedList( ZeroOrMore( ( ncName + Opt( tagOp + Opt(ncName) ) + varAssign + expr + Suppress(Literal(";")) ).set_parse_action(compileVariableAssignment) ) +
884
- Opt( ncName + varAssign ) + expr
885
- )) + Suppress(rParen) ).set_parse_action(compileFunctionReference) |
886
- ( floatLiteral ).set_parse_action(compileFloatLiteral) |
887
- ( integerLiteral ).set_parse_action(compileIntegerLiteral) |
888
- ( quoted_string ).set_parse_action(compileStringLiteral) |
889
- ( Opt(qName) + lPred + Opt(DelimitedList( ((whereOp + expr) |
890
- ((qName | variableRef) + Opt( tagOp + Opt(ncName) ) +
891
- Opt( (varAssign + (wildOp | expr) |
892
- (inOp + expr) |
893
- (asOp + ncName + varAssign + wildOp + Opt( whereOp + expr ) ) ) ) )
894
- ).set_parse_action(compileHyperspaceAxis),
895
- delim=';')) + rPred).set_parse_action(compileHyperspaceExpression) |
896
- ( variableRef ).set_parse_action(compileVariableReference) |
897
- ( qName ).set_parse_action(compileQname) |
898
- ( Suppress(lParen) - expr - Opt( commaOp - Opt( expr - ZeroOrMore( commaOp - expr ) ) ) - Suppress(rParen) ).set_parse_action(compileBrackets)
899
- ).ignore(sphinxComment)
900
-
901
- atom.set_name("atom").set_debug(debugParsing)
902
-
903
- valueExpr = atom
904
- taggedExpr = ( valueExpr - Opt(tagOp - ncName) ).set_parse_action(compileTagAssignment).ignore(sphinxComment)
905
- methodExpr = ( ( methodOp + ncName + ZeroOrMore(methodOp + taggedExpr) ).set_parse_action(compileMethodReference) |
906
- ( ZeroOrMore(taggedExpr + methodOp) + taggedExpr )).set_parse_action(compileMethodReference).ignore(sphinxComment)
907
- unaryExpr = ( Opt(plusMinusOp) + methodExpr ).set_parse_action(compileUnaryOperation).ignore(sphinxComment)
908
- negateExpr = ( Opt(notOp) + unaryExpr ).set_parse_action(compileUnaryOperation).ignore(sphinxComment)
909
- valuesExpr = ( Opt(valuesOp) + negateExpr ).set_parse_action(compileValuesIteration).ignore(sphinxComment)
910
- method2Expr = ( valuesExpr + Opt( methodOp + methodExpr ) ).set_parse_action(compileMethodReference).ignore(sphinxComment)
911
- multiplyExpr = ( method2Expr + Opt( multOp + method2Expr ) ).set_parse_action(compileBinaryOperation).ignore(sphinxComment)
912
- divideExpr = ( multiplyExpr + Opt( divOp + multiplyExpr ) ).set_parse_action(compileBinaryOperation).ignore(sphinxComment)
913
- addExpr = ( divideExpr + Opt( plusOp + divideExpr ) ).set_parse_action(compileBinaryOperation).ignore(sphinxComment)
914
- subtractExpr = ( addExpr + Opt( minusOp + addExpr ) ).set_parse_action(compileBinaryOperation).ignore(sphinxComment)
915
- equalityExpr = ( subtractExpr + Opt( eqOp + subtractExpr ) ).set_parse_action(compileBinaryOperation).ignore(sphinxComment)
916
- inequalityExpr = ( equalityExpr + Opt( neOp + equalityExpr ) ).set_parse_action(compileBinaryOperation).ignore(sphinxComment)
917
- comparisonExpr = ( inequalityExpr + Opt( compOp + inequalityExpr ) ).set_parse_action(compileBinaryOperation).ignore(sphinxComment)
918
- andExpr = ( comparisonExpr + Opt( andOp + comparisonExpr ) ).set_parse_action(compileBinaryOperation ).ignore(sphinxComment)
919
- orExpr = ( andExpr + Opt( orOp + andExpr ) ).set_parse_action(compileBinaryOperation).ignore(sphinxComment)
920
- formulaExpr = ( orExpr + Opt( formulaOp + orExpr ) ).set_parse_action(compileBinaryOperation).ignore(sphinxComment)
921
- withExpr = ( Opt( withOp + Suppress(lParen) + expr + Suppress(rParen) ) +
922
- ZeroOrMore( ( ncName + Opt( tagOp + Opt(ncName) ) + varAssign + expr + Suppress(Literal(";")) ).set_parse_action(compileVariableAssignment).ignore(sphinxComment) ) +
923
- formulaExpr ).set_parse_action(compileWith)
924
- #parsedExpr = withExpr
925
- #parsedExpr.set_name("parsedExpr").set_debug(debugParsing)
926
-
927
- #expr << parsedExpr
928
- expr << withExpr
929
- expr.set_name("expr").set_debug(debugParsing)
930
-
931
- annotation = ( annotationName + Opt( Suppress(lParen) + Opt(DelimitedList(expr)) + Suppress(rParen) ) ).set_parse_action(compileAnnotation).ignore(sphinxComment).set_name("annotation").set_debug(debugParsing)
932
-
933
- constant = ( Suppress(Keyword("constant")) + ncName + Opt( tagOp + Opt(ncName) ) + varAssign + expr ).set_parse_action(compileConstant).ignore(sphinxComment)
934
-
935
- functionDeclaration = ( (Keyword("function") | Keyword("macro")) + ncName + lParen + Opt(DelimitedList(ncName)) + rParen + expr ).set_parse_action(compileFunctionDeclaration).ignore(sphinxComment)
936
-
937
- message = ( Suppress(Keyword("message")) + expr ).set_parse_action(compileMessage)
938
-
939
- preconditionDeclaration = ( Suppress(Keyword("precondition")) + ncName + expr +
940
- Opt(Keyword("otherwise") + Keyword("raise") + ncName + Opt( severity ) + Opt( message ) )
941
- ).set_parse_action(compilePreconditionDeclaration).ignore(sphinxComment)
942
-
943
- assignedExpr = ( ncName + Opt( tagOp + Opt(ncName) ) + varAssign + expr + Suppress(Literal(";")) ).set_parse_action(compileVariableAssignment).ignore(sphinxComment)
944
-
945
- precondition = ( Suppress(Keyword("require")) + DelimitedList(ncName) ).set_parse_action(compilePrecondition).ignore(sphinxComment).set_name("precondition").set_debug(debugParsing)
946
-
947
- formulaRule = ( Opt( precondition ) +
948
- Keyword("formula") + ncName +
949
- Opt( severity ) +
950
- Opt( ( Keyword("bind") + expr ) ) +
951
- ZeroOrMore( assignedExpr ) +
952
- expr +
953
- Opt( message )).set_parse_action(compileFormulaRule).ignore(sphinxComment)
954
- reportRule = ( Opt( precondition ) +
955
- Keyword("report") + ncName +
956
- Opt( severity ) +
957
- ZeroOrMore( assignedExpr ) +
958
- expr +
959
- Opt( message )).set_parse_action( compileReportRule).ignore(sphinxComment)
960
- validationRule = ( Opt( precondition ) +
961
- Keyword("raise") + ncName +
962
- Opt( severity ) +
963
- ZeroOrMore( assignedExpr ) +
964
- expr +
965
- Opt( message )).set_parse_action(compileValidationRule).ignore(sphinxComment)
966
-
967
- ruleBase = (Opt( precondition ) +
968
- Suppress(Keyword("rule-base")) +
969
- ZeroOrMore( (Suppress(Keyword("transform")) +
970
- (Keyword("namespace") + expr + Suppress(Keyword("to")) + expr) |
971
- (Keyword ("qname") + expr + Suppress(Keyword("to")) + expr)
972
- ).set_parse_action(compileTransform)
973
- )
974
- ).set_parse_action(compileRuleBase).ignore(sphinxComment).set_name("ruleBase").set_debug(debugParsing)
975
-
976
- sphinxProg = ( ZeroOrMore( namespaceDeclaration | sphinxComment ) +
977
- ZeroOrMore( annotationDeclaration |
978
- annotation |
979
- constant |
980
- preconditionDeclaration |
981
- packageDeclaration |
982
- functionDeclaration |
983
- ruleBase |
984
- formulaRule | reportRule | validationRule |
985
- sphinxComment
986
- )
987
- ) + StringEnd()
988
- sphinxProg.ignore(sphinxComment)
989
-
990
- startedAt = time.time()
991
- cntlr.modelManager.showStatus(_("initializing sphinx grammar"))
992
- sphinxProg.parse_string( "// force initialization\n", parseAll=True )
993
- from arelle.Locale import format_string
994
- logMessage("INFO", "info",
995
- format_string(cntlr.modelManager.locale,
996
- _("Sphinx grammar initialized in %.2f secs"),
997
- time.time() - startedAt))
998
-
999
- isGrammarCompiled = True
1000
-
1001
- return sphinxProg
1002
-
1003
- def parse(cntlr, _logMessage, sphinxFiles):
1004
- from pyparsing import ParseException, ParseSyntaxException
1005
-
1006
- global logMessage
1007
- logMessage = _logMessage
1008
-
1009
- sphinxGrammar = compileSphinxGrammar(cntlr)
1010
-
1011
- sphinxProgs = []
1012
-
1013
- successful = True
1014
-
1015
- def parseSourceString(sourceString):
1016
- global lastLoc, currentPackage
1017
- successful = True
1018
- cntlr.showStatus("Compiling sphinx file {0}".format(os.path.basename(sphinxFile)))
1019
-
1020
- try:
1021
- lastLoc = 0
1022
- currentPackage = None
1023
- prog = sphinxGrammar.parse_string( sourceString, parseAll=True )
1024
- xmlns.clear() # dereference xmlns definitions
1025
- prog.insert(0, astSourceFile(sphinxFile)) # keep the source file name
1026
- sphinxProgs.append( prog )
1027
- except (ParseException, ParseSyntaxException) as err:
1028
- from arelle.formula.XPathParser import exceptionErrorIndication
1029
- file = os.path.basename(sphinxFile)
1030
- logMessage("ERROR", "sphinxCompiler:syntaxError",
1031
- _("Parse error: \n%(error)s"),
1032
- sphinxFile=sphinxFile,
1033
- sourceFileLines=((file, lineno(err.loc,err.pstr)),),
1034
- error=exceptionErrorIndication(err))
1035
- successful = False
1036
- except (ValueError) as err:
1037
- file = os.path.basename(sphinxFile)
1038
- logMessage("ERROR", "sphinxCompiler:valueError",
1039
- _("Parsing terminated due to error: \n%(error)s"),
1040
- sphinxFile=sphinxFile,
1041
- sourceFileLines=((file,lineno(lastLoc,sourceString)),),
1042
- error=err)
1043
- successful = False
1044
- except Exception as err:
1045
- file = os.path.basename(sphinxFile)
1046
- logMessage("ERROR", "sphinxCompiler:parserException",
1047
- _("Parsing of terminated due to error: \n%(error)s"),
1048
- sphinxFile=sphinxFile,
1049
- sourceFileLines=((file,lineno(lastLoc,sourceString)),),
1050
- error=err, exc_info=True)
1051
- successful = False
1052
-
1053
- cntlr.showStatus("Compiled sphinx files {0}".format({True:"successful",
1054
- False:"with errors"}[successful]),
1055
- clearAfter=5000)
1056
- xmlns.clear()
1057
- return successful
1058
-
1059
- def parseFile(filename):
1060
- successful = True
1061
- # parse the xrb zip or individual xsr files
1062
- global sphinxFile
1063
- if os.path.isdir(filename):
1064
- for root, dirs, files in os.walk(filename):
1065
- for file in files:
1066
- sphinxFile = os.path.join(root, file)
1067
- parseFile(sphinxFile)
1068
- elif filename.endswith(".xrb"): # zip archive
1069
- archive = zipfile.ZipFile(filename, mode="r")
1070
- for zipinfo in archive.infolist():
1071
- zipcontent = zipinfo.filename
1072
- if zipcontent.endswith(".xsr"):
1073
- sphinxFile = os.path.join(filename, zipcontent)
1074
- if not parseSourceString( archive.read(zipcontent).decode("utf-8") ):
1075
- successful = False
1076
- archive.close()
1077
- elif filename.endswith(".xsr"):
1078
- sphinxFile = filename
1079
- with open(filename, "r", encoding="utf-8") as fh:
1080
- if not parseSourceString( fh.read() ):
1081
- successful = False
1082
- return successful
1083
-
1084
- successful = True
1085
- for filename in sphinxFiles:
1086
- if not parseFile(filename):
1087
- successful = False
1088
-
1089
- logMessage = None # dereference
1090
-
1091
- return sphinxProgs
1092
-
1093
- from .SphinxMethods import methodImplementation, aggreateFunctionImplementation