gulp-phug 1.3.3 → 1.3.5

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 (260) hide show
  1. package/index.js +23 -8
  2. package/package.json +4 -4
  3. package/support/composer.json +1 -1
  4. package/support/composer.lock +93 -178
  5. package/support/vendor/autoload.php +15 -0
  6. package/support/vendor/bin/phug +119 -0
  7. package/support/vendor/bin/var-dump-server +119 -0
  8. package/support/vendor/composer/ClassLoader.php +166 -32
  9. package/support/vendor/composer/InstalledVersions.php +387 -329
  10. package/support/vendor/composer/autoload_classmap.php +1 -5
  11. package/support/vendor/composer/autoload_files.php +2 -3
  12. package/support/vendor/composer/autoload_namespaces.php +1 -1
  13. package/support/vendor/composer/autoload_psr4.php +3 -4
  14. package/support/vendor/composer/autoload_real.php +12 -37
  15. package/support/vendor/composer/autoload_static.php +6 -17
  16. package/support/vendor/composer/installed.json +97 -184
  17. package/support/vendor/composer/installed.php +129 -151
  18. package/support/vendor/composer/platform_check.php +16 -4
  19. package/support/vendor/phug/phug/.github/workflows/coverage.yml +71 -0
  20. package/support/vendor/phug/phug/.github/workflows/multi-tester.yml +46 -0
  21. package/support/vendor/phug/phug/.github/workflows/split.yml +41 -0
  22. package/support/vendor/phug/phug/.github/workflows/style.yml +48 -0
  23. package/support/vendor/phug/phug/.github/workflows/tests.yml +49 -0
  24. package/support/vendor/phug/phug/.multi-tester.yml +42 -10
  25. package/support/vendor/phug/phug/composer.json +25 -16
  26. package/support/vendor/phug/phug/phpcs.xml +4 -0
  27. package/support/vendor/phug/phug/phpunit.xml +2 -0
  28. package/support/vendor/phug/phug/phug +1 -1
  29. package/support/vendor/phug/phug/release.php +8 -0
  30. package/support/vendor/phug/phug/src/Phug/Ast/Ast/Node.php +7 -1
  31. package/support/vendor/phug/phug/src/Phug/Ast/composer.json +1 -2
  32. package/support/vendor/phug/phug/src/Phug/Compiler/Compiler/Element/BlockElement.php +1 -1
  33. package/support/vendor/phug/phug/src/Phug/Compiler/Compiler/NodeCompiler/AssignmentNodeCompiler.php +9 -1
  34. package/support/vendor/phug/phug/src/Phug/Compiler/Compiler/NodeCompiler/AttributeNodeCompiler.php +1 -0
  35. package/support/vendor/phug/phug/src/Phug/Compiler/Compiler/NodeCompiler/ElementNodeCompiler.php +6 -0
  36. package/support/vendor/phug/phug/src/Phug/Compiler/Compiler/NodeCompiler/ImportNodeCompiler.php +4 -4
  37. package/support/vendor/phug/phug/src/Phug/Compiler/Compiler/NodeCompilerInterface.php +1 -1
  38. package/support/vendor/phug/phug/src/Phug/Compiler/composer.json +5 -2
  39. package/support/vendor/phug/phug/src/Phug/DependencyInjection/DependencyInjection.php +1 -1
  40. package/support/vendor/phug/phug/src/Phug/DependencyInjection/composer.json +1 -2
  41. package/support/vendor/phug/phug/src/Phug/Event/Event/ListenerQueue.php +3 -0
  42. package/support/vendor/phug/phug/src/Phug/Event/EventManagerTrait.php +1 -1
  43. package/support/vendor/phug/phug/src/Phug/Event/composer.json +1 -2
  44. package/support/vendor/phug/phug/src/Phug/Formatter/Formatter/AbstractFormat.php +15 -12
  45. package/support/vendor/phug/phug/src/Phug/Formatter/Formatter/AssignmentContainerInterface.php +2 -1
  46. package/support/vendor/phug/phug/src/Phug/Formatter/Formatter/Element/AbstractAssignmentContainerElement.php +11 -1
  47. package/support/vendor/phug/phug/src/Phug/Formatter/Formatter/Element/AbstractMarkupElement.php +1 -1
  48. package/support/vendor/phug/phug/src/Phug/Formatter/Formatter/Element/AssignmentElement.php +9 -4
  49. package/support/vendor/phug/phug/src/Phug/Formatter/Formatter/Element/AttributeElement.php +4 -1
  50. package/support/vendor/phug/phug/src/Phug/Formatter/Formatter/Element/CodeElement.php +2 -2
  51. package/support/vendor/phug/phug/src/Phug/Formatter/Formatter/Element/MarkupElement.php +10 -8
  52. package/support/vendor/phug/phug/src/Phug/Formatter/Formatter/Element/MixinCallElement.php +2 -1
  53. package/support/vendor/phug/phug/src/Phug/Formatter/Formatter/Element/MixinElement.php +2 -1
  54. package/support/vendor/phug/phug/src/Phug/Formatter/Formatter/Format/XmlFormat.php +213 -20
  55. package/support/vendor/phug/phug/src/Phug/Formatter/Formatter/Partial/AssignmentHelpersTrait.php +7 -4
  56. package/support/vendor/phug/phug/src/Phug/Formatter/Formatter/Partial/HandleVariable.php +4 -4
  57. package/support/vendor/phug/phug/src/Phug/Formatter/Formatter/Partial/MagicAccessorTrait.php +1 -7
  58. package/support/vendor/phug/phug/src/Phug/Formatter/Formatter.php +1 -1
  59. package/support/vendor/phug/phug/src/Phug/Formatter/composer.json +1 -2
  60. package/support/vendor/phug/phug/src/Phug/Invoker/Invoker.php +1 -1
  61. package/support/vendor/phug/phug/src/Phug/Invoker/composer.json +5 -2
  62. package/support/vendor/phug/phug/src/Phug/Lexer/Lexer/Partial/IndentStyleTrait.php +5 -5
  63. package/support/vendor/phug/phug/src/Phug/Lexer/Lexer/Scanner/AssignmentScanner.php +8 -2
  64. package/support/vendor/phug/phug/src/Phug/Lexer/Lexer/Scanner/AttributeScanner.php +23 -11
  65. package/support/vendor/phug/phug/src/Phug/Lexer/Lexer/Scanner/ConditionalScanner.php +1 -1
  66. package/support/vendor/phug/phug/src/Phug/Lexer/Lexer/Scanner/FilterScanner.php +6 -10
  67. package/support/vendor/phug/phug/src/Phug/Lexer/Lexer/Scanner/IndentationScanner.php +1 -1
  68. package/support/vendor/phug/phug/src/Phug/Lexer/Lexer/Scanner/KeywordScanner.php +1 -1
  69. package/support/vendor/phug/phug/src/Phug/Lexer/Lexer/Scanner/MultilineScanner.php +6 -12
  70. package/support/vendor/phug/phug/src/Phug/Lexer/Lexer/Scanner/Partial/TrailingOutdentHandlerTrait.php +26 -0
  71. package/support/vendor/phug/phug/src/Phug/Lexer/Lexer/Scanner/TextScanner.php +3 -3
  72. package/support/vendor/phug/phug/src/Phug/Lexer/Lexer/State.php +9 -9
  73. package/support/vendor/phug/phug/src/Phug/Lexer/composer.json +1 -2
  74. package/support/vendor/phug/phug/src/Phug/Parser/Parser/Event/NodeEvent.php +3 -2
  75. package/support/vendor/phug/phug/src/Phug/Parser/Parser/Node/AssignmentNode.php +5 -1
  76. package/support/vendor/phug/phug/src/Phug/Parser/Parser/Node/AttributeNode.php +4 -1
  77. package/support/vendor/phug/phug/src/Phug/Parser/Parser/Node/ElementNode.php +5 -1
  78. package/support/vendor/phug/phug/src/Phug/Parser/Parser/Node/FilterNode.php +2 -1
  79. package/support/vendor/phug/phug/src/Phug/Parser/Parser/Node/MixinCallNode.php +5 -1
  80. package/support/vendor/phug/phug/src/Phug/Parser/Parser/Node/MixinNode.php +5 -1
  81. package/support/vendor/phug/phug/src/Phug/Parser/Parser/TokenHandler/AbstractTokenHandler.php +87 -0
  82. package/support/vendor/phug/phug/src/Phug/Parser/Parser/TokenHandler/AssignmentTokenHandler.php +6 -21
  83. package/support/vendor/phug/phug/src/Phug/Parser/Parser/TokenHandler/AttributeEndTokenHandler.php +5 -10
  84. package/support/vendor/phug/phug/src/Phug/Parser/Parser/TokenHandler/AttributeStartTokenHandler.php +7 -23
  85. package/support/vendor/phug/phug/src/Phug/Parser/Parser/TokenHandler/AttributeTokenHandler.php +21 -19
  86. package/support/vendor/phug/phug/src/Phug/Parser/Parser/TokenHandler/AutoCloseTokenHandler.php +5 -17
  87. package/support/vendor/phug/phug/src/Phug/Parser/Parser/TokenHandler/BlockTokenHandler.php +4 -10
  88. package/support/vendor/phug/phug/src/Phug/Parser/Parser/TokenHandler/CaseTokenHandler.php +4 -10
  89. package/support/vendor/phug/phug/src/Phug/Parser/Parser/TokenHandler/ClassTokenHandler.php +7 -34
  90. package/support/vendor/phug/phug/src/Phug/Parser/Parser/TokenHandler/CodeTokenHandler.php +4 -10
  91. package/support/vendor/phug/phug/src/Phug/Parser/Parser/TokenHandler/CommentTokenHandler.php +4 -10
  92. package/support/vendor/phug/phug/src/Phug/Parser/Parser/TokenHandler/ConditionalTokenHandler.php +4 -10
  93. package/support/vendor/phug/phug/src/Phug/Parser/Parser/TokenHandler/DoTokenHandler.php +4 -10
  94. package/support/vendor/phug/phug/src/Phug/Parser/Parser/TokenHandler/DoctypeTokenHandler.php +4 -10
  95. package/support/vendor/phug/phug/src/Phug/Parser/Parser/TokenHandler/EachTokenHandler.php +4 -10
  96. package/support/vendor/phug/phug/src/Phug/Parser/Parser/TokenHandler/ExpansionTokenHandler.php +5 -11
  97. package/support/vendor/phug/phug/src/Phug/Parser/Parser/TokenHandler/ExpressionTokenHandler.php +4 -10
  98. package/support/vendor/phug/phug/src/Phug/Parser/Parser/TokenHandler/FilterTokenHandler.php +4 -10
  99. package/support/vendor/phug/phug/src/Phug/Parser/Parser/TokenHandler/ForTokenHandler.php +4 -10
  100. package/support/vendor/phug/phug/src/Phug/Parser/Parser/TokenHandler/IdTokenHandler.php +7 -33
  101. package/support/vendor/phug/phug/src/Phug/Parser/Parser/TokenHandler/ImportTokenHandler.php +14 -20
  102. package/support/vendor/phug/phug/src/Phug/Parser/Parser/TokenHandler/IndentTokenHandler.php +4 -10
  103. package/support/vendor/phug/phug/src/Phug/Parser/Parser/TokenHandler/InterpolationEndTokenHandler.php +4 -10
  104. package/support/vendor/phug/phug/src/Phug/Parser/Parser/TokenHandler/InterpolationStartTokenHandler.php +29 -30
  105. package/support/vendor/phug/phug/src/Phug/Parser/Parser/TokenHandler/KeywordTokenHandler.php +4 -10
  106. package/support/vendor/phug/phug/src/Phug/Parser/Parser/TokenHandler/MixinCallTokenHandler.php +4 -10
  107. package/support/vendor/phug/phug/src/Phug/Parser/Parser/TokenHandler/MixinTokenHandler.php +4 -10
  108. package/support/vendor/phug/phug/src/Phug/Parser/Parser/TokenHandler/NewLineTokenHandler.php +4 -10
  109. package/support/vendor/phug/phug/src/Phug/Parser/Parser/TokenHandler/OutdentTokenHandler.php +4 -10
  110. package/support/vendor/phug/phug/src/Phug/Parser/Parser/TokenHandler/Partial/StaticAttributeTrait.php +36 -0
  111. package/support/vendor/phug/phug/src/Phug/Parser/Parser/TokenHandler/TagInterpolationEndTokenHandler.php +4 -10
  112. package/support/vendor/phug/phug/src/Phug/Parser/Parser/TokenHandler/TagInterpolationStartTokenHandler.php +7 -10
  113. package/support/vendor/phug/phug/src/Phug/Parser/Parser/TokenHandler/TagTokenHandler.php +6 -21
  114. package/support/vendor/phug/phug/src/Phug/Parser/Parser/TokenHandler/TextTokenHandler.php +4 -10
  115. package/support/vendor/phug/phug/src/Phug/Parser/Parser/TokenHandler/VariableTokenHandler.php +4 -10
  116. package/support/vendor/phug/phug/src/Phug/Parser/Parser/TokenHandler/WhenTokenHandler.php +4 -10
  117. package/support/vendor/phug/phug/src/Phug/Parser/Parser/TokenHandler/WhileTokenHandler.php +4 -10
  118. package/support/vendor/phug/phug/src/Phug/Parser/Parser/TokenHandler/YieldTokenHandler.php +4 -10
  119. package/support/vendor/phug/phug/src/Phug/Parser/Parser.php +1 -1
  120. package/support/vendor/phug/phug/src/Phug/Parser/composer.json +1 -2
  121. package/support/vendor/phug/phug/src/Phug/Phug/Phug/Cli.php +5 -5
  122. package/support/vendor/phug/phug/src/Phug/Phug/Phug/Partial/ExtensionsTrait.php +1 -1
  123. package/support/vendor/phug/phug/src/Phug/Phug/Phug/Partial/FacadeOptionsTrait.php +1 -1
  124. package/support/vendor/phug/phug/src/Phug/Phug/Phug/Phug.php +14 -5
  125. package/support/vendor/phug/phug/src/Phug/Phug/composer.json +5 -2
  126. package/support/vendor/phug/phug/src/Phug/Reader/Reader.php +9 -9
  127. package/support/vendor/phug/phug/src/Phug/Reader/composer.json +4 -0
  128. package/support/vendor/phug/phug/src/Phug/Renderer/Renderer/Adapter/FileAdapter.php +21 -4
  129. package/support/vendor/phug/phug/src/Phug/Renderer/Renderer/Adapter/Stream/Template.php +5 -0
  130. package/support/vendor/phug/phug/src/Phug/Renderer/Renderer/Adapter/StreamAdapter.php +1 -1
  131. package/support/vendor/phug/phug/src/Phug/Renderer/Renderer/CacheInterface.php +1 -1
  132. package/support/vendor/phug/phug/src/Phug/Renderer/Renderer/Partial/AdapterTrait.php +1 -1
  133. package/support/vendor/phug/phug/src/Phug/Renderer/Renderer/Partial/Debug/DebuggerTrait.php +56 -10
  134. package/support/vendor/phug/phug/src/Phug/Renderer/Renderer/Partial/RendererOptionsTrait.php +1 -1
  135. package/support/vendor/phug/phug/src/Phug/Renderer/Renderer/Profiler/Dump.php +1 -1
  136. package/support/vendor/phug/phug/src/Phug/Renderer/Renderer/Profiler/LinkDump.php +2 -2
  137. package/support/vendor/phug/phug/src/Phug/Renderer/Renderer/Profiler/ProfilerModule.php +1 -1
  138. package/support/vendor/phug/phug/src/Phug/Renderer/composer.json +7 -3
  139. package/support/vendor/phug/phug/src/Phug/Util/CompatibilityUtil/TestCaseTyped.php +67 -0
  140. package/support/vendor/phug/phug/src/Phug/Util/CompatibilityUtil/TestCaseUntyped.php +67 -0
  141. package/support/vendor/phug/phug/src/Phug/Util/Util/AttributesInterface.php +16 -0
  142. package/support/vendor/phug/phug/src/Phug/Util/Util/AttributesOrderInterface.php +17 -0
  143. package/support/vendor/phug/phug/src/Phug/Util/Util/AttributesStorage.php +44 -0
  144. package/support/vendor/phug/phug/src/Phug/Util/Util/Collection.php +2 -0
  145. package/support/vendor/phug/phug/src/Phug/Util/Util/OrderableInterface.php +22 -0
  146. package/support/vendor/phug/phug/src/Phug/Util/Util/OrderedValue.php +25 -0
  147. package/support/vendor/phug/phug/src/Phug/Util/Util/Partial/AttributeTrait.php +2 -1
  148. package/support/vendor/phug/phug/src/Phug/Util/Util/Partial/AttributesOrderTrait.php +19 -0
  149. package/support/vendor/phug/phug/src/Phug/Util/Util/Partial/ModuleContainerTrait.php +3 -3
  150. package/support/vendor/phug/phug/src/Phug/Util/Util/Partial/OptionTrait.php +1 -1
  151. package/support/vendor/phug/phug/src/Phug/Util/Util/Partial/OrderTrait.php +27 -0
  152. package/support/vendor/phug/phug/src/Phug/Util/Util/Partial/StaticMemberTrait.php +1 -1
  153. package/support/vendor/phug/phug/src/Phug/Util/Util/Partial/ValueTrait.php +5 -3
  154. package/support/vendor/phug/phug/src/Phug/Util/Util/SandBox.php +1 -0
  155. package/support/vendor/phug/phug/src/Phug/Util/Util/TestCase.php +47 -4
  156. package/support/vendor/phug/phug/src/Phug/Util/composer.json +5 -6
  157. package/support/vendor/symfony/deprecation-contracts/CHANGELOG.md +5 -0
  158. package/support/vendor/symfony/{polyfill-php72 → deprecation-contracts}/LICENSE +1 -1
  159. package/support/vendor/symfony/deprecation-contracts/README.md +26 -0
  160. package/support/vendor/symfony/{polyfill-php72 → deprecation-contracts}/composer.json +9 -9
  161. package/support/vendor/symfony/deprecation-contracts/function.php +27 -0
  162. package/support/vendor/symfony/polyfill-mbstring/LICENSE +1 -1
  163. package/support/vendor/symfony/polyfill-mbstring/Mbstring.php +256 -57
  164. package/support/vendor/symfony/polyfill-mbstring/README.md +1 -1
  165. package/support/vendor/symfony/polyfill-mbstring/Resources/unidata/caseFolding.php +119 -0
  166. package/support/vendor/symfony/polyfill-mbstring/Resources/unidata/lowerCase.php +1 -1
  167. package/support/vendor/symfony/polyfill-mbstring/Resources/unidata/upperCase.php +102 -27
  168. package/support/vendor/symfony/polyfill-mbstring/bootstrap.php +33 -8
  169. package/support/vendor/symfony/polyfill-mbstring/bootstrap80.php +167 -0
  170. package/support/vendor/symfony/polyfill-mbstring/composer.json +5 -4
  171. package/support/vendor/symfony/var-dumper/CHANGELOG.md +63 -0
  172. package/support/vendor/symfony/var-dumper/Caster/AddressInfoCaster.php +82 -0
  173. package/support/vendor/symfony/var-dumper/Caster/AmqpCaster.php +12 -10
  174. package/support/vendor/symfony/var-dumper/Caster/ArgsStub.php +6 -7
  175. package/support/vendor/symfony/var-dumper/Caster/Caster.php +59 -31
  176. package/support/vendor/symfony/var-dumper/Caster/ClassStub.php +7 -9
  177. package/support/vendor/symfony/var-dumper/Caster/ConstStub.php +20 -4
  178. package/support/vendor/symfony/var-dumper/Caster/CurlCaster.php +31 -0
  179. package/support/vendor/symfony/var-dumper/Caster/CutArrayStub.php +1 -1
  180. package/support/vendor/symfony/var-dumper/Caster/CutStub.php +2 -2
  181. package/support/vendor/symfony/var-dumper/Caster/DOMCaster.php +61 -156
  182. package/support/vendor/symfony/var-dumper/Caster/DateCaster.php +27 -26
  183. package/support/vendor/symfony/var-dumper/Caster/DoctrineCaster.php +6 -4
  184. package/support/vendor/symfony/var-dumper/Caster/DsCaster.php +1 -1
  185. package/support/vendor/symfony/var-dumper/Caster/DsPairStub.php +1 -1
  186. package/support/vendor/symfony/var-dumper/Caster/EnumStub.php +4 -5
  187. package/support/vendor/symfony/var-dumper/Caster/ExceptionCaster.php +64 -49
  188. package/support/vendor/symfony/var-dumper/Caster/FFICaster.php +171 -0
  189. package/support/vendor/symfony/var-dumper/Caster/FiberCaster.php +43 -0
  190. package/support/vendor/symfony/var-dumper/Caster/FrameStub.php +6 -8
  191. package/support/vendor/symfony/var-dumper/Caster/GdCaster.php +30 -0
  192. package/support/vendor/symfony/var-dumper/Caster/GmpCaster.php +4 -2
  193. package/support/vendor/symfony/var-dumper/Caster/ImagineCaster.php +2 -0
  194. package/support/vendor/symfony/var-dumper/Caster/ImgStub.php +1 -1
  195. package/support/vendor/symfony/var-dumper/Caster/IntlCaster.php +10 -8
  196. package/support/vendor/symfony/var-dumper/Caster/LinkStub.php +14 -17
  197. package/support/vendor/symfony/var-dumper/Caster/MemcachedCaster.php +10 -8
  198. package/support/vendor/symfony/var-dumper/Caster/MysqliCaster.php +33 -0
  199. package/support/vendor/symfony/var-dumper/Caster/OpenSSLCaster.php +69 -0
  200. package/support/vendor/symfony/var-dumper/Caster/PdoCaster.php +8 -6
  201. package/support/vendor/symfony/var-dumper/Caster/PgSqlCaster.php +21 -19
  202. package/support/vendor/symfony/var-dumper/Caster/ProxyManagerCaster.php +4 -2
  203. package/support/vendor/symfony/var-dumper/Caster/RdKafkaCaster.php +188 -0
  204. package/support/vendor/symfony/var-dumper/Caster/RedisCaster.php +31 -31
  205. package/support/vendor/symfony/var-dumper/Caster/ReflectionCaster.php +100 -44
  206. package/support/vendor/symfony/var-dumper/Caster/ResourceCaster.php +33 -46
  207. package/support/vendor/symfony/var-dumper/Caster/ScalarStub.php +27 -0
  208. package/support/vendor/symfony/var-dumper/Caster/SocketCaster.php +64 -0
  209. package/support/vendor/symfony/var-dumper/Caster/SplCaster.php +57 -44
  210. package/support/vendor/symfony/var-dumper/Caster/SqliteCaster.php +32 -0
  211. package/support/vendor/symfony/var-dumper/Caster/StubCaster.php +15 -5
  212. package/support/vendor/symfony/var-dumper/Caster/SymfonyCaster.php +66 -10
  213. package/support/vendor/symfony/var-dumper/Caster/TraceStub.php +7 -11
  214. package/support/vendor/symfony/var-dumper/Caster/UninitializedStub.php +25 -0
  215. package/support/vendor/symfony/var-dumper/Caster/UuidCaster.php +2 -0
  216. package/support/vendor/symfony/var-dumper/Caster/VirtualStub.php +21 -0
  217. package/support/vendor/symfony/var-dumper/Caster/XmlReaderCaster.php +25 -10
  218. package/support/vendor/symfony/var-dumper/Caster/XmlResourceCaster.php +7 -5
  219. package/support/vendor/symfony/var-dumper/Cloner/AbstractCloner.php +103 -72
  220. package/support/vendor/symfony/var-dumper/Cloner/ClonerInterface.php +1 -5
  221. package/support/vendor/symfony/var-dumper/Cloner/Cursor.php +21 -21
  222. package/support/vendor/symfony/var-dumper/Cloner/Data.php +51 -77
  223. package/support/vendor/symfony/var-dumper/Cloner/DumperInterface.php +11 -14
  224. package/support/vendor/symfony/var-dumper/Cloner/Stub.php +40 -31
  225. package/support/vendor/symfony/var-dumper/Cloner/VarCloner.php +21 -104
  226. package/support/vendor/symfony/var-dumper/Command/Descriptor/CliDescriptor.php +9 -19
  227. package/support/vendor/symfony/var-dumper/Command/Descriptor/HtmlDescriptor.php +10 -11
  228. package/support/vendor/symfony/var-dumper/Command/ServerDumpCommand.php +27 -15
  229. package/support/vendor/symfony/var-dumper/Dumper/AbstractDumper.php +68 -48
  230. package/support/vendor/symfony/var-dumper/Dumper/CliDumper.php +126 -113
  231. package/support/vendor/symfony/var-dumper/Dumper/ContextProvider/CliContextProvider.php +1 -1
  232. package/support/vendor/symfony/var-dumper/Dumper/ContextProvider/ContextProviderInterface.php +0 -3
  233. package/support/vendor/symfony/var-dumper/Dumper/ContextProvider/RequestContextProvider.php +5 -6
  234. package/support/vendor/symfony/var-dumper/Dumper/ContextProvider/SourceContextProvider.php +10 -15
  235. package/support/vendor/symfony/var-dumper/Dumper/ContextualizedDumper.php +8 -11
  236. package/support/vendor/symfony/var-dumper/Dumper/DataDumperInterface.php +3 -0
  237. package/support/vendor/symfony/var-dumper/Dumper/HtmlDumper.php +122 -146
  238. package/support/vendor/symfony/var-dumper/Dumper/ServerDumper.php +10 -10
  239. package/support/vendor/symfony/var-dumper/Exception/ThrowingCasterException.php +1 -1
  240. package/support/vendor/symfony/var-dumper/LICENSE +1 -1
  241. package/support/vendor/symfony/var-dumper/README.md +6 -6
  242. package/support/vendor/symfony/var-dumper/Resources/bin/var-dump-server +4 -0
  243. package/support/vendor/symfony/var-dumper/Resources/functions/dump.php +35 -10
  244. package/support/vendor/symfony/var-dumper/Server/Connection.php +16 -14
  245. package/support/vendor/symfony/var-dumper/Server/DumpServer.php +16 -14
  246. package/support/vendor/symfony/var-dumper/Test/VarDumperTestTrait.php +9 -9
  247. package/support/vendor/symfony/var-dumper/VarDumper.php +69 -17
  248. package/support/vendor/symfony/var-dumper/composer.json +10 -16
  249. package/support/vendor/symfony/polyfill-php72/Php72.php +0 -217
  250. package/support/vendor/symfony/polyfill-php72/README.md +0 -28
  251. package/support/vendor/symfony/polyfill-php72/bootstrap.php +0 -57
  252. package/support/vendor/symfony/polyfill-php80/LICENSE +0 -19
  253. package/support/vendor/symfony/polyfill-php80/Php80.php +0 -105
  254. package/support/vendor/symfony/polyfill-php80/README.md +0 -24
  255. package/support/vendor/symfony/polyfill-php80/Resources/stubs/Attribute.php +0 -22
  256. package/support/vendor/symfony/polyfill-php80/Resources/stubs/Stringable.php +0 -11
  257. package/support/vendor/symfony/polyfill-php80/Resources/stubs/UnhandledMatchError.php +0 -5
  258. package/support/vendor/symfony/polyfill-php80/Resources/stubs/ValueError.php +0 -5
  259. package/support/vendor/symfony/polyfill-php80/bootstrap.php +0 -42
  260. package/support/vendor/symfony/polyfill-php80/composer.json +0 -40
@@ -7,16 +7,18 @@
7
7
  namespace Phug\Lexer\Scanner;
8
8
 
9
9
  use Phug\Lexer\Analyzer\LineAnalyzer;
10
+ use Phug\Lexer\Scanner\Partial\TrailingOutdentHandlerTrait;
10
11
  use Phug\Lexer\ScannerInterface;
11
12
  use Phug\Lexer\State;
12
13
  use Phug\Lexer\Token\FilterToken;
13
14
  use Phug\Lexer\Token\IndentToken;
14
15
  use Phug\Lexer\Token\NewLineToken;
15
- use Phug\Lexer\Token\OutdentToken;
16
16
  use Phug\Lexer\Token\TextToken;
17
17
 
18
18
  class FilterScanner implements ScannerInterface
19
19
  {
20
+ use TrailingOutdentHandlerTrait;
21
+
20
22
  public function scan(State $state)
21
23
  {
22
24
  $reader = $state->getReader();
@@ -55,7 +57,7 @@ class FilterScanner implements ScannerInterface
55
57
  $token = $state->createToken(TextToken::class);
56
58
  if ($maxIndent > 0 && $maxIndent < INF) {
57
59
  foreach ($lines as &$line) {
58
- $line = mb_substr($line, $maxIndent) ?: '';
60
+ $line = mb_substr((string) $line, $maxIndent);
59
61
  }
60
62
  }
61
63
  $token->setValue(implode("\n", $lines));
@@ -66,14 +68,8 @@ class FilterScanner implements ScannerInterface
66
68
  $token->getSourceLocation()->setOffsetLength(1); //Let it have at least 1 length for debugging
67
69
  yield $token;
68
70
 
69
- if ($reader->hasLength()) {
70
- yield $state->createToken(NewLineToken::class);
71
-
72
- $state->setLevel($analyzer->getNewLevel())->indent($analyzer->getLevel() + 1);
73
-
74
- while ($state->nextOutdent() !== false) {
75
- yield $state->createToken(OutdentToken::class);
76
- }
71
+ foreach ($this->yieldTrailingOutdent($analyzer, $state) as $token) {
72
+ yield $token;
77
73
  }
78
74
  }
79
75
  }
@@ -98,7 +98,7 @@ class IndentationScanner implements ScannerInterface
98
98
  $newLevel = $this->getIndentLevel($state, INF, function () use (&$indent) {
99
99
  $char = null;
100
100
 
101
- if (mb_strlen($indent)) {
101
+ if ($indent !== null && mb_strlen($indent)) {
102
102
  $char = mb_substr($indent, 0, 1);
103
103
  $indent = mb_substr($indent, 1);
104
104
  }
@@ -24,7 +24,7 @@ class KeywordScanner implements ScannerInterface
24
24
  )) {
25
25
  $name = $reader->getMatch('name');
26
26
 
27
- if (in_array($name, $keywords)) {
27
+ if (in_array($name, $keywords, true)) {
28
28
  $value = $reader->getMatch('value');
29
29
  if (mb_substr($value, 0, 1) === ' ') {
30
30
  $value = mb_substr($value, 1);
@@ -7,19 +7,21 @@
7
7
  namespace Phug\Lexer\Scanner;
8
8
 
9
9
  use Phug\Lexer\Analyzer\LineAnalyzer;
10
+ use Phug\Lexer\Scanner\Partial\TrailingOutdentHandlerTrait;
10
11
  use Phug\Lexer\ScannerInterface;
11
12
  use Phug\Lexer\State;
12
13
  use Phug\Lexer\Token\IndentToken;
13
14
  use Phug\Lexer\Token\InterpolationEndToken;
14
15
  use Phug\Lexer\Token\InterpolationStartToken;
15
16
  use Phug\Lexer\Token\NewLineToken;
16
- use Phug\Lexer\Token\OutdentToken;
17
17
  use Phug\Lexer\Token\TagInterpolationEndToken;
18
18
  use Phug\Lexer\Token\TagInterpolationStartToken;
19
19
  use Phug\Lexer\Token\TextToken;
20
20
 
21
21
  class MultilineScanner implements ScannerInterface
22
22
  {
23
+ use TrailingOutdentHandlerTrait;
24
+
23
25
  protected function unEscapedToken(State $state, $buffer)
24
26
  {
25
27
  /** @var TextToken $token */
@@ -83,8 +85,6 @@ class MultilineScanner implements ScannerInterface
83
85
 
84
86
  private function yieldLines(State $state, array $lines, LineAnalyzer $analyzer)
85
87
  {
86
- $reader = $state->getReader();
87
-
88
88
  yield $state->createToken(IndentToken::class);
89
89
 
90
90
  $maxIndent = $analyzer->getMaxIndent();
@@ -92,7 +92,7 @@ class MultilineScanner implements ScannerInterface
92
92
  if ($maxIndent > 0 && $maxIndent < INF) {
93
93
  foreach ($lines as &$line) {
94
94
  if (count($line) && is_string($line[0])) {
95
- $line[0] = mb_substr($line[0], $maxIndent) ?: '';
95
+ $line[0] = mb_substr((string) $line[0], $maxIndent);
96
96
  }
97
97
  }
98
98
  }
@@ -101,14 +101,8 @@ class MultilineScanner implements ScannerInterface
101
101
  yield $token;
102
102
  }
103
103
 
104
- if ($reader->hasLength()) {
105
- yield $state->createToken(NewLineToken::class);
106
-
107
- $state->setLevel($analyzer->getNewLevel())->indent($analyzer->getLevel() + 1);
108
-
109
- while ($state->nextOutdent() !== false) {
110
- yield $state->createToken(OutdentToken::class);
111
- }
104
+ foreach ($this->yieldTrailingOutdent($analyzer, $state) as $token) {
105
+ yield $token;
112
106
  }
113
107
  }
114
108
 
@@ -0,0 +1,26 @@
1
+ <?php
2
+
3
+ namespace Phug\Lexer\Scanner\Partial;
4
+
5
+ use Phug\Lexer\Analyzer\LineAnalyzer;
6
+ use Phug\Lexer\State;
7
+ use Phug\Lexer\Token\NewLineToken;
8
+ use Phug\Lexer\Token\OutdentToken;
9
+
10
+ trait TrailingOutdentHandlerTrait
11
+ {
12
+ private function yieldTrailingOutdent(LineAnalyzer $analyzer, State $state)
13
+ {
14
+ $reader = $state->getReader();
15
+
16
+ if ($reader->hasLength()) {
17
+ yield $state->createToken(NewLineToken::class);
18
+
19
+ $state->setLevel($analyzer->getNewLevel())->indent($analyzer->getLevel() + 1);
20
+
21
+ while ($state->nextOutdent() !== false) {
22
+ yield $state->createToken(OutdentToken::class);
23
+ }
24
+ }
25
+ }
26
+ }
@@ -19,7 +19,7 @@ class TextScanner implements ScannerInterface
19
19
 
20
20
  private function isTextStartToTrim(State $state, $text)
21
21
  {
22
- return in_array(mb_substr($text, 0, 1), [' ', "\t"]) && !$state->isAfterInterpolation();
22
+ return in_array(mb_substr((string) $text, 0, 1), [' ', "\t"], true) && !$state->isAfterInterpolation();
23
23
  }
24
24
 
25
25
  private function leftTrimValueIfNotAfterInterpolation(State $state, TextToken $token)
@@ -27,7 +27,7 @@ class TextScanner implements ScannerInterface
27
27
  $text = $token->getValue();
28
28
 
29
29
  if ($this->isTextStartToTrim($state, $text)) {
30
- $token->setValue(mb_substr($text, 1) ?: '');
30
+ $token->setValue(mb_substr((string) $text, 1));
31
31
  }
32
32
  }
33
33
 
@@ -87,7 +87,7 @@ class TextScanner implements ScannerInterface
87
87
  $text = mb_substr($text, 1);
88
88
  }
89
89
 
90
- $text = preg_replace('/\\\\([#!]\\[|#\\{)/', '$1', $text);
90
+ $text = preg_replace('/\\\\([#!]\\[|#{)/', '$1', $text);
91
91
  $token->setValue($text);
92
92
 
93
93
  yield $state->endToken($token);
@@ -230,20 +230,20 @@ class State implements OptionInterface
230
230
  * use the `loopScan`-method
231
231
  *
232
232
  * @param array|string $scanners the scanners to run
233
+ * @param array $options options to be passed for the scanner
233
234
  *
234
235
  * @throws LexerException
235
236
  *
236
237
  * @return iterable the generator yielding all tokens found
237
238
  */
238
- public function scan($scanners)
239
+ public function scan($scanners, array $options = [])
239
240
  {
240
241
  $scanners = $this->filterScanners($scanners);
241
242
 
242
- foreach ($scanners as $key => $scanner) {
243
-
243
+ foreach ($scanners as $scanner) {
244
244
  /** @var ScannerInterface $scanner */
245
245
  $success = false;
246
- foreach ($scanner->scan($this) as $token) {
246
+ foreach ($scanner->scan($this, $options) as $token) {
247
247
  if (!($token instanceof TokenInterface)) {
248
248
  $this->throwException(
249
249
  'Scanner '.get_class($scanner).' generated a result that is not a '.TokenInterface::class
@@ -266,7 +266,7 @@ class State implements OptionInterface
266
266
  * If the second argument is true, it will throw an exception if none of the scanners
267
267
  * produced any valid tokens. The reading also stops when the end of the input as been reached.
268
268
  *
269
- * @param $scanners
269
+ * @param $scanners
270
270
  * @param bool $required
271
271
  *
272
272
  * @throws LexerException
@@ -329,7 +329,7 @@ class State implements OptionInterface
329
329
  return new $className(
330
330
  $this->createCurrentSourceLocation(),
331
331
  $this->level,
332
- str_repeat($this->getIndentStyle(), $this->getIndentWidth())
332
+ str_repeat((string) $this->getIndentStyle(), (int) $this->getIndentWidth())
333
333
  );
334
334
  }
335
335
 
@@ -345,9 +345,9 @@ class State implements OptionInterface
345
345
  * in scanners as you can simply return it's value without having to check for it to be null.
346
346
  *
347
347
  *
348
- * @param $className
349
- * @param $pattern
350
- * @param null $modifiers
348
+ * @param class-string $className
349
+ * @param string $pattern
350
+ * @param string|null $modifiers
351
351
  *
352
352
  * @return iterable
353
353
  */
@@ -11,8 +11,7 @@
11
11
  "email": "torben@talesoft.codes"
12
12
  },
13
13
  {
14
- "name": "KyleKatarn",
15
- "email": "jade-php@selfbuild.fr",
14
+ "name": "kylekatarnls",
16
15
  "homepage": "http://github.com/kylekatarnls"
17
16
  }
18
17
  ],
@@ -4,6 +4,7 @@ namespace Phug\Parser\Event;
4
4
 
5
5
  use Phug\Event;
6
6
  use Phug\Parser\NodeInterface;
7
+ use Phug\ParserEvent;
7
8
 
8
9
  class NodeEvent extends Event
9
10
  {
@@ -12,8 +13,8 @@ class NodeEvent extends Event
12
13
  /**
13
14
  * NodeEvent constructor.
14
15
  *
15
- * @param $name
16
- * @param NodeInterface $node
16
+ * @param ParserEvent::* $name
17
+ * @param NodeInterface $node
17
18
  */
18
19
  public function __construct($name, NodeInterface $node)
19
20
  {
@@ -3,11 +3,15 @@
3
3
  namespace Phug\Parser\Node;
4
4
 
5
5
  use Phug\Parser\Node;
6
+ use Phug\Util\AttributesInterface;
7
+ use Phug\Util\OrderableInterface;
6
8
  use Phug\Util\Partial\AttributeTrait;
7
9
  use Phug\Util\Partial\NameTrait;
10
+ use Phug\Util\Partial\OrderTrait;
8
11
 
9
- class AssignmentNode extends Node
12
+ class AssignmentNode extends Node implements AttributesInterface, OrderableInterface
10
13
  {
11
14
  use NameTrait;
12
15
  use AttributeTrait;
16
+ use OrderTrait;
13
17
  }
@@ -3,17 +3,20 @@
3
3
  namespace Phug\Parser\Node;
4
4
 
5
5
  use Phug\Parser\Node;
6
+ use Phug\Util\OrderableInterface;
6
7
  use Phug\Util\Partial\CheckTrait;
7
8
  use Phug\Util\Partial\EscapeTrait;
8
9
  use Phug\Util\Partial\NameTrait;
10
+ use Phug\Util\Partial\OrderTrait;
9
11
  use Phug\Util\Partial\ValueTrait;
10
12
  use Phug\Util\Partial\VariadicTrait;
11
13
 
12
- class AttributeNode extends Node
14
+ class AttributeNode extends Node implements OrderableInterface
13
15
  {
14
16
  use NameTrait;
15
17
  use ValueTrait;
16
18
  use EscapeTrait;
17
19
  use CheckTrait;
18
20
  use VariadicTrait;
21
+ use OrderTrait;
19
22
  }
@@ -3,15 +3,19 @@
3
3
  namespace Phug\Parser\Node;
4
4
 
5
5
  use Phug\Parser\Node;
6
+ use Phug\Util\AttributesInterface;
7
+ use Phug\Util\AttributesOrderInterface;
6
8
  use Phug\Util\Partial\AssignmentTrait;
9
+ use Phug\Util\Partial\AttributesOrderTrait;
7
10
  use Phug\Util\Partial\AttributeTrait;
8
11
  use Phug\Util\Partial\NameTrait;
9
12
 
10
- class ElementNode extends Node
13
+ class ElementNode extends Node implements AttributesInterface, AttributesOrderInterface
11
14
  {
12
15
  use NameTrait;
13
16
  use AttributeTrait;
14
17
  use AssignmentTrait;
18
+ use AttributesOrderTrait;
15
19
 
16
20
  /**
17
21
  * @var bool
@@ -3,10 +3,11 @@
3
3
  namespace Phug\Parser\Node;
4
4
 
5
5
  use Phug\Parser\Node;
6
+ use Phug\Util\AttributesInterface;
6
7
  use Phug\Util\Partial\AttributeTrait;
7
8
  use Phug\Util\Partial\NameTrait;
8
9
 
9
- class FilterNode extends Node
10
+ class FilterNode extends Node implements AttributesInterface
10
11
  {
11
12
  use NameTrait;
12
13
  use AttributeTrait;
@@ -3,15 +3,19 @@
3
3
  namespace Phug\Parser\Node;
4
4
 
5
5
  use Phug\Parser\Node;
6
+ use Phug\Util\AttributesInterface;
7
+ use Phug\Util\AttributesOrderInterface;
6
8
  use Phug\Util\Partial\AssignmentTrait;
9
+ use Phug\Util\Partial\AttributesOrderTrait;
7
10
  use Phug\Util\Partial\AttributeTrait;
8
11
  use Phug\Util\Partial\NameTrait;
9
12
 
10
- class MixinCallNode extends Node
13
+ class MixinCallNode extends Node implements AttributesInterface, AttributesOrderInterface
11
14
  {
12
15
  use NameTrait;
13
16
  use AttributeTrait;
14
17
  use AssignmentTrait;
18
+ use AttributesOrderTrait;
15
19
 
16
20
  /**
17
21
  * @var bool
@@ -3,13 +3,17 @@
3
3
  namespace Phug\Parser\Node;
4
4
 
5
5
  use Phug\Parser\Node;
6
+ use Phug\Util\AttributesInterface;
7
+ use Phug\Util\AttributesOrderInterface;
6
8
  use Phug\Util\Partial\AssignmentTrait;
9
+ use Phug\Util\Partial\AttributesOrderTrait;
7
10
  use Phug\Util\Partial\AttributeTrait;
8
11
  use Phug\Util\Partial\NameTrait;
9
12
 
10
- class MixinNode extends Node
13
+ class MixinNode extends Node implements AttributesInterface, AttributesOrderInterface
11
14
  {
12
15
  use NameTrait;
13
16
  use AttributeTrait;
14
17
  use AssignmentTrait;
18
+ use AttributesOrderTrait;
15
19
  }
@@ -0,0 +1,87 @@
1
+ <?php
2
+
3
+ namespace Phug\Parser\TokenHandler;
4
+
5
+ use Phug\Lexer\TokenInterface;
6
+ use Phug\Parser\Node\ElementNode;
7
+ use Phug\Parser\Node\MixinCallNode;
8
+ use Phug\Parser\State;
9
+ use Phug\Parser\TokenHandlerInterface;
10
+
11
+ abstract class AbstractTokenHandler implements TokenHandlerInterface
12
+ {
13
+ const TOKEN_TYPE = TokenInterface::class;
14
+
15
+ public function handleToken(TokenInterface $token, State $state)
16
+ {
17
+ if (!is_a($token, static::TOKEN_TYPE)) {
18
+ $name = $this->getTypeName(static::TOKEN_TYPE);
19
+ $handler = $this->getClassLastPart(static::class);
20
+
21
+ throw new \RuntimeException(
22
+ "You can only pass $name tokens to $handler"
23
+ );
24
+ }
25
+
26
+ $method = 'handle'.$this->getClassLastPart(get_class($token));
27
+ $this->$method($token, $state);
28
+ }
29
+
30
+ protected function onlyOnElement(TokenInterface $token, State $state)
31
+ {
32
+ $this->createElementNodeIfMissing($token, $state);
33
+ $this->assertCurrentNodeIs($token, $state, [ElementNode::class, MixinCallNode::class]);
34
+ }
35
+
36
+ protected function createElementNodeIfMissing(TokenInterface $token, State $state)
37
+ {
38
+ if (!$state->getCurrentNode()) {
39
+ $state->setCurrentNode($state->createNode(ElementNode::class, $token));
40
+ }
41
+ }
42
+
43
+ protected function assertCurrentNodeIs(TokenInterface $token, State $state, array $nodeTypes)
44
+ {
45
+ if (!$state->currentNodeIs($nodeTypes)) {
46
+ $nodeTypes = array_values($nodeTypes);
47
+ $list = $this->getPluralTypeName(array_shift($nodeTypes));
48
+ $count = count($nodeTypes);
49
+
50
+ foreach ($nodeTypes as $i => $nodeType) {
51
+ $list .= ($i === $count - 1 ? ' and ' : ', ').$this->getPluralTypeName($nodeType);
52
+ }
53
+
54
+ $state->throwException(
55
+ ucfirst($this->getPluralTypeName(get_class($token))).' can only happen on '.$list,
56
+ 0,
57
+ $token
58
+ );
59
+ }
60
+ }
61
+
62
+ private function getClassLastPart($class)
63
+ {
64
+ $parts = explode('\\', $class);
65
+
66
+ return end($parts);
67
+ }
68
+
69
+ private function getTypeName($class)
70
+ {
71
+ $name = preg_replace('/(Token|Node)$/', '', $this->getClassLastPart($class));
72
+ $name = preg_replace('/([a-z])([A-Z])/', '$1-$2', $name);
73
+
74
+ return strtolower($name);
75
+ }
76
+
77
+ private function getPluralTypeName($class)
78
+ {
79
+ $name = $this->getTypeName($class);
80
+
81
+ if ($name === 'class') {
82
+ return 'classes';
83
+ }
84
+
85
+ return $name.'s';
86
+ }
87
+ }
@@ -4,34 +4,18 @@ namespace Phug\Parser\TokenHandler;
4
4
 
5
5
  use Phug\Lexer\Token\AssignmentToken;
6
6
  use Phug\Lexer\Token\AttributeStartToken;
7
- use Phug\Lexer\TokenInterface;
8
7
  use Phug\Parser\Node\AssignmentNode;
9
8
  use Phug\Parser\Node\ElementNode;
10
9
  use Phug\Parser\Node\MixinCallNode;
11
10
  use Phug\Parser\State;
12
- use Phug\Parser\TokenHandlerInterface;
13
11
 
14
- class AssignmentTokenHandler implements TokenHandlerInterface
12
+ class AssignmentTokenHandler extends AbstractTokenHandler
15
13
  {
16
- public function handleToken(TokenInterface $token, State $state)
17
- {
18
- if (!($token instanceof AssignmentToken)) {
19
- throw new \RuntimeException(
20
- 'You can only pass Assignment tokens to this token handler'
21
- );
22
- }
23
-
24
- if (!$state->getCurrentNode()) {
25
- $state->setCurrentNode($state->createNode(ElementNode::class, $token));
26
- }
14
+ const TOKEN_TYPE = AssignmentToken::class;
27
15
 
28
- if (!$state->currentNodeIs([ElementNode::class, MixinCallNode::class])) {
29
- $state->throwException(
30
- 'Assignments can only happen on elements and mixinCalls',
31
- 0,
32
- $token
33
- );
34
- }
16
+ public function handleAssignmentToken(AssignmentToken $token, State $state)
17
+ {
18
+ $this->onlyOnElement($token, $state);
35
19
 
36
20
  /** @var AssignmentNode $node */
37
21
  $node = $state->createNode(AssignmentNode::class, $token);
@@ -39,6 +23,7 @@ class AssignmentTokenHandler implements TokenHandlerInterface
39
23
 
40
24
  /** @var ElementNode|MixinCallNode $current */
41
25
  $current = $state->getCurrentNode();
26
+ $node->setOrder($current->getNextAttributeIndex());
42
27
  $current->getAssignments()->attach($node);
43
28
 
44
29
  if ($state->expectNext([AttributeStartToken::class])) {
@@ -3,18 +3,13 @@
3
3
  namespace Phug\Parser\TokenHandler;
4
4
 
5
5
  use Phug\Lexer\Token\AttributeEndToken;
6
- use Phug\Lexer\TokenInterface;
7
- use Phug\Parser\State;
8
- use Phug\Parser\TokenHandlerInterface;
9
6
 
10
- class AttributeEndTokenHandler implements TokenHandlerInterface
7
+ class AttributeEndTokenHandler extends AbstractTokenHandler
11
8
  {
12
- public function handleToken(TokenInterface $token, State $state)
9
+ const TOKEN_TYPE = AttributeEndToken::class;
10
+
11
+ public function handleAttributeEndToken()
13
12
  {
14
- if (!($token instanceof AttributeEndToken)) {
15
- throw new \RuntimeException(
16
- 'You can only pass attribute end tokens to this token handler'
17
- );
18
- }
13
+ // noop
19
14
  }
20
15
  }
@@ -5,7 +5,6 @@ namespace Phug\Parser\TokenHandler;
5
5
  use Phug\Lexer\Token\AttributeEndToken;
6
6
  use Phug\Lexer\Token\AttributeStartToken;
7
7
  use Phug\Lexer\Token\AttributeToken;
8
- use Phug\Lexer\TokenInterface;
9
8
  use Phug\Parser\Node\AssignmentNode;
10
9
  use Phug\Parser\Node\ElementNode;
11
10
  use Phug\Parser\Node\FilterNode;
@@ -14,35 +13,20 @@ use Phug\Parser\Node\MixinCallNode;
14
13
  use Phug\Parser\Node\MixinNode;
15
14
  use Phug\Parser\Node\VariableNode;
16
15
  use Phug\Parser\State;
17
- use Phug\Parser\TokenHandlerInterface;
18
16
 
19
- class AttributeStartTokenHandler implements TokenHandlerInterface
17
+ class AttributeStartTokenHandler extends AbstractTokenHandler
20
18
  {
21
- public function handleToken(TokenInterface $token, State $state)
22
- {
23
- if (!($token instanceof AttributeStartToken)) {
24
- throw new \RuntimeException(
25
- 'You can only pass attribute start tokens to this token handler'
26
- );
27
- }
19
+ const TOKEN_TYPE = AttributeStartToken::class;
28
20
 
29
- if (!$state->getCurrentNode()) {
30
- $state->setCurrentNode($state->createNode(ElementNode::class, $token));
31
- }
32
-
33
- if (!$state->currentNodeIs([
21
+ public function handleAttributeStartToken(AttributeStartToken $token, State $state)
22
+ {
23
+ $this->createElementNodeIfMissing($token, $state);
24
+ $this->assertCurrentNodeIs($token, $state, [
34
25
  ElementNode::class, AssignmentNode::class,
35
26
  ImportNode::class, VariableNode::class,
36
27
  MixinNode::class, MixinCallNode::class,
37
28
  FilterNode::class,
38
- ])) {
39
- $state->throwException(
40
- 'Attributes can only be placed on element, assignment, '
41
- .'import, variable, filter, mixin and mixinCall',
42
- 0,
43
- $token
44
- );
45
- }
29
+ ]);
46
30
 
47
31
  foreach ($state->lookUpNext([AttributeToken::class]) as $subToken) {
48
32
  $state->handleToken($subToken);
@@ -3,27 +3,21 @@
3
3
  namespace Phug\Parser\TokenHandler;
4
4
 
5
5
  use Phug\Lexer\Token\AttributeToken;
6
- use Phug\Lexer\TokenInterface;
7
6
  use Phug\Parser\Node\AssignmentNode;
8
7
  use Phug\Parser\Node\AttributeNode;
9
8
  use Phug\Parser\Node\ElementNode;
10
9
  use Phug\Parser\Node\MixinCallNode;
11
10
  use Phug\Parser\State;
12
- use Phug\Parser\TokenHandlerInterface;
11
+ use Phug\Util\AttributesOrderInterface;
12
+ use Phug\Util\OrderableInterface;
13
13
 
14
- class AttributeTokenHandler implements TokenHandlerInterface
14
+ class AttributeTokenHandler extends AbstractTokenHandler
15
15
  {
16
- public function handleToken(TokenInterface $token, State $state)
17
- {
18
- if (!($token instanceof AttributeToken)) {
19
- throw new \RuntimeException(
20
- 'You can only pass attribute tokens to this token handler'
21
- );
22
- }
16
+ const TOKEN_TYPE = AttributeToken::class;
23
17
 
24
- if (!$state->getCurrentNode()) {
25
- $state->setCurrentNode($state->createNode(ElementNode::class, $token));
26
- }
18
+ public function handleAttributeToken(AttributeToken $token, State $state)
19
+ {
20
+ $this->createElementNodeIfMissing($token, $state);
27
21
 
28
22
  /** @var AttributeNode $node */
29
23
  $node = $state->createNode(AttributeNode::class, $token);
@@ -38,16 +32,24 @@ class AttributeTokenHandler implements TokenHandlerInterface
38
32
  // Mixin calls and assignments take the first
39
33
  // expression set as the name as the value
40
34
  if (($value === '' || $value === null) &&
41
- $state->currentNodeIs([MixinCallNode::class, AssignmentNode::class])
35
+ (
36
+ $state->currentNodeIs([AssignmentNode::class]) ||
37
+ ($state->currentNodeIs([MixinCallNode::class]) && !$state->getCurrentNode()->areArgumentsCompleted())
38
+ )
42
39
  ) {
43
- if (!$state->currentNodeIs([MixinCallNode::class]) || !$state->getCurrentNode()->areArgumentsCompleted()) {
44
- $node->setValue($name);
45
- $node->setName(null);
46
- }
40
+ $node->setValue($name);
41
+ $node->setName(null);
47
42
  }
48
43
 
49
- /** @var ElementNode|MixinCallNode $current */
44
+ /** @var ElementNode|MixinCallNode|AssignmentNode $current */
50
45
  $current = $state->getCurrentNode();
46
+
47
+ if ($current instanceof AttributesOrderInterface) {
48
+ $node->setOrder($current->getNextAttributeIndex());
49
+ } elseif ($current instanceof OrderableInterface) {
50
+ $node->setOrder($current->getOrder());
51
+ }
52
+
51
53
  $current->getAttributes()->attach($node);
52
54
  }
53
55
  }