From 5372513142861ba5409113fef67ed6699daa515f Mon Sep 17 00:00:00 2001 From: tapframe Date: Wed, 17 Sep 2025 23:22:01 +0530 Subject: [PATCH] COMMIT TEST --- .gitignore | 3 +- assets/bootsplash/ios/BootSplash.storyboard | 46 + .../Contents.json | 20 + .../Contents.json | 23 + .../logo-7d142f.png | Bin 0 -> 3504 bytes .../logo-7d142f@2x.png | Bin 0 -> 7026 bytes .../logo-7d142f@3x.png | Bin 0 -> 12906 bytes ios/.bundle/config | 2 + ios/.gitignore | 30 + ios/.xcode.env | 11 + ios/Gemfile | 3 + ios/Gemfile.lock | 30 + ios/Nuvio.xcodeproj/project.pbxproj | 609 + .../xcshareddata/xcschemes/Nuvio.xcscheme | 88 + .../contents.xcworkspacedata | 10 + ios/Nuvio/AppDelegate.h | 7 + ios/Nuvio/AppDelegate.mm | 62 + .../App-Icon-1024x1024@1x.png | Bin 0 -> 220987 bytes .../AppIcon.appiconset/Contents.json | 14 + ios/Nuvio/Images.xcassets/Contents.json | 6 + .../Contents.json | 20 + .../SplashScreenLogo.imageset/Contents.json | 23 + .../SplashScreenLogo.imageset/image.png | Bin 0 -> 269134 bytes .../SplashScreenLogo.imageset/image@2x.png | Bin 0 -> 269134 bytes .../SplashScreenLogo.imageset/image@3x.png | Bin 0 -> 269134 bytes ios/Nuvio/Info.plist | 99 + ios/Nuvio/KSPlayerManager.m | 41 + ios/Nuvio/KSPlayerModule.swift | 36 + ios/Nuvio/KSPlayerView.swift | 281 + ios/Nuvio/KSPlayerViewManager.swift | 88 + ios/Nuvio/Nuvio-Bridging-Header.h | 11 + ios/Nuvio/Nuvio.entitlements | 10 + ios/Nuvio/PrivacyInfo.xcprivacy | 48 + ios/Nuvio/SplashScreen.storyboard | 44 + ios/Nuvio/Supporting/Expo.plist | 16 + ios/Nuvio/main.m | 10 + ios/Nuvio/noop-file.swift | 4 + ios/Podfile | 72 + ios/Podfile.lock | 2957 ++++ ios/Podfile.properties.json | 5 + ios/scripts/add_ksplayer_bridge.rb | 43 + ios/sentry.properties | 4 + ios/vendor/bundle/ruby/2.6.0/bin/xcodeproj | 27 + .../ruby/2.6.0/cache/CFPropertyList-3.0.7.gem | Bin 0 -> 18432 bytes .../bundle/ruby/2.6.0/cache/atomos-0.1.3.gem | Bin 0 -> 10240 bytes .../bundle/ruby/2.6.0/cache/base64-0.3.0.gem | Bin 0 -> 11776 bytes .../bundle/ruby/2.6.0/cache/claide-1.1.0.gem | Bin 0 -> 28160 bytes .../ruby/2.6.0/cache/colored2-3.1.2.gem | Bin 0 -> 10240 bytes .../bundle/ruby/2.6.0/cache/nanaimo-0.4.0.gem | Bin 0 -> 20480 bytes .../bundle/ruby/2.6.0/cache/nkf-0.2.0.gem | Bin 0 -> 194048 bytes .../bundle/ruby/2.6.0/cache/rexml-3.4.4.gem | Bin 0 -> 105984 bytes .../ruby/2.6.0/cache/xcodeproj-1.27.0.gem | Bin 0 -> 83968 bytes .../2.6.0/nkf-0.2.0/gem.build_complete | 0 .../2.6.0/nkf-0.2.0/gem_make.out | 16 + .../2.6.0/nkf-0.2.0/nkf.bundle | Bin 0 -> 337488 bytes .../2.6.0/gems/CFPropertyList-3.0.7/LICENSE | 19 + .../2.6.0/gems/CFPropertyList-3.0.7/README.md | 79 + .../gems/CFPropertyList-3.0.7/README.rdoc | 43 + .../2.6.0/gems/CFPropertyList-3.0.7/THANKS | 7 + .../lib/cfpropertylist.rb | 6 + .../cfpropertylist/rbBinaryCFPropertyList.rb | 594 + .../lib/cfpropertylist/rbCFPlistError.rb | 26 + .../lib/cfpropertylist/rbCFPropertyList.rb | 449 + .../lib/cfpropertylist/rbCFTypes.rb | 349 + .../lib/cfpropertylist/rbLibXMLParser.rb | 149 + .../lib/cfpropertylist/rbNokogiriParser.rb | 152 + .../cfpropertylist/rbPlainCFPropertyList.rb | 199 + .../lib/cfpropertylist/rbREXMLParser.rb | 148 + .../ruby/2.6.0/gems/atomos-0.1.3/.gitignore | 11 + .../ruby/2.6.0/gems/atomos-0.1.3/.rspec | 3 + .../ruby/2.6.0/gems/atomos-0.1.3/.rubocop.yml | 2 + .../2.6.0/gems/atomos-0.1.3/.rubocop_todo.yml | 32 + .../ruby/2.6.0/gems/atomos-0.1.3/.travis.yml | 5 + .../gems/atomos-0.1.3/CODE_OF_CONDUCT.md | 74 + .../ruby/2.6.0/gems/atomos-0.1.3/Gemfile | 8 + .../ruby/2.6.0/gems/atomos-0.1.3/Gemfile.lock | 51 + .../ruby/2.6.0/gems/atomos-0.1.3/LICENSE.txt | 21 + .../ruby/2.6.0/gems/atomos-0.1.3/README.md | 43 + .../ruby/2.6.0/gems/atomos-0.1.3/Rakefile | 11 + .../ruby/2.6.0/gems/atomos-0.1.3/VERSION | 1 + .../2.6.0/gems/atomos-0.1.3/atomos.gemspec | 26 + .../ruby/2.6.0/gems/atomos-0.1.3/bin/console | 15 + .../ruby/2.6.0/gems/atomos-0.1.3/bin/rake | 29 + .../ruby/2.6.0/gems/atomos-0.1.3/bin/rspec | 29 + .../ruby/2.6.0/gems/atomos-0.1.3/bin/rubocop | 29 + .../ruby/2.6.0/gems/atomos-0.1.3/bin/setup | 8 + .../2.6.0/gems/atomos-0.1.3/lib/atomos.rb | 47 + .../gems/atomos-0.1.3/lib/atomos/version.rb | 5 + .../bundle/ruby/2.6.0/gems/base64-0.3.0/BSDL | 22 + .../ruby/2.6.0/gems/base64-0.3.0/COPYING | 56 + .../bundle/ruby/2.6.0/gems/base64-0.3.0/LEGAL | 60 + .../ruby/2.6.0/gems/base64-0.3.0/README.md | 48 + .../2.6.0/gems/base64-0.3.0/lib/base64.rb | 381 + .../2.6.0/gems/base64-0.3.0/sig/base64.rbs | 355 + .../claide-1.1.0/.github/workflows/ci.yml | 45 + .../ruby/2.6.0/gems/claide-1.1.0/.gitignore | 17 + .../bundle/ruby/2.6.0/gems/claide-1.1.0/.kick | 30 + .../ruby/2.6.0/gems/claide-1.1.0/.rubocop.yml | 6 + .../gems/claide-1.1.0/.rubocop_cocoapods.yml | 151 + .../2.6.0/gems/claide-1.1.0/.rubocop_todo.yml | 70 + .../ruby/2.6.0/gems/claide-1.1.0/.yardopts | 1 + .../ruby/2.6.0/gems/claide-1.1.0/Gemfile | 22 + .../ruby/2.6.0/gems/claide-1.1.0/Gemfile.lock | 79 + .../ruby/2.6.0/gems/claide-1.1.0/LICENSE | 21 + .../ruby/2.6.0/gems/claide-1.1.0/README.md | 115 + .../ruby/2.6.0/gems/claide-1.1.0/Rakefile | 57 + .../2.6.0/gems/claide-1.1.0/claide.gemspec | 23 + .../2.6.0/gems/claide-1.1.0/lib/claide.rb | 13 + .../gems/claide-1.1.0/lib/claide/ansi.rb | 126 + .../claide-1.1.0/lib/claide/ansi/cursor.rb | 69 + .../claide-1.1.0/lib/claide/ansi/graphics.rb | 72 + .../lib/claide/ansi/string_escaper.rb | 79 + .../gems/claide-1.1.0/lib/claide/argument.rb | 62 + .../gems/claide-1.1.0/lib/claide/argv.rb | 329 + .../gems/claide-1.1.0/lib/claide/command.rb | 669 + .../lib/claide/command/argument_suggester.rb | 99 + .../claide-1.1.0/lib/claide/command/banner.rb | 307 + .../lib/claide/command/plugin_manager.rb | 124 + .../claide-1.1.0/lib/claide/gem_version.rb | 7 + .../gems/claide-1.1.0/lib/claide/help.rb | 58 + .../lib/claide/informative_error.rb | 21 + .../ruby/2.6.0/gems/colored2-3.1.2/LICENSE | 23 + .../ruby/2.6.0/gems/colored2-3.1.2/README.md | 93 + .../ruby/2.6.0/gems/colored2-3.1.2/Rakefile | 13 + .../2.6.0/gems/colored2-3.1.2/lib/colored2.rb | 85 + .../lib/colored2/ascii_decorator.rb | 86 + .../gems/colored2-3.1.2/lib/colored2/codes.rb | 63 + .../colored2-3.1.2/lib/colored2/numbers.rb | 11 + .../colored2-3.1.2/lib/colored2/object.rb | 2 + .../colored2-3.1.2/lib/colored2/strings.rb | 2 + .../colored2-3.1.2/lib/colored2/version.rb | 3 + .../spec/colored2/numbers_spec.rb | 26 + .../spec/colored2/object_spec.rb | 24 + .../spec/colored2/strings_spec.rb | 77 + .../gems/colored2-3.1.2/spec/colored2_spec.rb | 23 + .../gems/colored2-3.1.2/spec/spec_helper.rb | 5 + .../gems/nanaimo-0.4.0/.github/dependabot.yml | 14 + .../nanaimo-0.4.0/.github/workflows/test.yml | 43 + .../ruby/2.6.0/gems/nanaimo-0.4.0/.gitignore | 8 + .../ruby/2.6.0/gems/nanaimo-0.4.0/.rspec | 2 + .../2.6.0/gems/nanaimo-0.4.0/.rubocop.yml | 14 + .../gems/nanaimo-0.4.0/.rubocop_todo.yml | 173 + .../gems/nanaimo-0.4.0/CODE_OF_CONDUCT.md | 49 + .../ruby/2.6.0/gems/nanaimo-0.4.0/Gemfile | 17 + .../2.6.0/gems/nanaimo-0.4.0/Gemfile.lock | 62 + .../ruby/2.6.0/gems/nanaimo-0.4.0/LICENSE.txt | 21 + .../ruby/2.6.0/gems/nanaimo-0.4.0/README.md | 55 + .../ruby/2.6.0/gems/nanaimo-0.4.0/Rakefile | 80 + .../ruby/2.6.0/gems/nanaimo-0.4.0/bin/console | 15 + .../ruby/2.6.0/gems/nanaimo-0.4.0/bin/setup | 8 + .../2.6.0/gems/nanaimo-0.4.0/lib/nanaimo.rb | 22 + .../gems/nanaimo-0.4.0/lib/nanaimo/object.rb | 102 + .../gems/nanaimo-0.4.0/lib/nanaimo/plist.rb | 35 + .../gems/nanaimo-0.4.0/lib/nanaimo/reader.rb | 287 + .../gems/nanaimo-0.4.0/lib/nanaimo/unicode.rb | 89 + .../lib/nanaimo/unicode/next_step_mapping.rb | 136 + .../lib/nanaimo/unicode/quote_maps.rb | 57 + .../gems/nanaimo-0.4.0/lib/nanaimo/version.rb | 5 + .../gems/nanaimo-0.4.0/lib/nanaimo/writer.rb | 206 + .../lib/nanaimo/writer/pbxproj.rb | 83 + .../nanaimo-0.4.0/lib/nanaimo/writer/xml.rb | 139 + .../2.6.0/gems/nanaimo-0.4.0/nanaimo.gemspec | 28 + .../gems/nkf-0.2.0/.git-blame-ignore-revs | 7 + .../gems/nkf-0.2.0/.github/dependabot.yml | 6 + .../gems/nkf-0.2.0/.github/workflows/test.yml | 29 + .../ruby/2.6.0/gems/nkf-0.2.0/.gitignore | 14 + .../bundle/ruby/2.6.0/gems/nkf-0.2.0/Gemfile | 5 + .../ruby/2.6.0/gems/nkf-0.2.0/LICENSE.txt | 22 + .../ruby/2.6.0/gems/nkf-0.2.0/README.md | 38 + .../bundle/ruby/2.6.0/gems/nkf-0.2.0/Rakefile | 24 + .../ruby/2.6.0/gems/nkf-0.2.0/bin/console | 14 + .../ruby/2.6.0/gems/nkf-0.2.0/bin/setup | 8 + .../ext/java/org/jruby/ext/nkf/Command.java | 58 + .../java/org/jruby/ext/nkf/CommandParser.java | 70 + .../java/org/jruby/ext/nkf/NKFLibrary.java | 13 + .../ext/java/org/jruby/ext/nkf/Option.java | 80 + .../ext/java/org/jruby/ext/nkf/Options.java | 109 + .../ext/java/org/jruby/ext/nkf/RubyNKF.java | 601 + .../gems/nkf-0.2.0/ext/nkf/.sitearchdir.time | 0 .../2.6.0/gems/nkf-0.2.0/ext/nkf/Makefile | 267 + .../2.6.0/gems/nkf-0.2.0/ext/nkf/extconf.rb | 3 + .../gems/nkf-0.2.0/ext/nkf/nkf-utf8/config.h | 51 + .../gems/nkf-0.2.0/ext/nkf/nkf-utf8/nkf.c | 7205 ++++++++ .../gems/nkf-0.2.0/ext/nkf/nkf-utf8/nkf.h | 189 + .../gems/nkf-0.2.0/ext/nkf/nkf-utf8/utf8tbl.c | 14638 ++++++++++++++++ .../gems/nkf-0.2.0/ext/nkf/nkf-utf8/utf8tbl.h | 72 + .../ruby/2.6.0/gems/nkf-0.2.0/ext/nkf/nkf.c | 506 + .../ruby/2.6.0/gems/nkf-0.2.0/ext/nkf/nkf.o | Bin 0 -> 526064 bytes .../ruby/2.6.0/gems/nkf-0.2.0/lib/kconv.rb | 283 + .../ruby/2.6.0/gems/nkf-0.2.0/lib/nkf.rb | 6 + .../ruby/2.6.0/gems/nkf-0.2.0/nkf.gemspec | 43 + .../ruby/2.6.0/gems/rexml-3.4.4/LICENSE.txt | 22 + .../ruby/2.6.0/gems/rexml-3.4.4/NEWS.md | 843 + .../ruby/2.6.0/gems/rexml-3.4.4/README.md | 57 + .../gems/rexml-3.4.4/doc/rexml/context.rdoc | 143 + .../doc/rexml/tasks/rdoc/child.rdoc | 87 + .../doc/rexml/tasks/rdoc/document.rdoc | 276 + .../doc/rexml/tasks/rdoc/element.rdoc | 602 + .../doc/rexml/tasks/rdoc/node.rdoc | 97 + .../doc/rexml/tasks/rdoc/parent.rdoc | 267 + .../doc/rexml/tasks/tocs/child_toc.rdoc | 12 + .../doc/rexml/tasks/tocs/document_toc.rdoc | 30 + .../doc/rexml/tasks/tocs/element_toc.rdoc | 55 + .../doc/rexml/tasks/tocs/master_toc.rdoc | 135 + .../doc/rexml/tasks/tocs/node_toc.rdoc | 16 + .../doc/rexml/tasks/tocs/parent_toc.rdoc | 25 + .../gems/rexml-3.4.4/doc/rexml/tutorial.rdoc | 1358 ++ .../ruby/2.6.0/gems/rexml-3.4.4/lib/rexml.rb | 3 + .../gems/rexml-3.4.4/lib/rexml/attlistdecl.rb | 63 + .../gems/rexml-3.4.4/lib/rexml/attribute.rb | 210 + .../2.6.0/gems/rexml-3.4.4/lib/rexml/cdata.rb | 68 + .../2.6.0/gems/rexml-3.4.4/lib/rexml/child.rb | 96 + .../gems/rexml-3.4.4/lib/rexml/comment.rb | 80 + .../gems/rexml-3.4.4/lib/rexml/doctype.rb | 306 + .../gems/rexml-3.4.4/lib/rexml/document.rb | 471 + .../rexml-3.4.4/lib/rexml/dtd/attlistdecl.rb | 11 + .../gems/rexml-3.4.4/lib/rexml/dtd/dtd.rb | 47 + .../rexml-3.4.4/lib/rexml/dtd/elementdecl.rb | 18 + .../rexml-3.4.4/lib/rexml/dtd/entitydecl.rb | 57 + .../rexml-3.4.4/lib/rexml/dtd/notationdecl.rb | 40 + .../gems/rexml-3.4.4/lib/rexml/element.rb | 2578 +++ .../gems/rexml-3.4.4/lib/rexml/encoding.rb | 48 + .../gems/rexml-3.4.4/lib/rexml/entity.rb | 142 + .../lib/rexml/formatters/default.rb | 116 + .../lib/rexml/formatters/pretty.rb | 142 + .../lib/rexml/formatters/transitive.rb | 58 + .../gems/rexml-3.4.4/lib/rexml/functions.rb | 446 + .../gems/rexml-3.4.4/lib/rexml/instruction.rb | 79 + .../gems/rexml-3.4.4/lib/rexml/light/node.rb | 188 + .../gems/rexml-3.4.4/lib/rexml/namespace.rb | 63 + .../2.6.0/gems/rexml-3.4.4/lib/rexml/node.rb | 80 + .../gems/rexml-3.4.4/lib/rexml/output.rb | 30 + .../gems/rexml-3.4.4/lib/rexml/parent.rb | 166 + .../rexml-3.4.4/lib/rexml/parseexception.rb | 53 + .../lib/rexml/parsers/baseparser.rb | 949 + .../lib/rexml/parsers/lightparser.rb | 59 + .../lib/rexml/parsers/pullparser.rb | 213 + .../lib/rexml/parsers/sax2parser.rb | 270 + .../lib/rexml/parsers/streamparser.rb | 67 + .../lib/rexml/parsers/treeparser.rb | 89 + .../lib/rexml/parsers/ultralightparser.rb | 57 + .../lib/rexml/parsers/xpathparser.rb | 739 + .../gems/rexml-3.4.4/lib/rexml/quickpath.rb | 267 + .../2.6.0/gems/rexml-3.4.4/lib/rexml/rexml.rb | 39 + .../rexml-3.4.4/lib/rexml/sax2listener.rb | 98 + .../gems/rexml-3.4.4/lib/rexml/security.rb | 28 + .../gems/rexml-3.4.4/lib/rexml/source.rb | 388 + .../rexml-3.4.4/lib/rexml/streamlistener.rb | 93 + .../2.6.0/gems/rexml-3.4.4/lib/rexml/text.rb | 420 + .../lib/rexml/undefinednamespaceexception.rb | 9 + .../lib/rexml/validation/relaxng.rb | 540 + .../lib/rexml/validation/validation.rb | 144 + .../rexml/validation/validationexception.rb | 10 + .../gems/rexml-3.4.4/lib/rexml/xmldecl.rb | 130 + .../gems/rexml-3.4.4/lib/rexml/xmltokens.rb | 85 + .../2.6.0/gems/rexml-3.4.4/lib/rexml/xpath.rb | 70 + .../rexml-3.4.4/lib/rexml/xpath_parser.rb | 980 ++ .../ruby/2.6.0/gems/xcodeproj-1.27.0/LICENSE | 19 + .../2.6.0/gems/xcodeproj-1.27.0/README.md | 95 + .../2.6.0/gems/xcodeproj-1.27.0/bin/xcodeproj | 10 + .../gems/xcodeproj-1.27.0/lib/xcodeproj.rb | 29 + .../xcodeproj-1.27.0/lib/xcodeproj/command.rb | 66 + .../lib/xcodeproj/command/config_dump.rb | 91 + .../lib/xcodeproj/command/project_diff.rb | 56 + .../lib/xcodeproj/command/show.rb | 60 + .../lib/xcodeproj/command/sort.rb | 44 + .../lib/xcodeproj/command/target_diff.rb | 43 + .../xcodeproj-1.27.0/lib/xcodeproj/config.rb | 386 + .../config/other_linker_flags_parser.rb | 73 + .../lib/xcodeproj/constants.rb | 476 + .../xcodeproj-1.27.0/lib/xcodeproj/differ.rb | 270 + .../lib/xcodeproj/gem_version.rb | 5 + .../xcodeproj-1.27.0/lib/xcodeproj/helper.rb | 30 + .../xcodeproj-1.27.0/lib/xcodeproj/plist.rb | 94 + .../xcodeproj-1.27.0/lib/xcodeproj/project.rb | 870 + .../lib/xcodeproj/project/case_converter.rb | 90 + .../lib/xcodeproj/project/object.rb | 537 + .../project/object/build_configuration.rb | 271 + .../xcodeproj/project/object/build_file.rb | 84 + .../xcodeproj/project/object/build_phase.rb | 369 + .../xcodeproj/project/object/build_rule.rb | 109 + .../project/object/configuration_list.rb | 117 + .../project/object/container_item_proxy.rb | 116 + .../project/object/file_reference.rb | 346 + .../file_system_synchronized_exception_set.rb | 62 + .../file_system_synchronized_root_group.rb | 74 + .../lib/xcodeproj/project/object/group.rb | 507 + ...ttings_array_settings_by_object_version.rb | 72 + .../object/helpers/file_references_factory.rb | 245 + .../object/helpers/groupable_helper.rb | 260 + .../xcodeproj/project/object/native_target.rb | 772 + .../project/object/reference_proxy.rb | 86 + .../xcodeproj/project/object/root_object.rb | 108 + .../object/swift_package_local_reference.rb | 34 + .../swift_package_product_dependency.rb | 29 + .../object/swift_package_remote_reference.rb | 33 + .../project/object/target_dependency.rb | 97 + .../xcodeproj/project/object_attributes.rb | 522 + .../xcodeproj/project/object_dictionary.rb | 210 + .../lib/xcodeproj/project/object_list.rb | 223 + .../lib/xcodeproj/project/project_helper.rb | 343 + .../lib/xcodeproj/project/uuid_generator.rb | 132 + .../xcodeproj-1.27.0/lib/xcodeproj/scheme.rb | 375 + .../scheme/abstract_scheme_action.rb | 100 + .../lib/xcodeproj/scheme/analyze_action.rb | 19 + .../lib/xcodeproj/scheme/archive_action.rb | 59 + .../lib/xcodeproj/scheme/build_action.rb | 298 + .../scheme/buildable_product_runnable.rb | 55 + .../xcodeproj/scheme/buildable_reference.rb | 129 + .../scheme/command_line_arguments.rb | 162 + .../xcodeproj/scheme/environment_variables.rb | 170 + .../lib/xcodeproj/scheme/execution_action.rb | 86 + .../lib/xcodeproj/scheme/launch_action.rb | 179 + .../scheme/location_scenario_reference.rb | 49 + .../lib/xcodeproj/scheme/macro_expansion.rb | 34 + .../lib/xcodeproj/scheme/profile_action.rb | 57 + .../lib/xcodeproj/scheme/remote_runnable.rb | 92 + .../scheme/send_email_action_content.rb | 84 + .../scheme/shell_script_action_content.rb | 77 + .../lib/xcodeproj/scheme/test_action.rb | 394 + .../xcodeproj/scheme/xml_element_wrapper.rb | 82 + .../lib/xcodeproj/user_interface.rb | 22 + .../lib/xcodeproj/workspace.rb | 277 + .../lib/xcodeproj/workspace/file_reference.rb | 79 + .../xcodeproj/workspace/group_reference.rb | 67 + .../lib/xcodeproj/workspace/reference.rb | 40 + .../lib/xcodeproj/xcodebuild_helper.rb | 117 + .../CFPropertyList-3.0.7.gemspec | 52 + .../2.6.0/specifications/atomos-0.1.3.gemspec | 42 + .../2.6.0/specifications/base64-0.3.0.gemspec | 23 + .../2.6.0/specifications/claide-1.1.0.gemspec | 20 + .../specifications/colored2-3.1.2.gemspec | 39 + .../specifications/nanaimo-0.4.0.gemspec | 39 + .../2.6.0/specifications/nkf-0.2.0.gemspec | 26 + .../2.6.0/specifications/rexml-3.4.4.gemspec | 25 + .../specifications/xcodeproj-1.27.0.gemspec | 50 + package-lock.json | 3 +- package.json | 3 +- src/components/player/KSPlayer.tsx | 137 + src/components/player/VideoPlayer.tsx | 114 +- 340 files changed, 65322 insertions(+), 77 deletions(-) create mode 100644 assets/bootsplash/ios/BootSplash.storyboard create mode 100644 assets/bootsplash/ios/Colors.xcassets/BootSplashBackground-7d142f.colorset/Contents.json create mode 100644 assets/bootsplash/ios/Images.xcassets/BootSplashLogo-7d142f.imageset/Contents.json create mode 100644 assets/bootsplash/ios/Images.xcassets/BootSplashLogo-7d142f.imageset/logo-7d142f.png create mode 100644 assets/bootsplash/ios/Images.xcassets/BootSplashLogo-7d142f.imageset/logo-7d142f@2x.png create mode 100644 assets/bootsplash/ios/Images.xcassets/BootSplashLogo-7d142f.imageset/logo-7d142f@3x.png create mode 100644 ios/.bundle/config create mode 100644 ios/.gitignore create mode 100644 ios/.xcode.env create mode 100644 ios/Gemfile create mode 100644 ios/Gemfile.lock create mode 100644 ios/Nuvio.xcodeproj/project.pbxproj create mode 100644 ios/Nuvio.xcodeproj/xcshareddata/xcschemes/Nuvio.xcscheme create mode 100644 ios/Nuvio.xcworkspace/contents.xcworkspacedata create mode 100644 ios/Nuvio/AppDelegate.h create mode 100644 ios/Nuvio/AppDelegate.mm create mode 100644 ios/Nuvio/Images.xcassets/AppIcon.appiconset/App-Icon-1024x1024@1x.png create mode 100644 ios/Nuvio/Images.xcassets/AppIcon.appiconset/Contents.json create mode 100644 ios/Nuvio/Images.xcassets/Contents.json create mode 100644 ios/Nuvio/Images.xcassets/SplashScreenBackground.colorset/Contents.json create mode 100644 ios/Nuvio/Images.xcassets/SplashScreenLogo.imageset/Contents.json create mode 100644 ios/Nuvio/Images.xcassets/SplashScreenLogo.imageset/image.png create mode 100644 ios/Nuvio/Images.xcassets/SplashScreenLogo.imageset/image@2x.png create mode 100644 ios/Nuvio/Images.xcassets/SplashScreenLogo.imageset/image@3x.png create mode 100644 ios/Nuvio/Info.plist create mode 100644 ios/Nuvio/KSPlayerManager.m create mode 100644 ios/Nuvio/KSPlayerModule.swift create mode 100644 ios/Nuvio/KSPlayerView.swift create mode 100644 ios/Nuvio/KSPlayerViewManager.swift create mode 100644 ios/Nuvio/Nuvio-Bridging-Header.h create mode 100644 ios/Nuvio/Nuvio.entitlements create mode 100644 ios/Nuvio/PrivacyInfo.xcprivacy create mode 100644 ios/Nuvio/SplashScreen.storyboard create mode 100644 ios/Nuvio/Supporting/Expo.plist create mode 100644 ios/Nuvio/main.m create mode 100644 ios/Nuvio/noop-file.swift create mode 100644 ios/Podfile create mode 100644 ios/Podfile.lock create mode 100644 ios/Podfile.properties.json create mode 100644 ios/scripts/add_ksplayer_bridge.rb create mode 100644 ios/sentry.properties create mode 100644 ios/vendor/bundle/ruby/2.6.0/bin/xcodeproj create mode 100644 ios/vendor/bundle/ruby/2.6.0/cache/CFPropertyList-3.0.7.gem create mode 100644 ios/vendor/bundle/ruby/2.6.0/cache/atomos-0.1.3.gem create mode 100644 ios/vendor/bundle/ruby/2.6.0/cache/base64-0.3.0.gem create mode 100644 ios/vendor/bundle/ruby/2.6.0/cache/claide-1.1.0.gem create mode 100644 ios/vendor/bundle/ruby/2.6.0/cache/colored2-3.1.2.gem create mode 100644 ios/vendor/bundle/ruby/2.6.0/cache/nanaimo-0.4.0.gem create mode 100644 ios/vendor/bundle/ruby/2.6.0/cache/nkf-0.2.0.gem create mode 100644 ios/vendor/bundle/ruby/2.6.0/cache/rexml-3.4.4.gem create mode 100644 ios/vendor/bundle/ruby/2.6.0/cache/xcodeproj-1.27.0.gem create mode 100644 ios/vendor/bundle/ruby/2.6.0/extensions/universal-darwin-24/2.6.0/nkf-0.2.0/gem.build_complete create mode 100644 ios/vendor/bundle/ruby/2.6.0/extensions/universal-darwin-24/2.6.0/nkf-0.2.0/gem_make.out create mode 100644 ios/vendor/bundle/ruby/2.6.0/extensions/universal-darwin-24/2.6.0/nkf-0.2.0/nkf.bundle create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/CFPropertyList-3.0.7/LICENSE create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/CFPropertyList-3.0.7/README.md create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/CFPropertyList-3.0.7/README.rdoc create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/CFPropertyList-3.0.7/THANKS create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/CFPropertyList-3.0.7/lib/cfpropertylist.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/CFPropertyList-3.0.7/lib/cfpropertylist/rbBinaryCFPropertyList.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/CFPropertyList-3.0.7/lib/cfpropertylist/rbCFPlistError.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/CFPropertyList-3.0.7/lib/cfpropertylist/rbCFPropertyList.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/CFPropertyList-3.0.7/lib/cfpropertylist/rbCFTypes.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/CFPropertyList-3.0.7/lib/cfpropertylist/rbLibXMLParser.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/CFPropertyList-3.0.7/lib/cfpropertylist/rbNokogiriParser.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/CFPropertyList-3.0.7/lib/cfpropertylist/rbPlainCFPropertyList.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/CFPropertyList-3.0.7/lib/cfpropertylist/rbREXMLParser.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/atomos-0.1.3/.gitignore create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/atomos-0.1.3/.rspec create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/atomos-0.1.3/.rubocop.yml create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/atomos-0.1.3/.rubocop_todo.yml create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/atomos-0.1.3/.travis.yml create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/atomos-0.1.3/CODE_OF_CONDUCT.md create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/atomos-0.1.3/Gemfile create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/atomos-0.1.3/Gemfile.lock create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/atomos-0.1.3/LICENSE.txt create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/atomos-0.1.3/README.md create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/atomos-0.1.3/Rakefile create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/atomos-0.1.3/VERSION create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/atomos-0.1.3/atomos.gemspec create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/atomos-0.1.3/bin/console create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/atomos-0.1.3/bin/rake create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/atomos-0.1.3/bin/rspec create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/atomos-0.1.3/bin/rubocop create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/atomos-0.1.3/bin/setup create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/atomos-0.1.3/lib/atomos.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/atomos-0.1.3/lib/atomos/version.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/base64-0.3.0/BSDL create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/base64-0.3.0/COPYING create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/base64-0.3.0/LEGAL create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/base64-0.3.0/README.md create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/base64-0.3.0/lib/base64.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/base64-0.3.0/sig/base64.rbs create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/claide-1.1.0/.github/workflows/ci.yml create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/claide-1.1.0/.gitignore create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/claide-1.1.0/.kick create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/claide-1.1.0/.rubocop.yml create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/claide-1.1.0/.rubocop_cocoapods.yml create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/claide-1.1.0/.rubocop_todo.yml create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/claide-1.1.0/.yardopts create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/claide-1.1.0/Gemfile create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/claide-1.1.0/Gemfile.lock create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/claide-1.1.0/LICENSE create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/claide-1.1.0/README.md create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/claide-1.1.0/Rakefile create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/claide-1.1.0/claide.gemspec create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/claide-1.1.0/lib/claide.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/claide-1.1.0/lib/claide/ansi.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/claide-1.1.0/lib/claide/ansi/cursor.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/claide-1.1.0/lib/claide/ansi/graphics.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/claide-1.1.0/lib/claide/ansi/string_escaper.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/claide-1.1.0/lib/claide/argument.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/claide-1.1.0/lib/claide/argv.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/claide-1.1.0/lib/claide/command.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/claide-1.1.0/lib/claide/command/argument_suggester.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/claide-1.1.0/lib/claide/command/banner.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/claide-1.1.0/lib/claide/command/plugin_manager.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/claide-1.1.0/lib/claide/gem_version.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/claide-1.1.0/lib/claide/help.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/claide-1.1.0/lib/claide/informative_error.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/colored2-3.1.2/LICENSE create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/colored2-3.1.2/README.md create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/colored2-3.1.2/Rakefile create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/colored2-3.1.2/lib/colored2.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/colored2-3.1.2/lib/colored2/ascii_decorator.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/colored2-3.1.2/lib/colored2/codes.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/colored2-3.1.2/lib/colored2/numbers.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/colored2-3.1.2/lib/colored2/object.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/colored2-3.1.2/lib/colored2/strings.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/colored2-3.1.2/lib/colored2/version.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/colored2-3.1.2/spec/colored2/numbers_spec.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/colored2-3.1.2/spec/colored2/object_spec.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/colored2-3.1.2/spec/colored2/strings_spec.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/colored2-3.1.2/spec/colored2_spec.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/colored2-3.1.2/spec/spec_helper.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/nanaimo-0.4.0/.github/dependabot.yml create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/nanaimo-0.4.0/.github/workflows/test.yml create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/nanaimo-0.4.0/.gitignore create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/nanaimo-0.4.0/.rspec create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/nanaimo-0.4.0/.rubocop.yml create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/nanaimo-0.4.0/.rubocop_todo.yml create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/nanaimo-0.4.0/CODE_OF_CONDUCT.md create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/nanaimo-0.4.0/Gemfile create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/nanaimo-0.4.0/Gemfile.lock create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/nanaimo-0.4.0/LICENSE.txt create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/nanaimo-0.4.0/README.md create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/nanaimo-0.4.0/Rakefile create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/nanaimo-0.4.0/bin/console create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/nanaimo-0.4.0/bin/setup create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/nanaimo-0.4.0/lib/nanaimo.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/nanaimo-0.4.0/lib/nanaimo/object.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/nanaimo-0.4.0/lib/nanaimo/plist.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/nanaimo-0.4.0/lib/nanaimo/reader.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/nanaimo-0.4.0/lib/nanaimo/unicode.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/nanaimo-0.4.0/lib/nanaimo/unicode/next_step_mapping.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/nanaimo-0.4.0/lib/nanaimo/unicode/quote_maps.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/nanaimo-0.4.0/lib/nanaimo/version.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/nanaimo-0.4.0/lib/nanaimo/writer.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/nanaimo-0.4.0/lib/nanaimo/writer/pbxproj.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/nanaimo-0.4.0/lib/nanaimo/writer/xml.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/nanaimo-0.4.0/nanaimo.gemspec create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/nkf-0.2.0/.git-blame-ignore-revs create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/nkf-0.2.0/.github/dependabot.yml create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/nkf-0.2.0/.github/workflows/test.yml create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/nkf-0.2.0/.gitignore create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/nkf-0.2.0/Gemfile create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/nkf-0.2.0/LICENSE.txt create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/nkf-0.2.0/README.md create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/nkf-0.2.0/Rakefile create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/nkf-0.2.0/bin/console create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/nkf-0.2.0/bin/setup create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/nkf-0.2.0/ext/java/org/jruby/ext/nkf/Command.java create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/nkf-0.2.0/ext/java/org/jruby/ext/nkf/CommandParser.java create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/nkf-0.2.0/ext/java/org/jruby/ext/nkf/NKFLibrary.java create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/nkf-0.2.0/ext/java/org/jruby/ext/nkf/Option.java create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/nkf-0.2.0/ext/java/org/jruby/ext/nkf/Options.java create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/nkf-0.2.0/ext/java/org/jruby/ext/nkf/RubyNKF.java create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/nkf-0.2.0/ext/nkf/.sitearchdir.time create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/nkf-0.2.0/ext/nkf/Makefile create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/nkf-0.2.0/ext/nkf/extconf.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/nkf-0.2.0/ext/nkf/nkf-utf8/config.h create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/nkf-0.2.0/ext/nkf/nkf-utf8/nkf.c create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/nkf-0.2.0/ext/nkf/nkf-utf8/nkf.h create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/nkf-0.2.0/ext/nkf/nkf-utf8/utf8tbl.c create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/nkf-0.2.0/ext/nkf/nkf-utf8/utf8tbl.h create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/nkf-0.2.0/ext/nkf/nkf.c create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/nkf-0.2.0/ext/nkf/nkf.o create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/nkf-0.2.0/lib/kconv.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/nkf-0.2.0/lib/nkf.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/nkf-0.2.0/nkf.gemspec create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/LICENSE.txt create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/NEWS.md create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/README.md create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/doc/rexml/context.rdoc create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/doc/rexml/tasks/rdoc/child.rdoc create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/doc/rexml/tasks/rdoc/document.rdoc create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/doc/rexml/tasks/rdoc/element.rdoc create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/doc/rexml/tasks/rdoc/node.rdoc create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/doc/rexml/tasks/rdoc/parent.rdoc create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/doc/rexml/tasks/tocs/child_toc.rdoc create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/doc/rexml/tasks/tocs/document_toc.rdoc create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/doc/rexml/tasks/tocs/element_toc.rdoc create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/doc/rexml/tasks/tocs/master_toc.rdoc create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/doc/rexml/tasks/tocs/node_toc.rdoc create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/doc/rexml/tasks/tocs/parent_toc.rdoc create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/doc/rexml/tutorial.rdoc create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/attlistdecl.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/attribute.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/cdata.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/child.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/comment.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/doctype.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/document.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/dtd/attlistdecl.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/dtd/dtd.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/dtd/elementdecl.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/dtd/entitydecl.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/dtd/notationdecl.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/element.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/encoding.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/entity.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/formatters/default.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/formatters/pretty.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/formatters/transitive.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/functions.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/instruction.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/light/node.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/namespace.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/node.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/output.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/parent.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/parseexception.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/parsers/baseparser.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/parsers/lightparser.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/parsers/pullparser.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/parsers/sax2parser.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/parsers/streamparser.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/parsers/treeparser.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/parsers/ultralightparser.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/parsers/xpathparser.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/quickpath.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/rexml.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/sax2listener.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/security.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/source.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/streamlistener.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/text.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/undefinednamespaceexception.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/validation/relaxng.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/validation/validation.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/validation/validationexception.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/xmldecl.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/xmltokens.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/xpath.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/xpath_parser.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/LICENSE create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/README.md create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/bin/xcodeproj create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/command.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/command/config_dump.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/command/project_diff.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/command/show.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/command/sort.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/command/target_diff.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/config.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/config/other_linker_flags_parser.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/constants.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/differ.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/gem_version.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/helper.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/plist.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/project.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/project/case_converter.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/project/object.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/project/object/build_configuration.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/project/object/build_file.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/project/object/build_phase.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/project/object/build_rule.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/project/object/configuration_list.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/project/object/container_item_proxy.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/project/object/file_reference.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/project/object/file_system_synchronized_exception_set.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/project/object/file_system_synchronized_root_group.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/project/object/group.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/project/object/helpers/build_settings_array_settings_by_object_version.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/project/object/helpers/file_references_factory.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/project/object/helpers/groupable_helper.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/project/object/native_target.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/project/object/reference_proxy.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/project/object/root_object.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/project/object/swift_package_local_reference.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/project/object/swift_package_product_dependency.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/project/object/swift_package_remote_reference.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/project/object/target_dependency.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/project/object_attributes.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/project/object_dictionary.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/project/object_list.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/project/project_helper.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/project/uuid_generator.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/scheme.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/scheme/abstract_scheme_action.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/scheme/analyze_action.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/scheme/archive_action.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/scheme/build_action.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/scheme/buildable_product_runnable.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/scheme/buildable_reference.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/scheme/command_line_arguments.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/scheme/environment_variables.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/scheme/execution_action.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/scheme/launch_action.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/scheme/location_scenario_reference.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/scheme/macro_expansion.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/scheme/profile_action.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/scheme/remote_runnable.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/scheme/send_email_action_content.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/scheme/shell_script_action_content.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/scheme/test_action.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/scheme/xml_element_wrapper.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/user_interface.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/workspace.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/workspace/file_reference.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/workspace/group_reference.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/workspace/reference.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/xcodebuild_helper.rb create mode 100644 ios/vendor/bundle/ruby/2.6.0/specifications/CFPropertyList-3.0.7.gemspec create mode 100644 ios/vendor/bundle/ruby/2.6.0/specifications/atomos-0.1.3.gemspec create mode 100644 ios/vendor/bundle/ruby/2.6.0/specifications/base64-0.3.0.gemspec create mode 100644 ios/vendor/bundle/ruby/2.6.0/specifications/claide-1.1.0.gemspec create mode 100644 ios/vendor/bundle/ruby/2.6.0/specifications/colored2-3.1.2.gemspec create mode 100644 ios/vendor/bundle/ruby/2.6.0/specifications/nanaimo-0.4.0.gemspec create mode 100644 ios/vendor/bundle/ruby/2.6.0/specifications/nkf-0.2.0.gemspec create mode 100644 ios/vendor/bundle/ruby/2.6.0/specifications/rexml-3.4.4.gemspec create mode 100644 ios/vendor/bundle/ruby/2.6.0/specifications/xcodeproj-1.27.0.gemspec create mode 100644 src/components/player/KSPlayer.tsx diff --git a/.gitignore b/.gitignore index b18d2f9..00eadd2 100644 --- a/.gitignore +++ b/.gitignore @@ -42,7 +42,7 @@ CHANGELOG.md .env.local android/ HEATING_OPTIMIZATIONS.md -ios + android sliderreadme.md .cursor/mcp.json @@ -53,3 +53,4 @@ hackintosh-emulator-fix.sh /ota-builds src/screens/xavio.md /nuvio-providers +/KSPlayer \ No newline at end of file diff --git a/assets/bootsplash/ios/BootSplash.storyboard b/assets/bootsplash/ios/BootSplash.storyboard new file mode 100644 index 0000000..80d0531 --- /dev/null +++ b/assets/bootsplash/ios/BootSplash.storyboard @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/bootsplash/ios/Colors.xcassets/BootSplashBackground-7d142f.colorset/Contents.json b/assets/bootsplash/ios/Colors.xcassets/BootSplashBackground-7d142f.colorset/Contents.json new file mode 100644 index 0000000..1f0a7dc --- /dev/null +++ b/assets/bootsplash/ios/Colors.xcassets/BootSplashBackground-7d142f.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "colors": [ + { + "idiom": "universal", + "color": { + "color-space": "srgb", + "components": { + "blue": "0.0156862745098039", + "green": "0.0156862745098039", + "red": "0.00784313725490196", + "alpha": "1.000" + } + } + } + ], + "info": { + "author": "xcode", + "version": 1 + } +} diff --git a/assets/bootsplash/ios/Images.xcassets/BootSplashLogo-7d142f.imageset/Contents.json b/assets/bootsplash/ios/Images.xcassets/BootSplashLogo-7d142f.imageset/Contents.json new file mode 100644 index 0000000..b803d10 --- /dev/null +++ b/assets/bootsplash/ios/Images.xcassets/BootSplashLogo-7d142f.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images": [ + { + "idiom": "universal", + "filename": "logo-7d142f.png", + "scale": "1x" + }, + { + "idiom": "universal", + "filename": "logo-7d142f@2x.png", + "scale": "2x" + }, + { + "idiom": "universal", + "filename": "logo-7d142f@3x.png", + "scale": "3x" + } + ], + "info": { + "author": "xcode", + "version": 1 + } +} diff --git a/assets/bootsplash/ios/Images.xcassets/BootSplashLogo-7d142f.imageset/logo-7d142f.png b/assets/bootsplash/ios/Images.xcassets/BootSplashLogo-7d142f.imageset/logo-7d142f.png new file mode 100644 index 0000000000000000000000000000000000000000..19e5b3cf700d0051442c074f18e916583497ca8f GIT binary patch literal 3504 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 literal 0 HcmV?d00001 diff --git a/assets/bootsplash/ios/Images.xcassets/BootSplashLogo-7d142f.imageset/logo-7d142f@3x.png b/assets/bootsplash/ios/Images.xcassets/BootSplashLogo-7d142f.imageset/logo-7d142f@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..061180d368c342385482096b01884135269cde0b GIT binary patch literal 12906 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 1.24' diff --git a/ios/Gemfile.lock b/ios/Gemfile.lock new file mode 100644 index 0000000..a274d61 --- /dev/null +++ b/ios/Gemfile.lock @@ -0,0 +1,30 @@ +GEM + remote: https://rubygems.org/ + specs: + CFPropertyList (3.0.7) + base64 + nkf + rexml + atomos (0.1.3) + base64 (0.3.0) + claide (1.1.0) + colored2 (3.1.2) + nanaimo (0.4.0) + nkf (0.2.0) + rexml (3.4.4) + xcodeproj (1.27.0) + CFPropertyList (>= 2.3.3, < 4.0) + atomos (~> 0.1.3) + claide (>= 1.0.2, < 2.0) + colored2 (~> 3.1) + nanaimo (~> 0.4.0) + rexml (>= 3.3.6, < 4.0) + +PLATFORMS + ruby + +DEPENDENCIES + xcodeproj (~> 1.24) + +BUNDLED WITH + 1.17.2 diff --git a/ios/Nuvio.xcodeproj/project.pbxproj b/ios/Nuvio.xcodeproj/project.pbxproj new file mode 100644 index 0000000..7001cc1 --- /dev/null +++ b/ios/Nuvio.xcodeproj/project.pbxproj @@ -0,0 +1,609 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 13B07FBC1A68108700A75B9A /* AppDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.mm */; }; + 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; }; + 13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; }; + 3E461D99554A48A4959DE609 /* SplashScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = AA286B85B6C04FC6940260E9 /* SplashScreen.storyboard */; }; + 4A452C8AF8F8464E8F6C4499 /* noop-file.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02F4D4C2B75D490FA484DF2F /* noop-file.swift */; }; + 53A1AFA19BDA4A9CEC2C0758 /* KSPlayerViewManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F3DC5D187506A1702CBDCE7 /* KSPlayerViewManager.swift */; }; + 554BC3EE7AB3699FD2A5F6A6 /* KSPlayerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 94E57CA110F3B584C9EB54FF /* KSPlayerView.swift */; }; + 6A3072369CBE46F6A5531727 /* KSPlayerModule.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1859BB4D441C265493A728B0 /* KSPlayerModule.swift */; }; + 96905EF65AED1B983A6B3ABC /* libPods-Nuvio.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 58EEBF8E8E6FB1BC6CAF49B5 /* libPods-Nuvio.a */; }; + B18059E884C0ABDD17F3DC3D /* ExpoModulesProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC715A2D49A985799AEE119 /* ExpoModulesProvider.swift */; }; + B1EEE41563DBC5313A090C06 /* KSPlayerManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 677190A93C7E1E59AC68D165 /* KSPlayerManager.m */; }; + BB2F792D24A3F905000567C9 /* Expo.plist in Resources */ = {isa = PBXBuildFile; fileRef = BB2F792C24A3F905000567C9 /* Expo.plist */; }; + C7F40B0D74A68CE28765494D /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 88706B115BE5800B1B31F65D /* PrivacyInfo.xcprivacy */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + 02F4D4C2B75D490FA484DF2F /* noop-file.swift */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.swift; name = "noop-file.swift"; path = "Nuvio/noop-file.swift"; sourceTree = ""; }; + 13B07F961A680F5B00A75B9A /* Nuvio.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Nuvio.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = Nuvio/AppDelegate.h; sourceTree = ""; }; + 13B07FB01A68108700A75B9A /* AppDelegate.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = AppDelegate.mm; path = Nuvio/AppDelegate.mm; sourceTree = ""; }; + 13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = Nuvio/Images.xcassets; sourceTree = ""; }; + 13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = Nuvio/Info.plist; sourceTree = ""; }; + 13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = Nuvio/main.m; sourceTree = ""; }; + 1859BB4D441C265493A728B0 /* KSPlayerModule.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = KSPlayerModule.swift; path = Nuvio/KSPlayerModule.swift; sourceTree = ""; }; + 1F3DC5D187506A1702CBDCE7 /* KSPlayerViewManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = KSPlayerViewManager.swift; path = Nuvio/KSPlayerViewManager.swift; sourceTree = ""; }; + 1F4096E3944543A28521AEEE /* Nuvio-Bridging-Header.h */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.h; name = "Nuvio-Bridging-Header.h"; path = "Nuvio/Nuvio-Bridging-Header.h"; sourceTree = ""; }; + 58EEBF8E8E6FB1BC6CAF49B5 /* libPods-Nuvio.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-Nuvio.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 677190A93C7E1E59AC68D165 /* KSPlayerManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = KSPlayerManager.m; path = Nuvio/KSPlayerManager.m; sourceTree = ""; }; + 6C2E3173556A471DD304B334 /* Pods-Nuvio.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Nuvio.debug.xcconfig"; path = "Target Support Files/Pods-Nuvio/Pods-Nuvio.debug.xcconfig"; sourceTree = ""; }; + 7A4D352CD337FB3A3BF06240 /* Pods-Nuvio.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Nuvio.release.xcconfig"; path = "Target Support Files/Pods-Nuvio/Pods-Nuvio.release.xcconfig"; sourceTree = ""; }; + 88706B115BE5800B1B31F65D /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; includeInIndex = 1; name = PrivacyInfo.xcprivacy; path = Nuvio/PrivacyInfo.xcprivacy; sourceTree = ""; }; + 94E57CA110F3B584C9EB54FF /* KSPlayerView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = KSPlayerView.swift; path = Nuvio/KSPlayerView.swift; sourceTree = ""; }; + AA286B85B6C04FC6940260E9 /* SplashScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = SplashScreen.storyboard; path = Nuvio/SplashScreen.storyboard; sourceTree = ""; }; + BB2F792C24A3F905000567C9 /* Expo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Expo.plist; sourceTree = ""; }; + ED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; }; + FAC715A2D49A985799AEE119 /* ExpoModulesProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ExpoModulesProvider.swift; path = "Pods/Target Support Files/Pods-Nuvio/ExpoModulesProvider.swift"; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 13B07F8C1A680F5B00A75B9A /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 96905EF65AED1B983A6B3ABC /* libPods-Nuvio.a in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 13B07FAE1A68108700A75B9A /* Nuvio */ = { + isa = PBXGroup; + children = ( + BB2F792B24A3F905000567C9 /* Supporting */, + 13B07FAF1A68108700A75B9A /* AppDelegate.h */, + 13B07FB01A68108700A75B9A /* AppDelegate.mm */, + 13B07FB51A68108700A75B9A /* Images.xcassets */, + 13B07FB61A68108700A75B9A /* Info.plist */, + 13B07FB71A68108700A75B9A /* main.m */, + AA286B85B6C04FC6940260E9 /* SplashScreen.storyboard */, + 02F4D4C2B75D490FA484DF2F /* noop-file.swift */, + 1F4096E3944543A28521AEEE /* Nuvio-Bridging-Header.h */, + 88706B115BE5800B1B31F65D /* PrivacyInfo.xcprivacy */, + 94E57CA110F3B584C9EB54FF /* KSPlayerView.swift */, + 1F3DC5D187506A1702CBDCE7 /* KSPlayerViewManager.swift */, + 677190A93C7E1E59AC68D165 /* KSPlayerManager.m */, + 1859BB4D441C265493A728B0 /* KSPlayerModule.swift */, + ); + name = Nuvio; + sourceTree = ""; + }; + 2D16E6871FA4F8E400B85C8A /* Frameworks */ = { + isa = PBXGroup; + children = ( + ED297162215061F000B7C4FE /* JavaScriptCore.framework */, + 58EEBF8E8E6FB1BC6CAF49B5 /* libPods-Nuvio.a */, + ); + name = Frameworks; + sourceTree = ""; + }; + 832341AE1AAA6A7D00B99B32 /* Libraries */ = { + isa = PBXGroup; + children = ( + ); + name = Libraries; + sourceTree = ""; + }; + 83CBB9F61A601CBA00E9B192 = { + isa = PBXGroup; + children = ( + 13B07FAE1A68108700A75B9A /* Nuvio */, + 832341AE1AAA6A7D00B99B32 /* Libraries */, + 83CBBA001A601CBA00E9B192 /* Products */, + 2D16E6871FA4F8E400B85C8A /* Frameworks */, + D65327D7A22EEC0BE12398D9 /* Pods */, + D7E4C46ADA2E9064B798F356 /* ExpoModulesProviders */, + ); + indentWidth = 2; + sourceTree = ""; + tabWidth = 2; + usesTabs = 0; + }; + 83CBBA001A601CBA00E9B192 /* Products */ = { + isa = PBXGroup; + children = ( + 13B07F961A680F5B00A75B9A /* Nuvio.app */, + ); + name = Products; + sourceTree = ""; + }; + 92DBD88DE9BF7D494EA9DA96 /* Nuvio */ = { + isa = PBXGroup; + children = ( + FAC715A2D49A985799AEE119 /* ExpoModulesProvider.swift */, + ); + name = Nuvio; + sourceTree = ""; + }; + BB2F792B24A3F905000567C9 /* Supporting */ = { + isa = PBXGroup; + children = ( + BB2F792C24A3F905000567C9 /* Expo.plist */, + ); + name = Supporting; + path = Nuvio/Supporting; + sourceTree = ""; + }; + D65327D7A22EEC0BE12398D9 /* Pods */ = { + isa = PBXGroup; + children = ( + 6C2E3173556A471DD304B334 /* Pods-Nuvio.debug.xcconfig */, + 7A4D352CD337FB3A3BF06240 /* Pods-Nuvio.release.xcconfig */, + ); + path = Pods; + sourceTree = ""; + }; + D7E4C46ADA2E9064B798F356 /* ExpoModulesProviders */ = { + isa = PBXGroup; + children = ( + 92DBD88DE9BF7D494EA9DA96 /* Nuvio */, + ); + name = ExpoModulesProviders; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 13B07F861A680F5B00A75B9A /* Nuvio */ = { + isa = PBXNativeTarget; + buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "Nuvio" */; + buildPhases = ( + 08A4A3CD28434E44B6B9DE2E /* [CP] Check Pods Manifest.lock */, + 1AF4057A2E2F0FE927F61E3C /* [Expo] Configure project */, + 13B07F871A680F5B00A75B9A /* Sources */, + 13B07F8C1A680F5B00A75B9A /* Frameworks */, + 13B07F8E1A680F5B00A75B9A /* Resources */, + 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */, + 800E24972A6A228C8D4807E9 /* [CP] Copy Pods Resources */, + 3F8163D8C03947BCA4B429B4 /* Upload Debug Symbols to Sentry */, + 183E75605458C347967551DC /* [CP] Embed Pods Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Nuvio; + productName = Nuvio; + productReference = 13B07F961A680F5B00A75B9A /* Nuvio.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 83CBB9F71A601CBA00E9B192 /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 1130; + TargetAttributes = { + 13B07F861A680F5B00A75B9A = { + DevelopmentTeam = NLXTHANK2N; + LastSwiftMigration = 1250; + ProvisioningStyle = Automatic; + }; + }; + }; + buildConfigurationList = 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "Nuvio" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 83CBB9F61A601CBA00E9B192; + productRefGroup = 83CBBA001A601CBA00E9B192 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 13B07F861A680F5B00A75B9A /* Nuvio */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 13B07F8E1A680F5B00A75B9A /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + BB2F792D24A3F905000567C9 /* Expo.plist in Resources */, + 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */, + 3E461D99554A48A4959DE609 /* SplashScreen.storyboard in Resources */, + C7F40B0D74A68CE28765494D /* PrivacyInfo.xcprivacy in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Bundle React Native code and images"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "if [[ -f \"$PODS_ROOT/../.xcode.env\" ]]; then\n source \"$PODS_ROOT/../.xcode.env\"\nfi\nif [[ -f \"$PODS_ROOT/../.xcode.env.local\" ]]; then\n source \"$PODS_ROOT/../.xcode.env.local\"\nfi\n\n# The project root by default is one level up from the ios directory\nexport PROJECT_ROOT=\"$PROJECT_DIR\"/..\n\nif [[ \"$CONFIGURATION\" = *Debug* ]]; then\n export SKIP_BUNDLING=1\nfi\nif [[ -z \"$ENTRY_FILE\" ]]; then\n # Set the entry JS file using the bundler's entry resolution.\n export ENTRY_FILE=\"$(\"$NODE_BINARY\" -e \"require('expo/scripts/resolveAppEntry')\" \"$PROJECT_ROOT\" ios absolute | tail -n 1)\"\nfi\n\nif [[ -z \"$CLI_PATH\" ]]; then\n # Use Expo CLI\n export CLI_PATH=\"$(\"$NODE_BINARY\" --print \"require.resolve('@expo/cli', { paths: [require.resolve('expo/package.json')] })\")\"\nfi\nif [[ -z \"$BUNDLE_COMMAND\" ]]; then\n # Default Expo CLI command for bundling\n export BUNDLE_COMMAND=\"export:embed\"\nfi\n\n# Source .xcode.env.updates if it exists to allow\n# SKIP_BUNDLING to be unset if needed\nif [[ -f \"$PODS_ROOT/../.xcode.env.updates\" ]]; then\n source \"$PODS_ROOT/../.xcode.env.updates\"\nfi\n# Source local changes to allow overrides\n# if needed\nif [[ -f \"$PODS_ROOT/../.xcode.env.local\" ]]; then\n source \"$PODS_ROOT/../.xcode.env.local\"\nfi\n\n/bin/sh `\"$NODE_BINARY\" --print \"require('path').dirname(require.resolve('@sentry/react-native/package.json')) + '/scripts/sentry-xcode.sh'\"` `\"$NODE_BINARY\" --print \"require('path').dirname(require.resolve('react-native/package.json')) + '/scripts/react-native-xcode.sh'\"`\n\n"; + }; + 08A4A3CD28434E44B6B9DE2E /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Nuvio-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + 183E75605458C347967551DC /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Nuvio/Pods-Nuvio-frameworks.sh", + "${PODS_XCFRAMEWORKS_BUILD_DIR}/MobileVLCKit/MobileVLCKit.framework/MobileVLCKit", + "${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built/hermes.framework/hermes", + ); + name = "[CP] Embed Pods Frameworks"; + outputPaths = ( + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/MobileVLCKit.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/hermes.framework", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Nuvio/Pods-Nuvio-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; + 1AF4057A2E2F0FE927F61E3C /* [Expo] Configure project */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "[Expo] Configure project"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "# This script configures Expo modules and generates the modules provider file.\nbash -l -c \"./Pods/Target\\ Support\\ Files/Pods-Nuvio/expo-configure-project.sh\"\n"; + }; + 3F8163D8C03947BCA4B429B4 /* Upload Debug Symbols to Sentry */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Upload Debug Symbols to Sentry"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh `${NODE_BINARY:-node} --print \"require('path').dirname(require.resolve('@sentry/react-native/package.json')) + '/scripts/sentry-xcode-debug-files.sh'\"`"; + }; + 800E24972A6A228C8D4807E9 /* [CP] Copy Pods Resources */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Nuvio/Pods-Nuvio-resources.sh", + "${PODS_CONFIGURATION_BUILD_DIR}/EXApplication/ExpoApplication_privacy.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/EXConstants/EXConstants.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/EXConstants/ExpoConstants_privacy.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/EXNotifications/ExpoNotifications_privacy.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/EXUpdates/EXUpdates.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/ExpoDevice/ExpoDevice_privacy.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/ExpoFileSystem/ExpoFileSystem_privacy.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/ExpoLocalization/ExpoLocalization_privacy.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/ExpoSystemUI/ExpoSystemUI_privacy.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/KSPlayer/KSPlayer_KSPlayer.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/RCT-Folly/RCT-Folly_privacy.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/RNCAsyncStorage/RNCAsyncStorage_resources.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift/ReachabilitySwift.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/React-Core/React-Core_privacy.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/React-cxxreact/React-cxxreact_privacy.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage/SDWebImage.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/Sentry/Sentry.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/boost/boost_privacy.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/expo-dev-launcher/EXDevLauncher.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/expo-dev-menu/EXDevMenu.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/glog/glog_privacy.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/lottie-ios/LottiePrivacyInfo.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/lottie-react-native/Lottie_React_Native_Privacy.bundle", + ); + name = "[CP] Copy Pods Resources"; + outputPaths = ( + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ExpoApplication_privacy.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/EXConstants.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ExpoConstants_privacy.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ExpoNotifications_privacy.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/EXUpdates.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ExpoDevice_privacy.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ExpoFileSystem_privacy.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ExpoLocalization_privacy.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ExpoSystemUI_privacy.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/KSPlayer_KSPlayer.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/RCT-Folly_privacy.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/RNCAsyncStorage_resources.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ReachabilitySwift.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/React-Core_privacy.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/React-cxxreact_privacy.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/SDWebImage.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Sentry.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/boost_privacy.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/EXDevLauncher.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/EXDevMenu.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/glog_privacy.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/LottiePrivacyInfo.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Lottie_React_Native_Privacy.bundle", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Nuvio/Pods-Nuvio-resources.sh\"\n"; + showEnvVarsInLog = 0; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 13B07F871A680F5B00A75B9A /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 13B07FBC1A68108700A75B9A /* AppDelegate.mm in Sources */, + 13B07FC11A68108700A75B9A /* main.m in Sources */, + B18059E884C0ABDD17F3DC3D /* ExpoModulesProvider.swift in Sources */, + 4A452C8AF8F8464E8F6C4499 /* noop-file.swift in Sources */, + 554BC3EE7AB3699FD2A5F6A6 /* KSPlayerView.swift in Sources */, + 53A1AFA19BDA4A9CEC2C0758 /* KSPlayerViewManager.swift in Sources */, + B1EEE41563DBC5313A090C06 /* KSPlayerManager.m in Sources */, + 6A3072369CBE46F6A5531727 /* KSPlayerModule.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + 13B07F941A680F5B00A75B9A /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 6C2E3173556A471DD304B334 /* Pods-Nuvio.debug.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Nuvio/Nuvio.entitlements; + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = NLXTHANK2N; + ENABLE_BITCODE = NO; + GCC_PREPROCESSOR_DEFINITIONS = ( + "$(inherited)", + "FB_SONARKIT_ENABLED=1", + ); + INFOPLIST_FILE = Nuvio/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 15.1; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + MARKETING_VERSION = 1.0; + OTHER_LDFLAGS = ( + "$(inherited)", + "-ObjC", + "-lc++", + ); + OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_DEBUG"; + PRODUCT_BUNDLE_IDENTIFIER = com.nuvio.app; + PRODUCT_NAME = Nuvio; + SWIFT_OBJC_BRIDGING_HEADER = "Nuvio/Nuvio-Bridging-Header.h"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Debug; + }; + 13B07F951A680F5B00A75B9A /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7A4D352CD337FB3A3BF06240 /* Pods-Nuvio.release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Nuvio/Nuvio.entitlements; + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = NLXTHANK2N; + INFOPLIST_FILE = Nuvio/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 15.1; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + MARKETING_VERSION = 1.0; + OTHER_LDFLAGS = ( + "$(inherited)", + "-ObjC", + "-lc++", + ); + OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_RELEASE"; + PRODUCT_BUNDLE_IDENTIFIER = com.nuvio.app; + PRODUCT_NAME = Nuvio; + SWIFT_OBJC_BRIDGING_HEADER = "Nuvio/Nuvio-Bridging-Header.h"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Release; + }; + 83CBBA201A601CBA00E9B192 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; + CLANG_CXX_LANGUAGE_STANDARD = "c++20"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 15.1; + LD_RUNPATH_SEARCH_PATHS = "/usr/lib/swift $(inherited)"; + LIBRARY_SEARCH_PATHS = "$(SDKROOT)/usr/lib/swift\"$(inherited)\""; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + OTHER_LDFLAGS = ( + "$(inherited)", + " ", + ); + REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native"; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) DEBUG"; + USE_HERMES = true; + }; + name = Debug; + }; + 83CBBA211A601CBA00E9B192 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; + CLANG_CXX_LANGUAGE_STANDARD = "c++20"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = YES; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 15.1; + LD_RUNPATH_SEARCH_PATHS = "/usr/lib/swift $(inherited)"; + LIBRARY_SEARCH_PATHS = "$(SDKROOT)/usr/lib/swift\"$(inherited)\""; + MTL_ENABLE_DEBUG_INFO = NO; + OTHER_LDFLAGS = ( + "$(inherited)", + " ", + ); + REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native"; + SDKROOT = iphoneos; + USE_HERMES = true; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "Nuvio" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 13B07F941A680F5B00A75B9A /* Debug */, + 13B07F951A680F5B00A75B9A /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "Nuvio" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 83CBBA201A601CBA00E9B192 /* Debug */, + 83CBBA211A601CBA00E9B192 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 83CBB9F71A601CBA00E9B192 /* Project object */; +} diff --git a/ios/Nuvio.xcodeproj/xcshareddata/xcschemes/Nuvio.xcscheme b/ios/Nuvio.xcodeproj/xcshareddata/xcschemes/Nuvio.xcscheme new file mode 100644 index 0000000..d56adf8 --- /dev/null +++ b/ios/Nuvio.xcodeproj/xcshareddata/xcschemes/Nuvio.xcscheme @@ -0,0 +1,88 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ios/Nuvio.xcworkspace/contents.xcworkspacedata b/ios/Nuvio.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..5249d92 --- /dev/null +++ b/ios/Nuvio.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,10 @@ + + + + + + + diff --git a/ios/Nuvio/AppDelegate.h b/ios/Nuvio/AppDelegate.h new file mode 100644 index 0000000..1658a43 --- /dev/null +++ b/ios/Nuvio/AppDelegate.h @@ -0,0 +1,7 @@ +#import +#import +#import + +@interface AppDelegate : EXAppDelegateWrapper + +@end diff --git a/ios/Nuvio/AppDelegate.mm b/ios/Nuvio/AppDelegate.mm new file mode 100644 index 0000000..b27f832 --- /dev/null +++ b/ios/Nuvio/AppDelegate.mm @@ -0,0 +1,62 @@ +#import "AppDelegate.h" + +#import +#import + +@implementation AppDelegate + +- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions +{ + self.moduleName = @"main"; + + // You can add your custom initial props in the dictionary below. + // They will be passed down to the ViewController used by React Native. + self.initialProps = @{}; + + return [super application:application didFinishLaunchingWithOptions:launchOptions]; +} + +- (NSURL *)sourceURLForBridge:(RCTBridge *)bridge +{ + return [self bundleURL]; +} + +- (NSURL *)bundleURL +{ +#if DEBUG + return [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@".expo/.virtual-metro-entry"]; +#else + return [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"]; +#endif +} + +// Linking API +- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url options:(NSDictionary *)options { + return [super application:application openURL:url options:options] || [RCTLinkingManager application:application openURL:url options:options]; +} + +// Universal Links +- (BOOL)application:(UIApplication *)application continueUserActivity:(nonnull NSUserActivity *)userActivity restorationHandler:(nonnull void (^)(NSArray> * _Nullable))restorationHandler { + BOOL result = [RCTLinkingManager application:application continueUserActivity:userActivity restorationHandler:restorationHandler]; + return [super application:application continueUserActivity:userActivity restorationHandler:restorationHandler] || result; +} + +// Explicitly define remote notification delegates to ensure compatibility with some third-party libraries +- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken +{ + return [super application:application didRegisterForRemoteNotificationsWithDeviceToken:deviceToken]; +} + +// Explicitly define remote notification delegates to ensure compatibility with some third-party libraries +- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error +{ + return [super application:application didFailToRegisterForRemoteNotificationsWithError:error]; +} + +// Explicitly define remote notification delegates to ensure compatibility with some third-party libraries +- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler +{ + return [super application:application didReceiveRemoteNotification:userInfo fetchCompletionHandler:completionHandler]; +} + +@end diff --git a/ios/Nuvio/Images.xcassets/AppIcon.appiconset/App-Icon-1024x1024@1x.png b/ios/Nuvio/Images.xcassets/AppIcon.appiconset/App-Icon-1024x1024@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..e9a189f637dba2e27e621afad18d9cc2a219b336 GIT binary patch literal 220987 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 z z9VvOsoePaawxLpj)yMP8l{ZHU@AOCyd$7=wF?XD^X)$?l48U=cd*OZS`MYsF&{`wUCp)EAm^I>CFb>@0oTlqracu@h-I<2EJ zR#T}AKxS4=n4gWSASDJDg_abN=2nCQuFSamzJB7Q&PBvUsZ5i{lTzEscmU%@BpH4Y zVbROB2~?(K;0?LW8EEx}Z;MUAk1S0*d*3(Zd7_1XXz$12f6EuDeptWL=i}7BO$Qc6 zS+2(p`oxM}OYo1jqF+V#Axqyl;#QKsskS*M6)~~>c!K+-Ue0$z)wSEhQz$i}EPs~O zRKOaY=8U<0_rJ3SeZIq}Z>-HS@c z?{orlI;nz!ySUdcNstNwKo1h`xilx<=jxN|#WlDJOBtZ86+K-QN$%V|xc`Dp{LxwX z=YuwYmYIs`SZ}o3B<+NhPlALme?o%cd*8yfDfPauiu%FLu;3f13}p-5Z>svwbo|bG zdZcD(_{Fea^wWv%nl@g0kXlhpg0K)RZ>b7HZKdlw^Ol@izMkC7NM=~}`Sfk7Y1WMO zP-1;M8P2ezN+dnADaA|z3=6VjNg_biq=oR4XCos`8cIHc5u_7lQ;bayemB( ze!^po+|$RdGvcc3?{D1v`vHDcgW-;ASuq4_hOF&LkoR2hGAylBDhzpI z`y~5=X8r8aZ2#wc(`yF)U8ViZs6T`EF0l9ZXnSgDFianFdc0Fw2b(YC!`$v3_6Kdo z!rp|@J1G}gnm`tOA~((^^l})2i4iSo>?Of)<2oh5#JNNCaco9JYyR??bH^DyukI}^ z40A$@#=HUocu{qWXY1xp_bfe$=H<`#YlGK&y62mT+>YGN!ud-9$?5h+A2p#ZnQ_U&h>}1Lt$))LyqBEwUt<1}L0%vvlZ<34wny{`%hTG86H8cjbm zHQdffP(2{%5q0~W$SS@a=|HP^Vasheu7ert55=?RCSzg4{37R*MoF~q5PNe zW0_3~)p_}L<=z^>0}i|=|EYNr+1Z;o*z#^7e5(X1GXBxtbkmykrqUVZ;J0YN%=o>z z_n^Y~7oo$D!OmR5i?LIT^Ic+wF$SPUg*dlsHMv*7qoov-cEVzdjY$G%c7-+?lo;O! zcfs<;3^LyPl3rG9OxE-{uFO3X_6+nfOQ20-F68&5^TOh?hwJ8^U7MMxj~rd#*-v*=XOS+Sy$N~4s@#hAd&{{lc1fmOc%@%MZoyV*G1XV5?$Qbm7YSQQ~NkFCr{#L`UNu(P}$(L^a znrY>sM%l`?iKK?YWPZ<)=9)mun!mM(^aID16+6_qq;DVE;xQqZNdCaqJ7fa=Ytl5o z1&o3jtyf*@vdqqlY3@y4n6>Nmdv6Gr(&l%{B+z@T28+)l2O17}EjD&6w=ci&JD9cW zP;Q)!|6V0wQa<>{oqwkJ70q zpy<>Jdg^MU)SW&uYxj5naJ1p88v@=+DUpLHYKT;cNNZK}K!T%UgC27WccV4B?uywh zv<)xq4&KL^xU;|RHV2^Qcrj`5=QrGm5Q%&(V|tND%7M=ya%DXaZMIh(CxO;E>?`SW zp7g_fDGFkk=V4l5gTViU7C0Hew8~}e30lYfiq>#3X#yqv19zEDgkuYy3On188JLuC z(jmQ4#Uyi!S=nv$TV0X*WD7-GK!gcgufa%fa*c=A0qHK?F;#;fY@ZzI(G@05oLC!4 z&|iQu1dg$>@Q_s_4j4bh#^aQt15Lc?bQ6G>JutWnEr}kY2V3^IPNj;+G8NUPVph@6 zW3>iPm5GvOEvmhRE7M8AP^TsSz`G7N|AvOF0k4@?|6ZuQMt`!#sl<36 zB6+e0Am5o`2mUY&lKhV{lQvk4M7j^7MbhgA{^ zPWW?vieaML5B9wcSmIeE0WSlG3WV# z3^Va28{knmilkozM+@E>44cpAwjr(BqO3lod_`O&C4<(w=a*yE^4_`O4YTdKo*EwG z^|hb-Bcca?(yuyLE2OyXLf9I5XW71abN$5!q&9B~UaZID!PNrSNIgP4zrnd-v-+~K zQNl$z1DI&5KJ6>Ga1En`P7!WWAB|;>CANzJ^iXX27Cz2)DkgvA%ArX^8E@ct!oMeN zEj}{HOq|HvTfFqBEAiU3O}Z!+NdCyivl6t(d< zTNX3JC^J<5ILLhNxL3^n(WB@_kA@qAJbxJGn)0Ht(Qw%4XXIgfY4|CVV6O_J(CKxB zxxP(_Z-n-Uw|q z2#yF@RESHY(gH-#gh0D%Vrx5UciUeY1wB2m?gW?nOrL?Ds;5=DqI?c$omuD@>{y)G z+VJk7d+mV(%*IukliMMQP;g%TpQxOp;@3GEz5A~OJiViO)HmoE%yC}+a>r07AuJ_w zfAd++cd@nhL5YSb^*$*(IjTm9^%h)flO$RLEyK!jUY`!X7zg5$L0dqgvSe6Hso3}i zT0KyEN14WYZ<}Cd#+awpj{$WDv7mf`;Ou--ebCzb>kIfd2HNNwF zr`YvP;OVBrsy|z}(qfxDo9Mo1L*NH42=I=|-~@7%U1^p?r{K<3#6@%mexF|_K-_+S zZ9`6_lF>FJkvjXMDH*7OPKGs6)pVQpSrfcQjb>o`T0S&ftE0pA=|oNF((Kianue@? zyQf7& z_asC>POIx2a&gYPTQnuz1UGZOgI=XwjhExBPL&X>vrlk9Z!q>9ee;+j50b;!Bz0^t zxiw{3A`@C1sh2wDzNxP&%c<>rX7FrRQ^3%p>JS+IiWQTpR>|+#(!CO&*nUCJ@7RF-PT9fv!J6fX4mWx4lYO4m z`--i(jNg-XIulupIF&@ATB4d!esBN$!N9PYe&D?g`m{2ZrbQpz_z3$nGpA2-#X2ct zYm3m-r=B7H?;r>7#{8j71hSG{8-9Kt7=i%D`$NBWPJcNHMl%zhn;1;JcJ231Z=K)H zvbmOM!!Z-#nyeAxPZXfOhg4@R(mvezNOH}v#zv{V{K_zw#W%&ob@PQnJXfkt^ByV$ zHQ!7Uw2LH;hK4EO_?S~KBpwWv?z-mrsVLw~FR$Uiz$fFuFU*%gAy&SRHTD>%9b#N= zt;$ESH}mnIJ*H?M+dUj?mms~F`=l1MN>|ZrzZ!Qv!QGd_*=C}&A--0T=|{;2(rX33m)*cDg}2#MO|5>2M^m#3&A;STc*4qosAFrvTJI ze1{B+!#^3Q89+HSi6B&uFkn*^kqeQ6g}2aGqY{#%97Aq!8Z-VXBTP~lD%gqmV@8tcEUJJ zALoA$h%#!g4|s1hRv0iM^qOkbVuMt5CB9fgqoC6;k(5LEP8fjNkTr?j#?uh#lcFm> zMp+M709Q()wDejl9Q|AF%Ej(|2EUVA?jn}z>RX0wbAZdKddmGEDbAnDe4Hq^&ot*)!Zzb7v}4rgY8>(A0Q>gC4-VIpxc} z9M$2%Ifc3w>n$6nsPoNXSbs9FD`QX+xgRFdjy#aZp*OzXngJ>rJXzyb5*a8%$jq=^ zqSn$+#`>^k=GdS%Y^QLW-@PvrObC1#AwETA zghrAFl!!=o1m0`_Lk5#;l#o96tDMG#6zPL4iLeW5KZvvniAd-4RDG@88M*YryQ3(& zitF1}Il{S>ZB-n0D+x8817tY~It#(pX2yQ$+<<|@?fl$HIU|R@<>8-du87c09bjAi zqwV{Y4FDkoG-*z4ZVF^1E3op9iT~h{Y9)%R;W(g^?taovJ%`SGFBkJ!h zC2U0{`1inP3?_{I z;p}p+FKq*+%tXHl_U>Rce<_Xtx$S(;zlLY)ib<>G+}?e$Nmj)%q>~!btg{rRkH7nG z)xBEKC8j$YFMQ#u)+w2^&us%?l@O36_S{p$)cQ*j@rDV~b>0dsI1;RMP~*8x?jka~ zh;qShXcz;v79aADZOniQO5Ag{Pa4+EytY@Sh<#bsy{P@0z#G-}y<JXzPi2R{4O({_+dz*FEyOV~!Or%F`ANyah zUqm%}Je|FIxzR2VL?zOE&Oawy2d*mG`=7Joq#lI8zZ{)0GcGGiBseKbv%;DAM5GP^K%f> z(AeAN*JdGhSU>;c5B^{s%4IwHs#xELZCCd7yKe#5fx=XbOSwllBaP)Ws4byn;JrMN-t@q=`l1M|Uv9D(ccw<^eu={Xu6dM&As~hS$w< zUeru1o_-m0ObH|>NbweB&_<7d0j;H&x5~qQG+nww&7T0G7Qc3Z@u<>PWocqDq=^c* zFr{-xP_p|a)9ofHuM#6R3mri`GU&k`DMsp4rFPFb>Wqx3*DmF~W*Tkv!&9?MkKU9V znvsQhAwRIo7iM|=!Mxz>-u3{b#y)&Jc|D}-=fbKEY3YvdUivCn6Fz3LjM98xN8Qz^SfaHUyiA!>#8BCT6OK#ieMoRarF)9DSD z*PH5K2Z($LNF)8d6~_^J3DhZ;)@qiepTHbqSOUWxAl(m<*ZLe>CwCo*OeC0t37?4N zEPWh}L|4I1=S`Zcl1%pku>$r#O~{7)DRP>z8#NbZ7up6H_xuiOU0Z^bYL?j1BV*B8 z2IU5@!yn!l=fhk1ndBRcOh=m7x%YF9U9YCElal(8ToKNPhrf8!J!n5rXYt>BtYb-> zfo5;w%;CPl=SRc>?Lf(B1JsEMZc_CjDnHyWo%=P$)=ZHvFJuXTWpL*95LjlrA%xpuoN6ENo}cMtv}ksG_w z4jRa?jJ$5_*+OMD#!#&}>LqhN;L>H@XI%(gbgHbIN?KniSG_!iQwk;kc@Vl0Oz%82UGG`p%~9_`tOeE2inI% z(sS;9ukkQO5=L|v-HjfEy<5n8uDT*QlyI!uKN&+*^ScZ+@KfRP`C3-MNopNB8TNz# zIA9uDx- zd1Z!)SPf*U&@54iG7a53=g{Qs5*brMB&&tvv1jY=WvsQ>V1Yscuw_JTTfksr zfy^B19!dJi50eo@lMIw#T1MnK_{nC3nIvYYSjR^i38c6l_XDpJ|K~!|kaGfG{Q>^* z*4K~xBL3{v^BxPU`}5>bh)>fwl>!RKegFI!47}MtnET2Zhn$>Ev_77k)6HnDLXKo7 zGx!f~g$d}o5)K&D2=FDfRfIwCt#Qfj%{6j0B)h;#r#NgfXdV$_x_hKb&trvo#hzj8 zj0l@?aiMQz-`nJ>xiDc+}YnWzWcQ7Ul-ZC{QVfaMN`=Rb={Ho z`(i{=k^dk_;)l$nPlP}h{G5s(DvRy7J{G-^Yw z!iA7c1)gVmdiaxS3ps}C8Sb!bU^d%hFUYAjGf8Tce9S==vZwPVr{ESv@lo5M&tJ7J(rg8fms8H=WdxRs;oAQEA$!_uaRF zM!n4H;o)nUJ3Bj#8$bDUvIoQpu7%Ca7P&^c(DR*2JW6VhzC?b}Sw^6#=%hoFz*=Hk zzb0Rl(1Y(-XZgU8u=0@SYc@5bs-c2rKfpFHNp`SB_;#C}F-LWs5?y0XVO5zHaeDZ_ zJ-Z*9*dx7Dofn??GHxy{&wliYxVgTK&77ZMPM@g?f7bJ~q3`MYlU|)UZe5RZimC#> zBVXRz1sy&os+xTmZSQMPVI(LQWjn#PARc}@8b9qI{GsW5%@7nu6a=%vpfuZf=%DAE zr~t`1`G6S8+W3ht83;=38(+WXRuQ`_kpQ16#D(na5$&+0e|u}q4V?>>wfpVGmYK-C z8Nk%5wt}W@9RP#g{}vS!;lQFhss|AcHU1u_Ep`uTEr$gNmf3fQuwtoZ?2PxJtWzpW zbP#3L()c2}9G=GGwJAp(bys$*ySzp@=nuuTLnm*nmhThUmJjY1b9;+TO^TocRwg4OAn!n= zNO&uKkAUU_!a}r^M5?gjNMdx$^r+H;m*g!-!x|Y<#(SuQJCCnp1W+Xdx`G$Lj!?J%YpSvol(o3ArXEpOdmGR58po6I@56az_Jz4G34r z0wdzoII0~*N2k-{n!0vu07LC<+Ji}$lbcka8L%~*Y^aQ6GY_>I7G;D@$#03{+&633 z-=}hG;~+TD6^^r~T|ipbTWV-Yv{n2u=i*H!hH{1yzZZVfakF$LbA0)?!J>e-V{c|4 zliZQ3ZqvcjGebek4zkfdGXm^vyMETuQL%p^l&-*9FR+JP)(X)a;!&~9QiN?5tVGZ( zTr>%jz=SfiZ4)7|JIx=HC-~0F%g~;cPY4Ms!~Xdx!5kVUXL~SE|Fxd1`@pkl?}^2^ z=RC8DdJgktzG^4`fBVugeD84(Om>tyZ*c;3{ZkBl?aU63$iO!ENJ|T2cppYOzYMO} zEySXz#r8>cx40$VKG3{3aq&KybnJ)6T#T*xnz*)L3LDv8Ny+@SA;El3TGITdJX5d0 z=$w(O(~FbG7kWb$A{O=@XI?K%ZvWsNQFHv=qr@E)elUF-^g-a4<6jPVtQ0W958ur9 zF%`JWL?Li|%$muD%%L745^_rT%m*S6&rz_nLwF!UzE*CHrM-XbXd1g5Cg zajQ7zIa?}HB7}~l^!Y|gnkIlVq14%)9(9ObZZ{lEmiC3G%IW?V^ZqeT0Pk^cprg5g z;@E6`+tT>e@a5WUlaqxKIqeJWpO5IB&B{HkSCQJz)sQX)Nh6<@l?)~Gj{%>Y<)16& zlLz4v_i1pzG=~#F3JQl&HV1FE0-F?O_@DA17bg2y2^lm23`&zdjCRM_+S+>4U;Uos9W~#;*72o3lalbm=^JAnS^Hj3U@Pfa?02(JwoB8VgAv$*p0f~82B zgAwbZ&4uO9KP@1<6@$k{H_eCa1&8|nt@Wk6(9`qLA7Ds%{&~^89gSljcqd0pXS*6dw686UuDcl! zrza|@NDc;SD}b}s(o(>kilj>!)7t!VBHOeN>*v9WMEF)HG#@`CS#ohytdb|Eif?G@ zi4!NrB7u~7VR^8zD&VE@^!Pc6ou=b;i(H<^=OZ&dUB)`t8EwXIFU0XC_nV69k#0s~ zDoEdqvcu0|GgOCDY*JB4?QJYc4quP0@WytSkvB~bld8k=clA2eHL0DP3kO=(6Ph|D z&Jjg#mL`U6T9!C^MhWs9709cjxE6pAj8K#^UE&^Ad>wI)l$Hs0Kn-uA$mgbDEQJEa zN}Cxkziu+NRJv5uKi-&AI#{khQS@=im{;AuJdr%cdmqf3jan`pD+*s`MZJ2>I>r$k zG#9dtFnr5=vK9^sE){_J{h%)!ex0Oi|Hh!=iRT3 z3psc8ho>9@-?=w9EZ{-1$QF$viWP&BFI+(Z$4vE{EwxM)yH9`k?agP$VT!}&<`zV) zb1wqt-W++;JMqG-x-a&p|0Hp=Nkaw0yZThnt zkypLr){=h1$Iu3MHxta{Mqwxj#SM`yj19S78I^`EEGqa#ccV8oZV2B4HH1=^aGL0d zWHNpDHpFJwFf=noi1&P=98o2@RB3nQmrr7KyvHwoU8-L2b#2jN|H92XN1w$z#!kg@ zINudVwG=hy?oI{YWsyvA3O9GH5?~yVQ-LlUW?=|=R|HXrS?ylJW$-cdp0Q0wf2dQG zld}z07UqW4xjRmt8aeorq+P*x`T&=P2lwATNjQFTM{G5>WS}5P?i6kD6O3m^Vj)>( zWSOFwf;c}zJ3QSs{n#q|^rkF7IhrVd$T)7{`q@A&&`fgjfZd%86VW}EP6=wAvz5x7ryCRxcT9?_~|dq zj~kfi*Q=XET2~*ICgOVt_%7Y2046X(29}(xAYoP5_0az&7DXp}6~uxivUZV|AMHst z6>t*eYp{?lxwr$Ph-KO*ii9e{@o2U_i;S)O>=?Ed%;$D|WwSLaMli`29NXsmIlNQ6N4PE=w_SBg_ zp~qT+O0#%oi}&?Nvv-iYiKrx^q8?UN_~(`cP;SPwycoq4Ae>W({;&Ad65&kL{>Q0A zsafa+3i1TbjB(ZJJ?NYiCD3)=o?jZB4kc=Nf%|}NS|YUNK*SBoqv8IO*7Ih{<(5?* zVC#j9@?O|GzoNn3&#Jp*3zp@3Eg>T8D9kHPOd^pwb6h5Y9uqh;%erk*vWu$hYUp^a zl7>-6<{9L>?2z^H@vLYFRk6V+CIeJ(yy~JJvU|W1$Kzf2pPaT6oRWdu>On<1csOd# zSR+|H1GktYo~j!HAgmED#Omt3h+=m$FTW5mz7{?SFv%?CQla&Os~bs4rDhTG(ek%tbinZ!kq(-csjDXrqAxWCHmA#K~y{Aa@msi4p~9_NwzPQ zl%-gXI`~l(zFrdvnMhGWVG4wYC6F74dN^xl2{cBS%5EEWuCSZiw)4#Z_}z!7@9w_Y z@tfCN<-MzwQ$CMd#w*ikMtlQDag%AjBX{0Di5$RqMfo@8gB$o=W@65OumOO+Doq0?m zqhEwlI0Xn1?$T7W=vr+Tr-I&!#e$x4ku4h2G1q!DI^4z%1BrnqVXSh3DoULynprE7 zXqg|v>-#4b6}TSLO|IXd;Q3DP#L-Zfu&n`OWeLx+6P?z8zNtVbehGB{ujyDic+#nH zhvW1SeIQ;kLch2;$knyVz_(FhB`{yO#RRHyPlX&9?lhJ_GO;w z&xqmV_XX(prqFhrMIkMF!Ia6zEegD{ppcg(gyhDchrKfbw1M%G;sVw_BrK=pHf%yq z0%3FkhP+2pXl^ z|LXc#5EA(^nmaNV^Y;o_l!uL^G^5BQVC1{#g(AfK}X_WT({;|Hc>}RD& z1mgx=kAy@WY+$1UJpFKp`hE5eCq|BM{VPujktV{+DN)bJ(?r>mv;o>pcza=mvSSTR zO%M%Rx}CdIPT`V}VIe#&-aN!Yje>?%#xV&iUX|X?&K~;_L={*7l@iu%%bg=z%9TT@ zpXeYwhTDm2-Zp2t(GNq4IhaBMS@5O|%3s7Ueo;R+)U9?axTL_~&#stAzos+&U9!F5 z10u;)#I1$Zg=`9CY9V_=8K4w2R`OSbj$~3Ih$sTrxD0?^1j7-r4|LfhLS+;~vjxLm za%?xR0e&Y*x?m03Y-(RbR*!u6eR`|*Z-Vd~?pnTq8_5@w`Zy6)&KPyfa%K-mJZ2)T z+ov!F!Vqit<|tUVAz_nuc+rKwauDo9OO(-T-pn04>O4g8(By1z9MJVvsN9brTqdUI zQ*DuZdrT57RA?72BQeZcBhsuPM6CFVH#4-HCEQCI2jP<8TU<*Z9^(lc7QO8#v0u>h z#D{!ye4z_}P4Vsg?wF(SDlCNI&kUjx66>leyWX_NL|QjqydnGC;$*MO#QV0-_R^hT zkD)Y7JR2eeNJ0VVBtwo&DP7MlSQ!m@wJRxCDHnarD4j{#Bq1zlTltS>Am$Y{Z`fIu zkX&@OQrH@XSU`Valxj=U|K7J7i67)U4_uuL#*?POt1F~DJ4}a_>+NVSgwIy8Th1dQ zhtDH!g6}9cefJrOE7AF(9x?iSsS4|S1P9yq%1cEu>QQQ~ytC6&5UM@R^p3pdL=)&}GJ3qxjrVpr+{()$qBa8; zDF#LB2-U=4pJDeojMP=2r3%^vp?Eo~I|ybh;koVD)XC@5UqqG^8`S6bKmPjg_l;L? ze9>J9rj`z!*d^M|Una4V=uUi$CfPF9=q$66@$E!*HQWKR!+^y}4G(cJ;f>3i8G^~e zxcN$-llv5c6Sf+XbfYAi_Hw1p40uPVAET}#7V-0@~ z#r8KKY}#`zvi*_C;Q0e$Ns{ck_7+JF{yo@Dg(*Ho3l%u8fw(mfiPg(6Ee1)EMb!!- zy)~)uxIeMllRhUSSk9)2x|s1+Rd5<+-M!FMZ-;iB$bbze$n(vO57!r}`#+ePx`tZ> zxI7hx+@o!@c$#+nX{-#X7l#pAyBRgs_RcCeZ^U1Q#gWvjS>;QoA(TWwiYVBV69;mX zvR~k=qVhSpazaSWaE&o~a@naU9Kt=YiVh>4I%-W9n|l8qzd9Wo)pTcT+;;;7anKP4 ztf07PVN*!_?4N)hD*ZN>SeX_BUqea32VmVXbP@vEa{UlQQ+pYMI1 zH~j(pXu5O4Kfua$FJlnS*~72O=g&NvpL|R@_`nTyuRyoe9Csu1$E>E?hbxL|F`z^i zxuw|4^^>#H!2P^o%$7*K*7=n3`TX+v&qSA}<~Bt&?YMKIHQ`=dm7n{Kt~X;%FaA?? z@`7TX4xI=7^#3supgxO*dWT?WKoVjK-y8~5l}`pSjAyJAea$?)L z7jd&if_KUAp>@znK^q-lC<#{uDZ6%t1o5wl%h74M3RSql&o@W(hBx+3j-TCO5ni^{ zEGf>9T%4G!^_Yz_@~jtBmkAHRzLZM_JG87WEC{_z!nJU)3JkXD zM6qoyb>~;0gD`sB+=MwU#0!vLNFtYuvI>1XxX>T1Lkhts{3;JF^z*+UjPF8(@wkGo z&qWWvX(?YC?1YdGbL8%t<2Dm-UY}lhhRvSGCb~1+bSV@U=&U)%t-u1(Fwur6% z!WvUye}~eo%((_WatxAVWO(s%%C1z2gspki6;YP+$SjE)5dw@h1UF|!)QQOOu3Pq+ zK{%yqQC*=)xVViHU?yzz0|L8ngNTxZ3MiNnP`ydU?@?hBC`3OdXkj5DGfN^ZDJniq zA1>7mMm6?*I2>l7W%4H(bWi+Z=)vEOQ>&k4KyH}wl}OXFP6}kf_caXVvDc{{GvBnk z-@<7nh=p$CM7|X>1Pdbz7KlAV5=mfbdgR;~!9Pn#J}CZf>tl1(TC(m3!wM`OnI#po z(KTT*h_p{FsS+X2p@Th7XTraXX(#0kT#D+Hh@_6L8#rw^Fe>l2u>BTrY5>#cZ zHq&;Y*%8Pk3>=1$WMYya838Fd%6Z0zs0pAUAr!<7j&ZQRfg`?|9OatLcpPkLEG^t- zz*r)UySXcb^RnS$Q$dVH?TgK>VZmn;QmF?4agSd~w3rGCRXvTKc*fk|SzPu8k?25= z$~YrCwuQ8cKiJ%lI#i1GC6woi3x?4dt7_#WfHYE^|%BHYG;QI0MZw}`fy;B;tQ{NRXF8)vaZ+%{0{2Vjwkjj#f$z7%%`fbFM%;nmw zk_^vDf8$h3ec23EX+Z|#iEMgR8KNf>UKP!@LMwQR2buBboJUgF#YhT@a1)0!16kDP zS1OMprRMMtQprVEE5 zZEsd53`_=E42(DQRp+nklyaYyU_Pn%gl|!9Nglkug8ifduV$0*+Y-u7s`C30p;DXW$@gS+~Bi^G*KxsL3@Rfg|% z>P>iz`LfJI`?-PA4-@0@i|85JIx)W3+_d;CaC&j0HMiq&$zu05L`)AE>t%Q8*aPiJ zBq>juOiw;4!n^nTk`qAk2Oz~k5qTt|0`GM}!OoJhW&NOBb4tex8Wb#sUbc`yyE=Aa zVBpKxhg$XX+%_%i@Th_GI7z-LA|prm)SGfuMf4?}k(Ymk1bb6uv;*b@J#- zFYYx$1x1p!bS?d@V&2S8%=o>^s%-z=BgdI{*qC$^JIqWbPnLOEl)UQmpRAO3IIq}M zS9S8mo4LD#i{B(HP5>=G?w!^bi?0_@9sMC;>SXDCIL9nhcN=4@OMbC@vN0#Oi^7w{ z#A;M;QZh$Gx+nPT85c9PWFiRVO7;z879_-}F4$bQHbmD%cf9vaL*uKd^E<+4tJK3I z8uBiV*}ruBe>_=&HJ-fK6A#U2w_ND9s*hW(Jb_FMq-gt`f)|+D zoyp8*aUREv<|1#upanPAo2l&kwcl2%lOkd$E`qOSZ>y zvt_=})&(uX$q2St)klIv#6VCjwF1%1Hn-Z0L3(nVg9 z+cBP2gejOIzhEY)<4v}DK8h3Fg?Y{+Y?6d^Q*`O3hm{u>d-*1|`2?>2?v1EknT&!; z^VAoqoFjr@flQ2kK!}ZUN0vdBkKncF8?H{SqnPO{P)wSiI>nx!!X1tyGd_90BsXwy zYHo4h&EoXk09w$AFjAAQ^qMLri1xXk~`0p;Tbw!Yb zAlg?L$1WnCL8LOI1^Pthi;RrO(=5H(IZ)m7>d&-(zlDZZCpsQyUzDD#tYBy3VcIH` zeV&WAl>6V9%<7iszs7=&Jan@Hy=A`KJMtkpTB(S!GGjRzQnB=qJKa^d%a&#$lN@bV zl3||ANcWKu=x^tBn=^gTYG`IxxlQThEY{G!LiEg?d!6@?UE)3~Iy(5FB?224%NQHA zST#4dV`6&o<-}s`MD`R~u?P;iY=C+Jam9mZSS0WEAFSB$Uk>Hyc-<&%+ zI6l4Di0vD`xFhPHq2FwJzFdKTJc_TS+Znh#1lp5T?Ox*dDTfG|Pi4?4w8x2sDG=&o zHKDVeWxExw4)q0S%MdLP$~l1kPWy6h$G#KR;o%MUvCeO@i`H4oOZs+Bmp6C_t(dCi z^C#>vUadVN#k{Y=XPw!1u1zl4E#`%a=5mlhC*cPEL*^#1-YB<5a<_U!Y?x{(ow0k( zFuS=sS}Bq_Txh9ZhNG;akYB7^m3gef-*p8O*k4)!a7bFk_P;#&sd9M(3$WS5ZgwL7 zAds_yIm&KEyu%-Xj0oZmtb~bh#C7f_H>)xjkIN!^F0Qqk1{deT7h9X=7XJ>K9{upR zb^60^3+iuV>~xmdLa2<~B>DpLRJ8M#Ez@5zlq@n410b2>EvkHjJ>x=g~EFD;`S9l zn8$Wx)V+~~#W>Y%#f-QSncY3=8Dl|x1j~7*+iqlwa$q99_VFY8Z(1j+$Pt?Uc!U-k z2Nz>o7c0k)nwX}t5>s80U6NUyI>GX0YG!IQTv(GiVbH;@uvd~zrKv!d%0Gqy$gq|B z2;w|I4on!#f(ua_BEVuQt#_D~{CU&5rgat;125lpWcRPLs8L*DrSFJyQdKd7`xf%( z$MI3CCEucQhG88)C&3J0bMN!C?qDu7GR+_4o+;KY6M40lf+OG%6|evrBBp|?;F|}% z0u%>jviDVJxMRegOvt9{GJQN6&vwHcI^&hq=l2GukGC%NfH*}>qchdwyM=|pxetMJ z6MbWP0`LLe{lQuBVA6G!U}ZEN~VAU-1;BPU;sM-9~4gJ?#91K;0c-3cQKY& zY8OLNKKJpOC=i4(YzM%`It%L)I^bQI?0EU52ivh*=-4anU+W|8FU$1u*TDfeY_rN& z09-8LU6AA|+wNN-O?|RK%fR&f#n^cH)F(+P)W&wn|3^oPy{oTYymFzSQ z?~36j8b{X*wmC^dCdRoW!ywCCbf6s-DmMAFopgqJpOgPpnDRgfX?8(mpgYH-!kF2z z=Q=j(F=h+ALulYui0<>|?o~CN9Gp7YA5}kbXZ&@^6yuF#(kH8t=g2ob1$F}bRxndp z1$LAY2G6w%RyJ6k$jsWpU=i4c$qwW2&?pn^ww)d+bpLVbu-MIj~pko_gL|FL74)5!lm~JwiLM+3P${=7byfTCX4@nqg$6 z(<9hLa$trx3{_alyLOt3zw7O^(-h?UvsT&c!}|s(Ir3vUP@Z zPn;tnv5rBZy{9i##SL6H?L_zq>!+>lTh#V5 zdv_&Ucge!knVA3AFR!nNKGSVQ=yf^gO5`@auCj@TFWdjihw6C9mpAY^TcI8JWl05l zQ~Cb#Vq{6I!24L^{@h{u-4v@b?o>OUJ5Vg#^j!gnMq9W3_2Wn#ONj+ZJlTt z#}SymJ^t4nKve8=&vSYh(Xw_n(u2UX4^zVjHrHU$37;c^W;h&$E@_0%@T)U6U=pg) z-2{gn(MWk$;a6r|G%4&OM!{7l9;P7CWpX|GT#IFx0oNw4fK|nu=6%I%xwa0h#zR=a zLs@}2yZGizhg-~EVJ7pXHseXADjny$z*Zx_Y?w_m5Xq!8@QyUIavdZ00lW0dhSeIc ziRyKgTh~?0ym1mr-87uywoZf(9>jW9#@@?`eZKSiGU-*DQ6nv*MEFLkF^7gw1+6CU z3`MqayVeEyvf!Vi8Qpq#e6&=?X!eo~PXQBJc-^A-NfzHvYRzr?L)}IhpOEskhRg#- zI=)y`Ai+sDmk^z z7-k~blja0*Teu4;49R2~kcU`H7#=GA0v4?ygQ!hcfivvl5gb4wl;)D=Lg++Mv{DTT zu6`upmtERTt@O2PXtSTgd5x-^sbH$$apsp3Si$f1d+9JzS^+QDnOWryv!00y@@OqS zs^V_}x$}5yuSTxthjJ7|PILh+Cu=k-Izw!@GR9d&%)T|uw$Y|NGYi1>Wb7lh;)3L) zBHN}k(igj$1*iNNyZHw0&xJnMCn4Z)`es8(_f^yrMZ2Hc{jlGjMQC!ESK05v#vpR~Z4c!mZL zK;xZqX}7aevPXoOCTe5*yB={D^Vwj1YW(Sn{iHwqe&SnR8^|L{c=509XxrEmw(a3`K4@ z>@4Bnh3;pUCo3~uc(;0=mY^~9$u}DY+BB0tNun(UJDKvEy=!nw4{Af?b=8dE#_cD1 zIQod-+}IC&b@JTAlXa;{chpu#vke@>pxj;fyi25Ba8Tl9?aXLKD)rRv*CX%q9{$Sf z@e#|Mh}%wFyJC;oUBrTq=4ED;iDaw}7lUture&)MOs$l`KBIRv>);1x(ub`p=1-jA z1)lF7t%Tzm_l0e$Ej9tda?2I6e#+Gb4NDD^BNS}2bRQk`*%*_af^CCifn5YEPW&!k z!BXb1t^QCFW%$WOG15#Fjgr7D6hb>!C}T3g21DIuZ-&nzZ6HF+aio4)HdryV%l5wy z=h~SU&3uXNVfS)Vwv0f@D2XAR+?z^k{otmYfF?Z=T6XqstX;Ho7Y(iZGA()6Ps`zH$Iog1 z3dS=Nr+jJXJTe`at@qF1&boAxk1CS#xRXh=s&w3w>1cMEb00-NXfS+_5>v;)@&PX^#+|dMnVZ4gGt$ftIeCnyMO0U8W)ut)zB(A=m0@k!0 z`w{kDXJsFqCI! z29+rzkQ%ryIu1ATTjfiCo_8&s%q&L;@3bcns;9g;rMt?ggqMku+$6Etkj#*buiyyR zJ2A2OM!|3+wzQ|*q(aQaZgb@ch<9LlE(4~n!YjSwEMIJqwPf*BkhkPSP$ ze2wE`tSl)nuOt*cdHm$W)lLNCR%K`}!KZ0zSk@^y?Mz}-tfXbAg#w5cW(6(zW2wd> zcZvcNZOcp?0YZ86!@z-xbI){@CQ9?Xj795}W%((*D#%S%<2fF~UxwFI0YQOGa8p_4 z_P*?dX3&86lLUV6@(d(xHxDy3=_ckSn@ecYB6rvjH&_%xXGkoPyb1L+5ux0S9n-$t zSCVVrlG#1&;aeU@Y8QeSaEfYNL!u3fVc$6j{vyvqAyvJh}y#Y4xYIeH! zb?sByvkOxn606eWlx`Nt5JVQ}mky$|8P{U!6gnBa%)e(D#-Q zv(PETw&d)Yuwg_YvXvx-G@7Zfv>}bm(9UuV_gTnw=vl)9T=*S76BKAvY^EW z@f}y8PJmu!w0okBCu6iTk3M{Mh65676u_?V_l9SQv0W!jf^igas?l;1LdH47jZSPu zF=DKxlPizn%t5v`CA}uUXkER3uT-bdKV6AB1_olfors>^@(Kp%s7wgH5M&}vB?{s9q zSBYgH6iz*8vnDb(ktk-zIeaU1@zOTSU&8-#Q##^Tr)QBH3^l98gm>${zxHiqUfAyN z?|;&#*%(xB&Q{Yc6h0_Ob;-(OL1U{nH^bD-L84k!Hb|SMTPQ8K*q~@8TX@PP>l7<% z*ooz))bzZ4%~eKv5XS*Nc`=;J-0q=Y;fVL#m|RbC{bob>2gG{(2sfbgF9$|evmcRi z4PEjspB+%nxiJ|=6wG%cB#3rRE78bR#s9XSjF_LZkNj%(K6Gs=BB(n zjSN2t?k1JVhG1ie>EqHijYBCvB*pBKpU;aqUO?P)6kjwG7pp(N=&_ zi_%Fu*ot&sVYiqo3R06oCKC%nZRxA`cF>v4PXs6%axu33^M3W?+4GPWz?`p@F+U@iuOwVTEty(n} zla@s9x-BQoJ2-Y!wW(LQiPzw2AK)}nR{;g!SmwfUqP4{OyzEUy(JnW^n)q*dh)xW8nkKkb#WdS&|$*M58+e`|0_;vV|CQZU(-~I9Mf$W8xrT z3Zsn@qKEtKX>T~H*3Wm*1Wl)L&uqi5y6!zt`{!!52IK}mQJ&B&^KM2)=$5V$JEt+B zUdR;$3h~^!2F6bWYD4zLrY(#obl3b?Q88RQMez@$A)(2&$>(UkcVp6ydP!A&jC&y; z^Ln|_!PNn`n(58^8_Bw@^fpUhX-Jn1GI3~suwPo>q`&mfRMsiev#9gyG**E+JrYYo z5N3abwR(U72boOal^w&uEDzseoOQo9)0*3EDgB*WSP+(L7fYb`@}h@Pyc5|hXvSIg zJLwI`BFk5NKs?SRX)|kgkC0BU_@Yr~ZDhR<&(Hb>Z$*TX$trot*x%PX(R1 z8QO|{=9uHN+ky^bH;$=cp=1P3Q(539rxZIvub}L35ZHGw9 z3bZEJb31z463zQC@U`-so^)S&rw$q=V01|h>m51TwbA==^anz1){mQ)=u1@_lom)! ziZ$$9*d=VS4So*#02ZLnGu7f{t$U0)X|eY5KIV+ZS6p+)2kUl^zCB<~YoMIgvw*5* zf9_!;yU!f1n#u$zND#Ck$7eHIH=~X|gGKgVZ2JRjy-wp`4moIP1e-bqWCbCSZ|WeS zt(cU%t&m=iubJg-1Ee>sr`1d9Jg@Grc~R3x{#2hiuC%N=J<9P{-s$pY9ELL$%8Pfm zp!r@)QuhTmG)Ixtnp0UoRch|$cem~x*#ou}r;e_$%pQioc#5MlnHy{pva++<5<|}Q zwQ09h#jU0+S?RrNMD|(1DzT;tq74$==$&hazBv&)(O~a@I0XVd9Y~{!Ghv#b;Wzqh zdXaXs-?B@7lCMm9Sm$$WhyUOG!nfQv?|Bb@djBIsLH8-WP=OH@tV1)C?K213NNLBC zV`e3dkJ_C=v}1uZ!5rg{lR&lvh1Q++j9^#n=Y2S$^e%gqE{M!)o2@cDQQcqtqPp+v z+MwEFO+l*GhAQIo=uG3q&FOya4jG7&+rVH2bXRS@3vjI1GR=O3tZ#Qyl#SW&(bf*) zLXBk{?~3^!nVKGuX5EGIvC~-NbZa|PnL>fBOR$1eWOu=en)D#EOrY~6aXGy!FM7X5 zzOI;Ir5vb&glv(F9kjs>u9!hq$-3?sx~>N_(C8 zYDoBY?o{jT58qEk9@@D4aJrx~_?!YM%ENL4V{u|}(*hv!?OcZ~fEQTw46^-&0b|0> z-b}JR$YI`t=~!d;q|4r6S>%KL0D)h!-()|&`}jPL!n*$6T`r=HUKp&8hd9@HVY2b{pbBbN8~Oq;78GY& zY+4dBz|%EF2?AZrm^Jah_oEbI2Xn(BLFB+-1g14oZE_fb6ehY+2D!z64AzNW_@TR(crACJQz{3Y>^!eNAQqSS$;UPc;4V1 zYVT6W)oHK)@sk`t8x03}=)6m?j-%*2u%N~u^XkF=js3u{@Ds;Rga!GC+nFyvm@!*| z|JcJsalzW1Bdn3Z%afOGMB3xe2*_j9|S?^yogtHIT-jB-5~yYU^vu-(q-GopyYFD{nDb1czlS4ze-Z&%hZLnZQw zWsr@rN+g{9ph()N$TrfoIDNN^XkYUtzE%-Z(e2Q-HL8j1Q#`ve=Ulp`MuFO!$GN|#d0;Vmz;&l-N1A|YB9VR{r{xiVrKZHNx2EX$% zbu@v>*z2U^0*BEUU1V8cNtA&CjmD=bmWWK;;xTLxoK*?!QOr*5emZje^v3hHZFpV> zsIH-Q0U)Zs*MSD+vAVq34Yv6=k7fh}3Kt`cCYBE}Q! zI)yjtyTP|CRo?W5_k}k$zIwX)($=__U)BbxTfe+N*YZ0`X0_4|n0kUJ3U!$v^oudo zs=C@VQMP>4ur?PSTGk^43BWCEzom{OJxcV@&Y>n<*IAIcqIz@T3Oh6xQa0z;U-5p# zM#~xTkh@U`b7Gvl58So!=bzqpSJr9$-uC|6nYV}E_q_kBr}EYGo*e;S-v5&${Pxh6 z?-lmKnCLFqILZRLz=)VCr02m8bOj-hC$9+BB;ykw&58^8n4CX~8S7G`#o|)`4I5Qn zC)jn((T)=jAE)(L#N8u9t{)f!5Zlf}$Dy#>hdkU4^E#0{Ga~3QxRMxEMt(5sUdS0< zc!%34sYrWGRoO;^Cv?YiDf`jU%|6plyu$QsUKU4NYMGr)pfNmHCBelR6L%wiJxZY> zP~M@ypV%|xLwn~( zvP(t@Dj+R@F{RuBP-CENEi4XF211SD;8cSN!Q~MUw8fq!TNt3+RYK;841QU+A!}R^ z-Vy#VjM(}(R(4lvm<#E&5EJe|-4Y>Y?v38#$D(S=UwC&KE(w#Kz!H!McAl@Xq} z&N@B96Fa{Idjg3SkJ$@G?3Su6CTMhspaL?%iKp)9Mdd(ZbwiOizf%bLF(TA9tDwD4 zTIeL5J~v!qsapnbfsjTC@%LDsd_BOJT9CfrWY|2_BZ`_bPhBkW(*u)kX6IBgdZjtovz031VE(kP>@A- z`hCPGB(n+?O7R8IL^ugOAjp^o7xG=$D~j!yidbx(V9uk|PYMN_?)q(2-#+;E-{u4X zB5RK*HqGdh2fBc}bmm0-`eOl3w=J(?^!l!?0-6SA7TMlyoJbms=`eVyC54&xbw z8fS_1){8cDZ5Ybp>S$+g2o>$ig6x2dc>F~bv?*meH=a()tn*QAiy*|RYN17Qp#_Vr zvC#0Jq34y#s>_dg>g$)%(!n2D83c{7O4T$c;s@aXnC0cEFtGK(Dv&2Eor)tpbe{5+ z$pV8!1L1=7qO$xbKMMb2ICX57_1*sPtpfvZ|DCqjM7S2Uya}jt7{5^c=ip`3dCntz zF`?-$j)XM4$eZSXsKJ;_wLzIEYe2Chi_l|t956dXoRS`8nM-hWG~F1}D*(G$iF6sR zUivO!la>d5ULQL?+U$Ri9=dMid%GDMIOhJ}ufLsn-S&3+^lv+~yb}UfQxxJiULD%E zxMZOP1OSW#B$i?lvNDpyrBBZzWC2S>oEpQkg{-cUYPdU=Aq4C&Jc>qhigCiJZC_HH zvD45tU_+q847CmYC74k|Xy27@Y8GLLc7DhgQ#J7p}bYPdAt0wp#m4>gp>4zzj4Uh{<`$~Rh8_HfEn&%><$?;RiqQk zN0Ak?Zh$J-B#Xpm^AdsftO2tr0%kZMKsKD|Z3xI=3foB#jNS#uv4p$FK_2%1@<5)s ztvtI)`h@jezi{yFnYgyHqJ@aI(bX2#Tdhyf%9x~IbhkNhIG%|H+-zpmZQO>fh2m++ zmWhBn5>RGF^vx4up*xu^5Z5q!n+LZ2r)`}6zr-Z zV|w!h{1P}ScaLvfnmG0C#|iE0bKqVTX+tQuV&)4k6c^bLsUA{VrACG`UrEN8hRG|3 zHHbNTKulqK1^V!L&+lQjDB6bDvFN7qqGglU$SGSRamG_kDk)3kuYpi#fkwuCOZ{p1 zvHG@MddMJE_ln!Sl!*?JN-9(S0zz1sq}~d@wE`(H#1^s9Nt_>ec8!tA?*RwpK6)%w zr*~AHZoT7^aB}~L4~J();m`ee^iUmV+xKQm!6a-NOa%$=g3WPE$R~YaJO4r5bU%tm z)&hLs#FJAA|DBUHoc(cg>H11`7dCjgjd6UM0IEeBFImLB1kAc3;<(lNZgq-fIf-o> zRiI-{%QZ3?0Lj%%egYZL!YCTxgz5z<#>W7IDLJbAisGL@EwR_R10@Bc}Ef z$VHG|twJFMwAdq5IF>qduCS>e0~sXtZ{5BTUxZm2r`Kcaz~orpt$R`Z;%y8$XzIw% zhKGlsOg(~eP_u!jV!{>!A(|?q8@HI0fgs159)(xejOoIiz~b5D2F2-4b3r3~C`XQ7 zDJ!Hsp&v)ph%xu-G6R8pXm!&`VvBj z5WB9ruem?t>V{8slO&hCj1YNpX9Bz-E-%H?je}h!mSrp_5lR5cQka(TPeNlrz`$h4 z)yY5}N;nm;YxJceU0KyHB5VKsG_6N{`^i5+Q1Hr+9G-snF&)EwF7$YMFq5%Fukce(KBi(z(HBkv)_QtM@t(_ITSQv_I-gPEcIPi3?RLi2w3TZCXo z5rJFn{DKwBY#9tmft{wl6qkW{GZeWCZ%YQNjEWc`62zC$5)z5fK*=ih8p$Jdlabrv8s64Fd{vKl?&(*Ts3}~G z15khe_vp9pr?0mjlxscscRvB^&v|K|Cni$#XQd=PmTWbG$;A4@@Wa##leh-N(qrQ- zBuxEbuYFU}_T1-!$ElL_2fqFD!=k~|*L)sB(4?L#bJgu?-4CN=3sQWa;{8VWd1mtH za#2U`a%L=RJTgF7vV)!fL2gW6M^16zmnWXgef4B}ZpJo%W*RRS8>~(ac<-%6x)R$nA>$B9&WE(5*i6+lx<`iH0>co>K*_VND zU+Ios@b~A&2$hwDhTBm{sOeoX;3?h+;JHFB4!%T2Yky=p2N-0pi~}ADP5m!#dstEZ z1wy^XP>gGLd*)w9h0C+(LPKe7v_+ZfI;k+1wapGxOOGZca%)dL2R*M(_Ru<=etn!ar0W{h_B#J@PgzmmK8wY7oOe4+(h#edy`);S zXw^4w_PrWC*c|WdgM!oH69gYYu>_(g$L4fLZ03RXFeKwhCOFyQ)R$A;vTWHY(&Z!orjHDTFlK4b#Y zFbAzA;qe%F{nvb?+58Xc0a|NKa%{FBCl?XyUx)*RrKZdq4IKap1HcGjk*Z(&Habn2+71PQ}*o?9)C5Z9N8Ut_DSyqVT@0 zr|DIh;-JP{q$&P`@{s98?ESspJp95iFm#O1jXjx zx-hrz8HqUZ5baQs5tBE9eh#`n?I9nD*E3y-VzWm~B6*!dnh@BItgUF!oe~&^(}ngb zk&X~;IXv}rNP2$hLw2uCP8#R_$`f5b{cCu5|vF+iDw|_@R-+%Ww zJi1o>u?b3F$n-Z+^_CNSHwcQp= z>L+G;VqeDp@xgJs|D@?1ofb5z!(&RZF|eE)k>#TA(3&)adC9}nbGDS(Vvkll+jor= zx%btMoNi_ETL~>MpSil9zCvJlu0XgBU7WQuokH3}(MA}~RnLs^nI_S9v_k`!>%2!I zmWFe>dh+~kw05W@3)KS;co|;{>f=P5{NLz`R^gw2_{%17w0W^cOypCB4bgac@`}w@q!ddo03H(!U zaWvORUt2G#^Gd_cDRdgYba;T5#~Rq&(rHPHqDKiwQy+R!1bGvmHCQ zq^SF=%9&fvM{czJcw*?6-(Q@F=GrtrKOVpR1-k4`E#4oPpLqCqv43^M-4e~1nvwr> zKD}*l72yDFMa3nf^q}GJn7Kpyb}9^H42z9fpwOJeRPbRWF2J3zQ+8r6A@mobEj4@| zS1{+fJ43YVv#cdo;gD^QA8V89d4fq;EEZ1{Ppif?4C~yPsjaZ7=Z$(-jG=Fm^GGA< zry1CGUMrrM=`H-$l~;O01uo#aip$3YWT@QUtKcGs!u90bqld;n62y zw8+MoIWp?%*kUso+!o#@PJ8p?As+EZ^bo+UB~cL-Oabxb5#lu>ZYfrqAPy4$Ki+;w zk#Hx+g+v1|@KY`nmpR#P=Pf~?C~{+Ppwid7=-+e+SB#F9oc!a3TEyVHIkku$tENBZ z&pvDr{eqN-3X;2nyb$toes8&r1;4d+V=M^BE2Hwb1RdQ*M>*=|HTSg8Y1}MaxWw+- zENK?QCB2~J9WjvcYV5Tph1fk3X^N zHjZeAJFa)pG|$z2R^#x`wky}I+?wJ@fks>SP}lD-#BcxlJUV8ql7i^JqND57Ulz;l zc#~$)^y+=J$=%{G%a`A;>+NKa@FE-zKLn0^(QXPeMI3#SIDo*nevKKy5CSj6m&1ht zN6(0SjgDJViUyJho7t3_1*X*k|I=uQm8D~NN3`nRu&7k)iIw%}2TYf^Uv1)v)m-Q7 zdaWT|nVS(HgiCI0k+tc`Zuzd8y7drND|M7iA-o??5_X&CL85p~;59!0Uj=HlfwVPBhn|I3@- z^M@$=hIzDUwwZ*f!#sX7Ryp(v5dBx@h5wqklUzaO#-^k<*nI6uM{v3na@|QR64-*- z3IFKdVS2z9;oITu7D;UgaSrFcSj-%TDBN^V7Tn zBIQV;PnL*20oM@>+6Scpg6T2ExVCslf@p;#^|BBjXB(tA5MZzeZZ*Z!F^!b6ubPRUGSj=`}|I}L`GDcGh~xa@*Wy(GHGo1qs=N*D>|yZe|kRtCy?|Vk@3Qg22pET_gb(8d*&rX zogSPwA!rYvuX9HF*By9oK3sToXL+c>xI*4tVEe-X-$}k+>4leQ%!$uFtr%1EH58Q4 zI5}X(Qljs2Sp$H?6^1lCsRr*Paq$$>Pk-UB$dRARYD#A4S4(Gcly$YkVQA2u##0n{*W z79>cJ;%kAwqI(pY>UN#qvGe-mAW{_mr924V1ZhSI#kYpPqtPr<8&q_cS>1PIx&n?FZrQK*4V}O<f_Fm z7Iczd57&nTt+1~^NVD)SK|&J7SxQ9wZ!RL@ps*)r{o1!v^HRMzT)9&8*Ug7}Og1$( z42z0uzj{d=;<>fWi$69QZ5sLu2byOD>)={90@=(NPlEDsD^Lx@Ubylr?-(<1y#v<> z#B_khSzlWqy)3fx6YY@pZCu@8Zw5L+)LGIZ4aYZc?`cp0VO`ayc!`!D?IySc{ajD4 z0d(bl5AALyk+%MU1kDl{NAwK;_r#ah*a2(8EHopwy;x)5=bB^lVoh1otH)h`UU>TI z!qdkl25opN(hbyzxp$KCRHW4|M zO9X?M3R74M{w;!Vg+hQtBx_tDUA^Y4Yv!ie=$}q!KG|f`^vBr7#p#m4p6J*oeU6*% z0OX8#BCS2Q8-QiX(-6bOaf0h_4S%oye3={MFT3HnU7o}h94J^~_i|!Fbol7oh&jW{ zO~NyDnPuFaGQ-e@GrJ?BHXS^mTrW(9>1H3P?hzYcSG>EMK6TcpWnD zd{&?@5S(xusr_GvqQZ|TqP7WO3Gxq`WpK0{U55{1s>{r{~upcQDTr{L*%-n za@(SHO)gz*x`;|qL)uf8=;RWSlFKyfno5Z_wOC^56gIIf;}&c8v@JHV204{n#vv2& zd%ix?p6~zvSUbjthIxHn@7L@3dcJPYE1t{cHB?)C>ZKtPenn`^O2cb}@uz>sJf7Pb z#ICl)-yvoxgE)XN_ca>)BzCJ{KxOL0$LJ&LM;TYj*f8n?#-IoXjNB_!kBHPX#@~|I zD|O4EedJ-|xt<6X&&e|eOTOyNlbW9K=L@?Jj`pTqtoZR(1^3oe166({5|~Elff>$- zAl1>Xb?ix=+kxHKvurnTnC(r`$~rJek%@S-xV#CMJ+TNKnEy97gxT9*wBy-+Ws7*8 z8d_mBWcRT z_AsV6I0Lvd)sC==ccMUX3Erqxcu&v1ZI&F@O()629g z4Sy8$&0qOT7*w=-ET>0Q1DjU=kchybXGfMgvX-L$tlVu(8hZK(N*^m9ps^wV7;hLU#iX^cIwjEvr}qRl2wG;luc!^(rgr;>;sGDFn}IH5!Lkb z`^c-8DqaE_T(7ZmNgf3EV)S%*I1`cQ5D_@~w29))e|}!oQ3jO`D?3$w${aWlY~lI` z3KEZ{C<`V@nio_HQU}yDU?A0s1EL^p&iI68q6M+@4(TK z10$b@@SP>ln;+N2v#TFc>cedoW1kR9z4K_yt}w*VR*__%9R71JB1ko_KHH9yV<(o_ zrcXopI_`XfgjCk_s%(e5Q{2CNXp?u_r}8B zyb1_A1^?+g{-kO2$*Y%x>AhFddk527jq+;SJY5lfJYVuW=Iu}JOE>b>_M62rlfO*h9X%44(| z7tIGyhUj9=gfmWMuGK%0gYb1N61b~LC!Pt4$L7+_h`uUn&)Nml9SqV;co;h+o3Rpp zv+btv8GBamcdoNiCTsjp4-@M(pmx zm~Uj~tx)y#Avg=MkZ+KdGB6RBVZc!$fI^iwZ8K$U6S;1)v>^$x8z!qd(_&t}SK^%PXa3 zo|QenqEjwl!TKLxgjG%WzG(`v=saCE;ae_x*uI~eq?rCzZO%hX43{qW$k`j?3_N-3Q3$mjZ zWXx?v>y@MFZl`ABAJnb7!>Y!<>KpsxDS|B6d2#6Vsn>Ai8LKLIgQWO&ieF2TtX{kq zBs_)oz5U7Q(#Fr{<9GWp9RSd+eT|!`M6;4Pdut$3oG}N@0CK7%N63&qx>(Yc7^w(1 zkYN{@2IgZwvv+ylY8Wol;m?YTD|k-~jckRzS@+Dk9}NQ14z8JtdNPNnfN_nYj4O3H zC=dZBCUNYJ5R17GgW=I=C#cz7qD8po{55*sc7&t%Js#{fRx-m;fGN1ojUZ-qAKvy? z%E>o{#u;t9GMhHr4JY=;f#Fxk?Z4I{h-=Kh+O#@A7d1>x*(ug07td(Lr)@cqzOPF; zl)rhILJrHEhZF4j{nYW@;fpf%VN-VYW>7ILY>k`37X^`9L758;xGqZ) zu6{#pAsj%!xSx4d=hsnxE(uJEL||(n94IwPCRVK@xGJc8Agnf^Hsp||qpE{a%3h{c zgu%c^&Za;Omuc@aASGp)iBB%oBgqk0-~yRKf@_Gc)nSpuw`#&$R4$w50ro*n`_CR& zT=}E|0OiRx8?Ui3?LjhlFH~!woHgSkp@UU5f6Z{WIrQ(Kzy6e)4K4GqzYDfC z#{usxavgS8Rz4tF01a~2sQ?6KoLs~ks4+6adiDCMP5Lr**?Z?pN>V1kUNT5?0LdCb z+)$!t5D2)&tqCcviI%*1LGdPRcRJfkwETqLn+C2?IXT8^UCECOWy|j{oaOrJ=AS35 z9RC!6c!|;W^|m+sqpZ~_T|%@IJVk1rrz;fkba4Nx%Y9J95DKyWY}8z&r+M#^SaeKH zNrnuLa}FI@mqe;SBwtBh13_) ze#V&cjD~WEEs!#?UM1c9l}cAY*Von?0M{tXh@@IHv69#dRoyYuhDa;Gs=MrYSk*w- zlYkS)xv^iJg`o$(2w(w)ARWkQ~m$bayWhM5=sP99NJ>*j!_H5)WR zn3VTlF2c*icO6-Miz3f7Ci1MEj~E_Ut%tDMyNIZV{Y-dYQqd1?dM3;#6krM6GsI;sp!#-L>{!GI+f0 zkL(g_?}$LlnIF_O{Noos?~Q*u`j>xL*m^4~Piw0c8Ua-`eh)cjKWOZIqInLfCy1ai zDQMH}t5ive8Oq|06Aq^<#g3!1*hkOA#1FFB!i<3@!SXU!^DB$=W% zfM`$q5Z}XU2qutFOR2hZ_UbAAoA#=($4{4Ao%tm_Z)WC__u6pbxhL&aRWDoDc?7Aq z@2s2NDN5gMXrquZV#CFTrIE6i2Y=^2+!JYmJZ-+fI)4VW1i|sRQsp>czQ@H)Pq}8x zz+V2~PH9EWKbbaiJHh*j!0V8Konwp=mNv2(ekasiS&+=4h) z3(_lF&eF83cbT*&9V0m+2ZQN)ExwA-$keX1M=9!5&7RwL(%8a-3wfbVK zbSF7(9@XLei_5Jd>Py`=5-$T@)~=2tUnY@vQ-YW`t2O9jqJj^^LLAK?-g!25^@jot5AE;E&kq5XT$O| zGo|@St2sI&erk!SY6&Y$6IZ|jZg1Kw3EY?2WUwq~vs_(jY`@)5(`p?#zJaE6+P<@z zjmvMF7EJvUzb(fN7%6`SY;rN@+p;{lvQPKQ2e=0;D1YAjxO4PB{$c-oaQdI?t-e?h z)gdSUz=j@b&%Yf#^!CyHqlQr5yVjni>MFh}D!#1wyFz$3Qq+C?T718gz?N1&Q<==z zIs;$lN%U!GEzXRkVgeUNu+-9MD$|LqAJlWTucBEe28aADRAh8$BKXf1haq+S{=JRc zc^tRj_LO)}3+A_FkG)ZfdY>_OroOE$9C-_9r=WFR`;Mg>)e5Hs2$HIGl`*-}Vc>(C zi<`|>JdsmY$_OpEnjd*-op)?A7OObA4een!uqW9WZFU3i#9vg$aUT{yyN0pVGn6J>ZPt{Nsaq0bp~H%>uQy5bMCo$Rp&=O)u2Ow!M`C7> zoqaX-!R*fOz@F-Ytpg)p;^iYff8XeF{`%v$e~!1F2!b#Jrv@KAs~NsKd&*|U$MS%G z+(OTlP+(6Z_ke{S^WMZf`|I=}UG6!9Yc79FQ_*w_94@Li4r5DW`j$ov{l}43G0Ti4 zW`J7Lpq)OXqA>mn5M?K01=R6<@wGL5u|Ych32I=FiZuVjH7_|m_H*79tEd*&WKrAh zsLKAP#cRFCg2~xv>|rXaC8$g>Hxb6ddtbwTnviGJPpQxQA+q+FI!q7lYW_uOe%@sZ=R;W7lUk zs0%sUj9{+~Vc;;PFea)<=Sy=fin@xeJtL|={iPjt(RPK#4SCyc&kxhHuY2Bk%nf$G zZun;T^IlFL9|wDab7KCdt2CRFhL9xnYvE;@D4~uVen1bvPK9*{2O32JOW++)o*=fB zovG?EjDA9Dg;X4?*Snnj&K z&&brPw1&3u_uRpf@KddO4veoQF~wk~dXWIJ#&xz0So7n1$G-**cZ;1Nzq4RyPvlK* z;4c2cUF2B|^h%ZPRVdqQMwpr<0TR{8_^hg{`=nDTL0hZA-pRhMAmx$8G8yz=E1NFX zndB^!DpfM?-&=R(rf?YwX##oVt=1^A6n4fvZiSjW3O1|oim28Y4y-EI7{2?cTy?l- z#cX)>`?2oPKGEx(qqVi)EMGB#Gg_&-H&GA50tE`?fX4XMw_I&XGTFkoQWG;j4B?Nd zAcl^7Lnh;7Nv|5NHj!ks(^EWyw-J|T=2wPpl6@*>_~=}`fum;XSC$fL98fo*99UfW zBhF%AaoBiP!xfwGU;4Ib*!GR-x_XTcWf*ylzrI$O5V(c!iR3b`xqR#0j@_aY$N1UJ zfh3!;h9Z$4VqMQW!UBv&xrO>gO!Vx&BakngGC-@FTh&UmOAg<3Kbxf}Es0_W)3kY7 z4II4)lXR31^OI1EdRL_hH&w?jAu;H-#ZuG7#C|CR>FC7_Il#@`=(uR)h+;xZtiC+s z1EN*r-t-9<%}E2I(-z(l4<;iAM1B=DV;nk?({Lw!{Lax)u`7ljj*s^=g0h6w`5=ShlJN03kHD~rIFFL>@K@=BR@MEG;@a?;EPbOhv)tu@ zVW;@l69S$1>fi*ZKr-+;oG~b8w760_RgUHyTsj5YCyzOjwl@X2`H^3MamEa+hbUr< zD4hCIIr?g|7e8;u81lRt8QLa`6C5=U)vX!W+=2lBWy|w8I>C0D0sPIAXl&YhyDPy$ zi{;Es9O9>191dCq`G=h2AhWhH@)*0u`N%G4<%#2eC=q?zzmQ85=B zvkNwyK-Yj>$US2b$QGWjQU7I#iL4-CAp>g4Qq((50KA;Y`X!ktNoVRRV#h|E%d&cx zBt8mF2;XFt6<1aZT911@niLs&RS85VHN1uWY5G@4ws%~;#)a!j01dAhCIoKc2cn!~ zeTFUeF52j4*t!gulZ@ouO3VF9c8Ltw*ou5nY~VlSqgd%W^f|6M=f+tV-(5qhxzbYo zc3toloAhA)lQ$&cbU1hKab#jlw3=j<$sdH{o!53#b0waK)-p(5hTg5_Xcmr_TJQ zz#5ggIs5q7J~g~XdEp;wFooFF^ig2%@`nnPqZQfF)Vf#E(-xguutRn`AG+fnDEHl=`hF;3< z;3Vo`;|QHt2nX9$?viI+hU-i`L0^RUHZUFpm+MiX;;g}@8Io@4G zexjzolk{q8L$XnLvMe8IHTvbu>DRj3e;FA z3yeP7m9}N`P}6p_$f4zk2Rvb+v$*r3V+)VG=i#vx_Ig3J7K(XL9OHx=DorCGmjSvT zS~K1^dc!K&RdToF&R&2b8n1`oh!t3rJ^)d|O<+ zX`^QCPnze^c*8&j827Xb;5)U_nYT$sp3-D^$Bey)kj!Do;3JVqg+FDU4&lI2BnB5j zVH=}YaG@8v(zMCHj2w#x-0&y~oBjDH;06PUKdZ6o8#|d({g+U;t!LEK$#JL-3tNR$ zANb8(5vm#0-MX>xcOQG@_PZ75n>|sihnc)`>_7~v(hFa%x`nvLh);GH7!GJ&@<)>Ad}Q7Bu^ z_(52!n|5LxwiqZx3J!^hR58DTXgU%dLRN%qKf~KH_CFn3wF^8W9l{N|wE3o6_hv=X zo8!fOUle-_XEwOz5X6o8IXZjvsn6_qi?{da&^n`%O76}vOLp~AV6QC$^9p8Ki^AoP z@jb~UvVm)nEbG1%yzu_6N(2mQyXi6V>yO`$)D3pfGf8(;OHj|0YWB+FrVjC4CIxY7 z3JEuG*0`xI+!bR1z)zm!OqKIE`peMA&ry_+u(y{Un?RZA+XCglf~f^=kxr(+J^L%< zZD;enjOX_U;Uy`$f;BINv4?$^|0QnagIOk)UAexyCoB+Q!l0q~yz{cRHYb#61FFJl znjnbU2lY@j=fNfVqLxX~bkXMl7%s>hMKJ`S@RYzUDI61Q0h9%8!oP-JO;5=*wIeEPeR90`CaU}p zv+g^_@8LC1lfxW2+KR~5jso<9>|vy43nDc$dUAyz1s)beUgEy{P8fqqbvbruAwWx5 zS?-XExv#!l-R2lOfg5}hypLSdn#{WGb}lY*7lxG0@z==ox#REK&M$xy_;zpILBzrl z>`(C+h%8)Kz`ZGC*tn#v?vGhmoGpcH}a+v@@j$^Ot|!r`uzc@h%!Iw;K7 zge9!nq-L4~sk*5p-XNfwn8>oUm$t9EvnzZXc^j~(MvenMNFMz|**lh}cHnMTQT+JZ z6Q$~iTy3*TqO4X%Rh7RVi=5~ajrIYLyv5niI7$=@oP_(lH;3R^m^1UI+XMGAo=)&%f%1>2V0fsuR}rU^&li;c{d&c8kogwlqIdi?k6T4DhY`2B0(?lbQ>GRgUi#`LIFfWS`|p`L3%t7*Vad z_Cc-uU}1EZ_lGy#ujlZIiND8-^)9zR>7<+>+9t&Q z@i0O$Cfo|Ht2k_b7I+L!w%@LC4dM=hCkc53^<7RVUs?4E_tq3_PxKq2~8KzsXxq{sjx6b?g z{;?M?P)~?-kYz%sB647jEf$L8QnfZfsT~^)pinx?f(+$UK|#S)SSXIL;`qR@ z@^qIWI0TF-eBm}5>uYy}<#=#O(W!MHn&gWf6t4Uw&Y2G6vs?mZuYY^gn=@FrvMt`3 zh&#fv2+BZ8?UgTfu_LgdYBmo(6=f$X@d!{A6SOJPA~%a9mlmKFbclEnQ#q8KkSitf zgsh&a42UH&NC)O`1r9M3DFDTZiox5GR07jC@$;n-X)$0nbT6ffX@J zwpk1!dEN^{S1~rry{CM99}#uGp&uHDQ0G@VVa}R5zh13_R`JlHgQ;AI_iz!$%STUv zaRGWkjex5pKk_qTLVy4s01a`-nlRJkk*PImi&`22+JL6iuj1br6!(k@QRHPqVOEVz z-&n~^o6qb!)f%h8&O)yPqL+l<-Xz$fBz`B}ZnUEE2zq#tI}I%eLv?5REP zCF~xP8(UL2HBRiQ(YAq2padEAwbacf3)uG~kH!P%NvkxNZpU6##L0GGO0 zRk|oGwW(TJIa&sdM&Ap}=_OWfAJ8tS{p<9Jd&JZQ#xFct=nR6cy8M0nqY0umA5Cz8 zV@Ulb$SVFs({1*beu^Z9wxh!5c3VSuo9YqWBeVi72@R`vkOqsM0vqGvq!?TWG1@gM zY#?f#2om^HpcF9;Me!L~P<)?gJ#jSaj5D4xPs++A73UVoCQPx|J?g~NChe($8q%x|**_wqGMc@?h%et$5P3{F zXOjyxzApZ@LfJC75vRAzPHwMSQ@;~pdKG=1HaJZcXZs|+OyA}%t|L!Y@UZ4OI#HYR zz7u*$`RZ7*%RcQYwgQ~{qq|4;U7NdnTl~rq@V=$9HSgNzdibyB0^+8Rx3zbJ@&x^q zsg-ihBrQ{nj8_o*hLjE5<6)Q21Fo{-k^B{Bzu*bb^WT42&7>PtyCP1b&qt?0euAWf z)2e1dg#sU)MmN#ubq1Qn#fZ|cn^*lvFs=sEPomEJ>{|1_#&+DhEnIjFbd!i406?%o z3mkCHe#EPR`%e}jn3p4}a|A_-Xca{{qXQ5nwMaXjwO3mlZq9JM%1~xSvp%=R7z<^H zN2>u?L?@|kyNad42+N$|dh6Y0!rj=>c6>A@%dL`S8@z_Yq+zW^9s%aH9}q|&Vbj$k zyBuCNqA>ae;?~Hiu@(dqo+qn057Ei5xFlvNhNYN=P(W_sD^7C3VwLkUv5`ebk5LW? zis*5y698APW&(9?Bpio`g2@*m5+hm;A4bsoj~p=!V3Pt4<(fV_ZE3FHy)LB=(*^;` z(w^ka3W3nB&M`s68UDrgs?)V^$j5TS0?DV245Ns5Ph)I~;=yTT6cP9bd^k*rn|aq`CVoA3C6!3pcC;I47ObdR_rwcfaQj3ghU?L)DptB_R zO+_){Td(l&CWg#xx|5tE95*5_JN~ff3i4i zr$*s!s)~$`IY%#-5@gm|a{Lw$K;4R%aU8@})s;~x)y9#oyM_Cc=@yx=6}d}L(1P*Z znQlV`@H)E@_HEcPwv*j0kUsJ&;slT5ZRNG+p{)d#=`(_i_lJn#r1V(p=pp1HKXS+DJe0xc^hYqkdJDU!%cX;ez_P@aom_AWE4>|E<30`imxLx~?U<{op;DNBkzj4QHNjf4 zR9QRRwM(H)shqRwkm(|hZ)5GMS>t1TADo+ACOAbK`Q>>+ba-rH&vr>2QQ5ns_|zkf zY&F@oBzGe;(=`;Ld$TRRcD%M%)H^!!RalgTmF;L=hV$`cceT6L`y+G;V>V*Y*a9Cz zDM=U*hKm7ZW2*4kK9!3p7gj^m_oe?Wv>wdOhr!rE@A0<45|bH63Z@G8j(g|ssw@=52V&q!a>^Fia!p=` zqTsTNy-j^ZLxuLRNdUj4LOCLq_fRJ!)>j{K{R&|=(VCNu1`jxXQn4m!BT4(I57rqz zf4_2c)EED`X}GV%VsAvGg_Wg-m({)xAHpWy=@-_hFR@)IXS;Gqn|ypua$HWkhI}!G zj~N1iJM8@2p;P8p$bt^}8bl`$$c>aOT`6EYkVF!PCJ$WTz2UZ+?CIGgn2=Z(`v=54 zlQW`!1%-rs@W&6QJp8DHowT363%z|I-+$>31^e;Gm%^^6yS-`#1`KD%jAq-8&z-7& zwIT0lR(8 zli`F2G=V@u)4XZ4vFo$IZ9Nnu;ZNs!A|OzWw$4BcmGk#g2pds_^||k=zcjhV3FqIS zysh`dKyPzyMtnn|cTQ2%nX>oO>Cfg)GoMPt8ur`h%n8yk?+9P+&Ci-Kk!wriW)8BD zl;0L}2C%Dm@16LD4wGE_8k@BF2*Ma{IuR$epx%tfGwJU*VNxZ&u?Zv*{Ku9ks-aE-7+VWE`HCbErsi%MDDlf#)6{#g4 z;k3*^AX_EF(5Eo>KS*NASl4CZAQ&VnKypzk2)IF$HiQw3G8@Y7YF?>*5j2+5SoHSl6 z`4T75IwCysFn`O?5~d8|Bv6fDc}=Bm#42uU+?yrsD~inz+%44+B~}OLZ-^-qn4Bm_Sd`G%-RpK|OsZufG^x z?Jl%n6KQ1#2jizL?fo{g9C_TkVL2>McIY0fIB?z8=wIl_4ffz;&*&~u3b!GDsva+Y zm~Dy9_7JwsRy#-49sBNDS*c_feRy?f>eZpJ(-v0NYEd?7*(>j6Gcq1rXk)Ds^~HZ* z#n`ILx=czk{!U zmIiCnfyUA9OuLcdS*Ghr5e&Y<*Ch{IGAFe^IhBo^^6-_R~nd*0YR8% zymPZc>azMQeE~kgmyJD!nCzLtEy3aJ%aLxwut4NGpW zQLfX$3{r(ghhb{*)q@@kn@p;vZ?@AMPMzjCR=MhxDx3A4Cmfwwr(UX@-l09BAQ@Y+ zZ9aQeJp)rNh)G=+d2w1LG2uT-sKloU(Z+-I@X{={lMZv(mSPXUWMaP1tG2k}OTgWSNO(^Ji31 z%&_vlU~LBOsm<1fs{d3uutcLcUO&F}UT!ac?DdttXFb_PQPy4`-uq6J_dP3db+0M5 zKw4Byw#Y;6KYz03D?qS@{zg2tGO1g#cZR*JzvQjp#=F}ZC{!!L9vwlc)<{1P&?H7ukT!mDyKC5oxGOc&$#cDPRsWrX zEe&pg(9Q8~mElcS5XZ0H261OVrt84F&d{AY;m5d;7O)quD+Z zJZ-Jp?Dc$Q@2$f-50+d^SG3CIq-vMV$-qf%DZpYE8HY9&&9@clr zz6#$Kblq{cifcC4tiPPltoizrVk;HqzrEo<2>%l{@#MEr!B-Pc#{Pegbn#c13U%7a z@dwq*$tFNpST91nHo3BSk^~=N5qRX2{ub89TFw6}xGCqIpza3fkTm%2E~TaKo!n@6895Zff+d`TL(6bthKNnd@+CIm+*JZ(ba;Sk~5;qJ+5cY z)IZ;b9z-;2a*^rssg1_$ocV6U7^TAl76hC|kKpdgZ5Yl#7iYg>hZZO&|Lf)0@7%;@ zdE(Bs*g1|=sUGTb_iDbCJIhSl&dDC$)=7Bws;W{ai~%5LA`iI_lrq39uflu;E#kUt z8m|H|B&o>EH~CFkDrQO+y9@Ip8|a0#3nC?98E_-NX+8>Tv-QD0!3dwm*!jy7r{Vmn zG?LmiO5*ev)~4t74%YS#GLNF)M#q8V8JuN1`s&Zz7{HA~=yNi5qJ!LmU%pvS7ju7+ zg~!cp*&7RAw%CUe_|Iep7-lVzq0}jQg5`znMd=774&f#lQvr;I8?dEOozOjlX`O@; zXbT3FSGWCNz3;C7;$c*nF?Sl{ry@_)H|Y*~psM{oqNoJ| zjOBs*afMY7%iDo)7EGWPdYp3Uarq9z>h<>pCVxaO14-OVbLe-8B-uNHt~7_b4y4io zv-6)^;OK=m#-sj44|`8k->GPt+lO#+@b*|2Q*Lx)^WNLsrcu%3*Fe0z7z3Hf{!T6Hw=6Qd=SHc`7un~7Fw$W@P zbM&L!7c54_tabrS0rEX=a|Qj3dgvxF&1lGnYP$^7oQ*u&=#Vh&t8)(l=`_LxYy5Zj zYEw2;3z5UfZ)a8bEgh+j^>_D5Nh1@orP2(Okvsq9*@=qDuyqJJZT3Gxo2}Yid_>vcNpY0TXx_XWLU%L3A3sip@q7QQ&2To9 zLyx5C)msLNifFVYH+I<01^Kki6iNUYE0jUa5o;wTBCK-JtJmp72u~GJ3#1#jqjJ$t zay}KWxR7Z0k$^=>qSZcR$PX#0VfD> z>A-+@87Q!H&&84S-<6kr{>b$DnL$Mv1>%{$-Q^xJEG`m>&7j~bhO zA5K@zPJ~Szd7FOU^$(4eQ@(H0GvZ;00U4mNsVv8slvJvJV(w8v6J6wqJ6K)+1Tk`m3!kIY08Ww*%ayJeQQRvBRTkVdh!4PY#DxDkFul+9B7I{S|g zHPQP&i~te*p>fx0|H&%E9;rnxKYg+Uh?Gj8m>3>K8I*8DIQlV~B^O1pwWb||XW@w$ zAONQnyv=DBX&0Ov%<99N+)j{De;))tF=_p9`wS98QIBqAQZY3LUF?`rdXrGX3S=uFSwFr^G!`` zHfu_r(~O!L`PO|XKa#h~!a(*51+Kguv_%<5{d?9o1;MhgjQ`Be1T};Kww9|9w&K!X|6CVqd5n|W<72TNAi{7 z09*#zd|IJkl~nTDo6C->(DyrM=c2>w*d@u)+o7qHSx08?3^VqjF9``$4ABYJ#>BZU zn!CKHGjWSf1aIF)mS?H!EF|wR5RbJ_pJXH}qLT$OR4a<>n>bO0_+PCAdiQ@G1p+1a zJu&mul<35isBv&%t*c>@yM`>Vr@x&8Nf9KRy%PhOeEe3!IZ#Er_^PH8=FCw93l^H9 zRPrMXF`e3?NMi+%*jTN{NLd{J!uvo;ab#T**JPr7Pmj{-T9$ZIriokb!-Rc#s;To1 z2F(Cu_F|yp4I!kMR~_DPor!1}S2OT-{!xzu0Tq8%;OCdrX`tTN21}TaV%p68{K!x7 zCGdMr^RjkFdIb}s-3ua- zjKc7i&(wTDJMZ@}OqPq!TUdLq_Sw_(B;NlXA{NS0EnA)82tZE3Sk8;yFHdw!j4PNt zL{amOtD+hKbyrH#s(|d!RJ%s}UZMqbw3#Mw8OGpkg9{=1$8Z4nUb%}jF)ga;vMliX z(3P{Wqr|MhLXlq6v4`Ww)Pe0h(rEBUie{CYG()}zN(G^p)T(>*XcfXH44J~{t@6C8 z4HFYGC9Y>qHopn23deQ*qgh$w!++w?=XN**NOW45LrGN-^h% z<2-PE-*`3`L$bk>Mqt|%YN_N4rvAiC!8<}Ny4bxP~uM93*yufLb(X$p;Q1cCde>guYZ&EVNeQF``I^fpMB_siZS-b z=C&jz70?iG(QE=43^_6uQ->yoFgoL3h+dhG&#i31BG4@u1e8K_dkyTNA%fUqt4}S^ z8pCwQod4t-f>4+6|KS!{ma&!-QCun`zhsf|X`YtvIfM zhL7=l6eB_4)kr0yW_b>+Zct50De(KMGA6qc99MG`4c@7S9vPA{<%0d4JTl}!Bgp|? zb%3uH(qc)NNK20XuN_>Df~S_ZGbIV|B4Nsw8O;Zk#jkin;Rw~+lvo`I|0n3M{g1-R zW+$3nk2JjTPL5yxKZ^fX5M(F!$rsVd*t%f%rPS~2Fz)7RlK}z~#-%%K1-b_Wb)sxY z*%5!_s2&hgxRWW#LfH`&XXlJfXSxyYvaoC4&h;*519#2aWz5Fa&p1`0YCjh=aq6dNn#YII7yI zyOX<@cQ#D+&`>YR)+hm^P4bMk-Z%FFpVR?P|BIZ-5FFoskUq)WEUD+&eA$6I3<=Cr z{|BJKs{h#qhyrVb08GgUEP|BK%s|2f*WFCvF9p0e9YWyu@OLsou3PfaUJzVBhQw79 z_K#SE?3A5$ZYvD9>k&W&@%ihP1DFPlUGC|A{~T3cFQdIgCFV14>df=1YzA6o0=I{s ze5~q;rIqa%CRaoa!3V#0o0VnHN-IZe9Y;V5>yha;GYTJwJQOO=XV~2syoM?jC9{no z_NvO|9350uF)%a%sL(UW5ab3i^-2lTlpj+-fmoM9uyz_|rx>!NG3BomeD8NczMF>Y z-LR|VUqPRz7eppsO7-7Bd20;eo5mkZ{hmK$_32*{Zz%j@PFemzO%W4*=MO1u|zH0hDQDKr#AIpbV`zo>w#M*e+ zg;<#`6qGgIzKXKC%aHIkl=dQ^qGz~Mg!Ut#DB^CO&d>A|B$!H)bypYyreBa2x;*>f z=-d zGYFTOTw!gz+c7?M#%40}h0aRSEnjBu!rA6juioS^OhDg&g+vkPHH3HSIEFl5#dj*@ zaDUr*4rom*=jg?tAVE51FM=-_0f-&2>U=kwE7ZtBt2@Lz`@ytSZI;@B5^FE{2E*j` z+Oa`r5?taYt9h&+FLn0#6pt>cY4m3fm9W(0Qbc^bI3awmB zwSMa0!f1k}MJ~^u&+xMQq@^G;@^ctIZ%Fl9swu(-P0>Hp75?tWWl5 zz#E|qus1Xa!h@wSy)i6D3VBNChLtcnD=aEa)!)4;+AFx)#ahG8B# zK*YE{sPG2DvsBJ;Ig-aoZr)BT`;M`F>~0?yj<^2>JA+c=;WQPXNo&B$dmU*YLy^fr zds`B2%Vc8Rt*i45fHrmXc6GrUN}iMUS*mg~($0>DeB^gbjC;=wU|AQH3jmW$0JxrQ z<1i2;<%~_sVZR0R886lKeD=xa*Xq+mN3#K^6M* z{RW)eZ#Ee?NzPZf37p75r3VhLE>S#w7-zj4nvTTxC!J=K%mxeb`M^kZgnjcaCfZ3N z{KZ)M2%#O_!b?`h!{D&W^wU!o0!Ts|U2&NTQ)2*ZRwk0wS=-MBn zF#Z9+V(Wtbt8r{KDB^nG5-P)~DzRr}(SWt>kH~9i7|Ngdp6d#1L3!<{E$EImw7Dfj zd6l!99+(TP&yr=+I2c{_++oBES&OtbC}?UXt0rTATZ6si24ixfv;+?!{sz6$1eCO5 zFtZ?A0+Ylm^q0QlSxBqOm~!_~tyda%B*`t({*I8p^vK!61AYUj6%469eafcF%Jb0| z-pt2JuNx)I$C5UWth-j;;SYq7{LbcypSJ#ifG0ynApJaWWzz20QQ;VdQ%rNEN< z=4Qu>py_XsIPaOBv>quA`|w9j&)B$SR8<$c$*-i0z4!ZzdKN2Ub>2_&tAd`EAnM z%MaBbCfM0HQwca0D&*vGP@7pxAZ}KhZSyV0^C1CF(g&*1J|2ZV-51=dfjIt=(Okea z!sL3H`+}$FFI|}nNg7>{rtWFR#j46sQ0Rpf-9)Cr zzO$&DT8zM5>@`4rDoKYQ>Joo5n8|oRs!4=!K1N4f=?y%(4O@6RoSiI(haF!(dNlAp z?#a8VNBx84Gyjc?uI}|N`7pR*cA`GITX^`%+sn@_M;>$qRMy^Fb#B#94p9gBshAas zq-7kpCV?9W!r~N_6Vlb+uZ<+31U+LnB>&|AxQ&IVpyp$fo3_?uY)5*knu!K2RZ`Kn zM~%~%W|At_2|Hj)wH(LKij$Rq_9i8hG)KI*$gOvTD?P@RqYJ3h&F0Gm>b_JpjK09r zComdvZ_ZsWucD~1viD=0iCX^a_>0e|LOtuF+8X^5xBPl7`+T_2IY zVkoItTB}eqL!~kBjfo{|OY|V_5m2rg<1Qk&R%U4wpEF7i2?88SSy@f%VQWP9 zi=c;n0fQk=LK;FEE@!%RrALE?zYfguvOMqg~8C zHrNX+EYq&np(41w4jWnLH1%V5Bw&ZR3yq95C&nN562BzUMB?C*fCcSnikN7=_v}RJ zBxl`$qDOn>QI>ac{8=INTJ-vvX!N!J#B2YssP$GoQ~q!HKkZ+z0?BDez3k`^-;0Mx zK87mYKqiSr_rDAXksb_AWHcEaQe-m3w!%6_^2n~UYIWyRl&CQU@uhsfIQxW7FNV>_ z%k68F>C1-6Ua0UEs|<%Lp2G-#_-SH|dAV2gU+*u!k*}%|yhU?B*vWzChTWJ2@^3QW zlfrrJp2HzsZ@b=hII?P1W?&CZ~3 z2U?f9ugh$hISzVQESXuSUB9soxLO{A*)606m(H@h9q%%?!gatLGa!!fKg)1cWG!?z zG&gMX$S#Syci(k=;nC~8BEPT)s@Y%19X(n*eyHi8>GpcOMYgD zJD}Mg6GYyUFrJ3WJF#IQfBKQUn#Zg>)$}zAp^aN3Q$Gw$COsFkRxjW&t0LM4B6<#v z!=86f55uSvn?)f%Rsjb;Jjrb9-cEW~f(&+^+w5jcoRUF4Wb42^6oh*~|C9C?L?UG( ze^dAmMk2cnGkUfTc-+Mes4)iKb{zRDx*NpiGg0gRY<-(b zB5$h(Zik*OfC?P01vBA*s?+*o)R?2Q7-kDDN*piLS>r1mCsV^ev1livp%tfsjzC(D z5p2_&ZC>7EFCqT5ffcw9*Ph6G^#qT{$d`9@1>c(pXprM_7LK*<5Md*8C}|=s`ML-0 zA69;ShS6=IjB?G^f%08Y_2}E{dOoBgv!9RoOmkb0VS^lk8AUTKoqo7ZMvFtRPLirT#}Ch9H?qdAvJ5V;YLGCP=Qh)ckxq8}=xb+NnC2~* zo3>x#29FkAf%i0Wx3$?f7gqYdm-C^o9+OAfywgsli#LcJ zDUOIU5&)<^f-+HQ@sqQhh{3mO%vXlZ#k}*VifX9oMwQ0w_>#HE23PZ{nz8ruz;8#_ zPFvdecMeyuE@XM|8ZR& zn)v9*lh9~PoeqtzLdV;E=wJ=@xxcu=0#HY1t%R6^a~66n*a#7rX`$&0 zf(XZ+T4EF1er@&i3UnW#!|ND7 z`kQq@LWS@{R`{!)3cTo74ba7X(Kdsy$Mi1IL76Waw|achcL^z=4$&)e|q{3g1;deE9-C=%gq+)T64pzx7UuQ8G`SQ6}g11Fx%nzcfxmNFUK*9BoB;oMs%J)$!$AkS<*N~lY4I+g;XQWtZY|g2a+)yWUj&A zSF7Se-in-nxV+;z#a7;>mouo%Yu8z@c9foiu&j)+Fb;SZxM|rT9u-gZ({pUY)-pS? z6mkrwQ!HUmCpN|c)G4~;evZ9Lvkzcs4kN07$wa8Eq0)eO*(A;T5P)Q67B|AQzyQuZ zsN5%_;q8(u?WmawZyi{7WhDGvcIe2NX*`6#>n^A3r|5e7fit6i4G7mRe?5dLHmS`R zU%Mbb5=2LdU+d9)@Jv{{n?I8VzCEgt+k;5%OLDebFx|iB19SCg@M_s}nzGVM7iq;f zB=I*pnJiKTHy}(6W37s4`WZOaLJ{uU5&JnIWu7DS909S3S>}a01E&QF5%!vkH!SP< zft)!O#EE~?7Jf8OU|gZmRn#TRV5vfn`6buM%P7 zCOM{MdJ$XU`0)f`F!o0q+xS^w3jm;R3qX516CdkLau0TWUHLpX^a<6cL47B5fo#tZ zvaKF`s|-{%$t@@Ueey}`U8sCzUv1Js|Ine3A^#EUy^w=LL*_<`mti0OvX*&O{hbK|}fHLicm z-BZmDh&xJ}3n=^Q&&8-SN9XaUdlO@&KgFag1drnMGf@QAh;KX1l0a?4N^WUPP1zmf zy3BMphohEGS$hY}#R6uUghJ8BOf#pn;ub8W9`Ho_>m-Bf%hnF$gRr@sP=lo21|s3~3~!%%TF zE5Qc^N^nxD?|6v}m41G8>`z$jQN2aHRXX~pslsCggLBl_S^DW(nAfQ^MZDEBKG|G862APQ%6x~&cQ3pV(=W%u zX~e2u-nG~vO4vW<44{W%y>GD;4#w0#`sWnsbH=ig3X=9VTW)`nsk2Zr$R(-H8vPe( zEnqQdnunB1GT++A7kIIOH}9L&QfZbc$JKymHz}J^gFA3}zCdcAV_8v>GEvbNbvjLdD&F!eH$?{{L&wX>fAq3(?p z=Z~23T}Fgt2hIAfQpFgsE0HV)sbVLFh^{||SV?iU83`0ydScpBCwa}5b2#6e$X#*O-TCE9XfaA)F*}t$(q2{Gf-L|GLuY6`EDF++^|M~G^ zn-gam-WGqoEca}}NcHps=6xFO9ap71zAjC8!V0xWEPiz!kk56WN#kPEvmHOQ2GaQ8 zxLHkso0Ma%<;5Gf0CD$Paf>iMao9a+Ir)Zi8D(_s_ zYA1y{@2z~SaIo3L*T>B9Zv{#ixwu)~L1lplw(ZvPk6~OE>1gfK)=_^7cZk$&9UbzY z5dQ7`tyX#kME)rBAL#tc$$h=%cSD&ju#o6tVcPJhSZt@bw28O^#Kf?L#AcG?ch%Hk zQ6&mYjtfOSlMH)>+A?cm=k1*&aD3WSs36g9`-Lnp`1-7OIB8n)ya)g+Khxt<8x`I@ z=;{t)5CCHr`xqYtXH+{7(S2|X=8~avl>-B+-h(x0FOTdf`{t$!KeXq}bA~f~c~@k` zMxfKP6F%8{^FVT5@QyKTXQe5W4?~}{&P@Tw zr4R$Gjv=qWQz)I*{0Th3iwQ z?ma9RKP$V(X9^V-GVnM1Prt=_QzZIq{qGbsh;H=(gAODBRoc%jC+~^=RkL(U^^u=R z_8#izsho8fAmYjIHQx@dmaIJTV**d3hfZFmxZYm)_9Ti|$|=Q5#4Ld#w?#~p;ImRB zWMqnqi&BY`FHx?W1lL54@~bdGSx;+23_9(BiQ)Jjd=()1su48IX2On#eKWeY*tV2f z03wKLN1??NyaEDUGGuxoj3|_-;L0>zxsme-{C@}78t2Fv*~hUA?XkSY-&DDL!qXM~ z3aHX3CqnR+kjFKMgtYm{rqFnLDeLk8Q9LO=&Xs>HoS0JmaEjow(9B48MKu!WTABjR zFn+eqUI`BsJ%>RBhwP37P{4WY8Rp*KP!qK|#M?KRkSSH*w(3D|5vSn6np4pKS{U~> z0tsg5Tkxcmu;X^7Jd{p4NF*V1+Jq$!zY@U-qEItIt-$9Y_VFPBrF-S!Mj^YD0Nqlv zdM3jB#24K}_%JjES#v$}(9zMBcu;GxrjC7@`N?=Y<*bsl3^8P8Maas=dSEj5tAK{_ zxo=;nnLyFn0t3WS?)g!Q zVy#rJ2eAuOlK9>vS(gi@TgKc$xzBH>leT3^J?9#qR+pC5_@1avXgT^mx_0GxaP&8b zIDqvAX9$91oSM-5_m7Tt?cXYrw{AT=-aY#=sU?JzD3nj61&XAXfS|k-BuC+x!xtsX zyGfi{X+lWB314gArHkML<(q=u#a=YP5N+%M;l1dNXk++e5wf|=4#SO+wN6xEV`KfoqjB z8iS}sdz!IF`S}Rw`uz?{3@O^^AzZA2Q+p3%1R9&^Vf*_k9Htn;QN1T z7=W%df10glV&>HkhYef4y&t4{0Ev5Ex{ALrHn z6DLNG4^sAzgD*ESFVdnDC}s;cH+;{`_C5F(bQPuD`apvYI8P#qmwY`5u}uWy++pL|O;BaA?_=zlX5)qJ{W*Dn}?%8&=O@bD>SV&IU&DMHce zT3a;AV2NT_IFGP#s({KcU|fW?$R71MN~0Yl3;@CSdy^8GsB)#!0dFy>oHi0d$Si!> zRS8pp9}P-gmk{0IHHjKg7^IFJ`08oM;_IXr$3pGSo_~OVS4~XpRFRRd-{J)O$<@}F zUSR*blS1wbqClfw23*au(%Bm~fAyx&20wkN_w(7Hs)f5=agOkH`su&GfHMKj4bYjd z5`jmw8T^OJrwn=Byfl<%5E24D(-^pkO449aUdGXl;2n9GE=_14r1;bR8QpPBHI_J7 zD%<>X!DC-Tx({=4v=ZUWO5hNI)^~)PRYpdJc+&m1Us=IV`Uth?HJ4zd{(lgGxUC50 zkcclu9rV0Di!5H{uhINgLPE{i;|lB!=?sjhE>)%WVclW1D0s^RKo|?$PwU>LQ~zU;*T0X>uG&YxHx?Uu<12`Gu{mj-i2PjGmMZ7{yXx`^ zYcFSsA4)V1&`}H2Q4#_shL6w*W&tgFh!_9Xx0(eOZMrr%@-AQ4oq=EjA+s+bkw_=A(>Z>@ehcwABIwf*qB#Edoyk2Lvzx ziLqQpfu|lip62e~#oe!@osqkT=Zbq|=LWOn%<~H$W~PpL^K@AHSWsg}O{_VVvillu zujZy0=Uv?H=u|;&xQo7Oe&Pk%ANP7TA30L&hke-)8gu5i(9q>qn^(`Zhk{SEE=M*H zDZttmbhUIO?EJHdOGRSvjkT$UX|r zOs_S^PdutxB%4<7Ff;ujTsS`jlvtSP|mxAX@cBA3vaFy`6Ifm%GmJcv#@6fiyQTtV8l$9DhdE=kjJmMIy16D zu8aGOc3=pekk8IA+Htf)FMa|3LF&xEvuh5Ft071w_7z8_423491t@v4-$SGEH6o0> zg(BJ+je*M|kgTI-2BrjXHAeHIdH4~zd+>~uPY3xyrknn)=TK;PvqJ7d+->};?zH4B z=%R}zr&@zD)1Cg7jUza#m&$UuW!ar&*|;Wm{7N(1)Me~nrB2$EWvXv}DH$c!oD_c2 zR3tFKHM4-6O`^}RM8>QF5Y?RhG(F~NvVcZ`0oc^gBsk9fDn?{wpk4E_f>}^@g&1y~ zS-`+M(usD&pj)huwp!9PylWWMpgi5Wyjan27n)|;?yy81EA_^v=YL*$A@;=57nq-m z5=rFrom(EFXYv1dG)d$e@R zyCtW4iBwMNi`K!LGR^b?)mRY6tjZ1_qg_8;<8jGHz`F!z+SEZ7EM2uG12sy~U|Fy6 zbiC`*Y`nLoHd=?J6pSUp+QiK_4r$?B`H_GigNXs_P3j# zgr|wwFTZY||694xPBCHMxCv%hc&=O_nTiES3Zwf~^N|hhN-uNNO!s*xs^cx(;nR^S z)uA!!lzD)sqaRTf{jf1`a8sdkBI6`f4}Qb}-cR_x-A_{n~I7xd%8 zVb7I=KM1YSKefQ*CYol2gxO2G+*2_sE%_k+O$M87rHk*@8nrzQ|EC$ds*d$DK^)M+3 zu0b`hjJDBuskRDQBFT-)pug6=buss%Y5Lmc>G+azw2Ww8qjH3iQhLYT+&!>5*|0NA zSMp<&M9ph=?m5WP-!G+|@Ew||l#x{Q1Dpm_7hK11TeyzW)7M#8>n|9w5`0FWDf*tbOZ=anNL^aR=Kr63NWR#CSK zi=Uwu0@2B)rkQvnqF>;C7}w14^Yr*~FfIo;lbAkb{{z3zlRk5}mK2+>T-iVFUb(Oz z%m4}1(93S~lQa_c{S@swo>4i7BG(Yq5V`%duu`G8Dl+Ew5V*xGKz~MCR_j})v8c#s zZRWAOMCRar+OR)^6^wPsK-Po4zG!%7qq0I0Q2`1H$%be*dbut_l)c?dfj{FFj^lNW zO?tCjV;|7Nq#vt4LSBENUi$Kq!P0Y%U}2V+vZ&SQx}~?UaKKng&-)(*H9wyMsG9G; z=f+KP;3j!Ucx?UD0cpR)SXCj}#feBFpqh2M8k@kC;DY}r24#zwrZJQhVj!E0TuH|ePWMK>{?9TL@iM+GbVN9jGU7YCdY5E< zJ^7$%NRH~&V#E%hpL;f2O8$IHioFn^ScbqnfGH*odJFsux`CiD>p-o_Q?sfO4bnC% z`XQvy>_taoFar<_xB0ai36cdfmp>PjeL9YE-xUR(EqWLQ>g3;R3|clD)llMzDMdLd zg?9p;?Bj_M+n7|16_3hvaRi2i_Aw5?=t1c{auTX%6CF~oh&!x&UeGP3IP$~(ahXb2 zQABSYuJ}WvL%X!szkeNUX=neDFQfnc=+yL+^5)g^ca}zQWBXCUe;3bMGE~psne7UR z{_28+zo@x|NTF)I>6&Jzv|o}aY#gQ00ikzMNP<#81YEG>B6@-S%`Nonq=PJZ z>|(i?An`w-f^2pGAYmHQb*vOdQD4Yp8lwpB;Mr&I02Ch8kaAXb25>8B*7D+$)wpp| zBM9#S)!SpmeHLytjcGToZ4Liy>;dxDfANa@8>#$Ruz?n*?tJ!g!3pz)IZ>aE+q+)}Z8TFt9DEN{zNpzI z*%T3sS9j6)#!}j5$X`YCkUanVWA-Y>Ql{xxIY>q(FZn-}nRb~^UV8sJ&JwDYMFnh`G$xlmX;m={Y3JieN>UyoWS>Y-6)L(u58Bm_P}lpn?CP zG~gNNU{@2RgZ)dMVz6AXZHe|alk-tA8qFs5R#y}nkl1}Jzd}Ec3jr9xV5&6*!Su6` zAL=Z3w(srcBY>xkt9s5zif@lxq%=-z*?Wmslb|!5XS?7$Ss%tAPA#%x-$IA8C zJ2d4szs1JtpW2}v3%Xx%R&D7C&Z=i~MI=@Ct~p_6)k~-2>eNc7Q;7xr7tCfW%;tQ1 z1_e%pU&O`iY#m&Ro6JwTmG}Ohm8l9EVTi&_(6LCq1}(h}Zb5prW5`8u74koGi6=;T z5m0f^9hml#b?-|0t2uoWiY|43vC7v6xnjqm-qQ**zFENe%p7yDn zVye~gGi#^>MH%s3{Y`MZe8bK?B2AfEVqO$Az$L?#-RKxQ<1=ja7AOx9_NPq7ArU(1 zN}*8ElJmL1j$Vd7##NrAlIRu^`&Vs|2>sr}DC8C0&JTS0QO?H&m>yHj2HAcNN(4%t zRA40%zwIc;;NarlAuJhB2Kt49zeq(ff^$;iwtQMjz_zx-2=1Zh07Euv%)3t3aGIP0 zhAeP5SKqtNP)XFxZ2F?>_l*GGG&Df3ZB)>g`t8Q8?A=@1ANf!Iz1(S-mkUR6=CGgy z70jg3gzLD1mH$6II+McHv**{444ITX-HGO6z%>vFK{;6_bL|;Jug}iZr9}tMyrrbi)XSC$(JAEbX@nKP~_tqRfm}c+v(?Upv@nb+P z%nv&6X_w^s*gx#?(6bQAEaY^SyDn=H_Xf z&`U}G633^vQE>?EQS>uMA!4RlNQ88K^vF=`?vtSF$oyL9tJ2skcby*&6$qS@|c($oOtrF zhYR#u)Rx%hInzIB+yt=#$;a$Y&k(c|sf;uCkkpWjN?r<&uG1>hdKDjEx73+0NGO|* zhh^UVQT%Rl?W>tXoL6LQCufQ!!{PV>*>yy_L7VNnN1S9z#Zi0_7F~z3BPdF9g%1yD zfOZ1D$*MKiH%B|BE@xuMqj^suz_C&&G#dzpr!$t6dklsUU=$owlfeu~3fYsckV9j7 z5fZG99~aI&L@{;bZ=vL>&3$>E7?BZ!l_hotMT1a?=)jc&Hw+21%<+mdE5JPW6(eNs zZ2;2g9&s4|_H%(XIv&w+c%YrM>PH6-$AAc^IatX!C@6f)oudks3QI)O;NY4!Is6rL7n zwf=~amzW-Pq;gp!GETJs$pxgHikRmLia!hv!{;3-?MC5ynd|t#K_ex4nNFGyL*8P2 z3SWCv1AAB?DUN%-uHt+R9MH8Lo*7FBHawMGy8&9eKDW>;BV8)*dr%1eRv&Rk!{g4W zltngv+4!H&)E6FjL0yhidbTn-SLJ03|9BQ3X5XkaBr`1uo8Cv+gQ3mt#3_3|E?9T~ z)I|AZ#5Dt4ovbhEycMe|euy|$Ylt&IggC_;#PKb_MN^CnQ0UtF5~k(@#Rv9}f=l32 zDPP$FOHb*c0DSpE%Hx7TAqIw+hE$jkEdRr?S~Nte1WD8S{M|o696E|!W@Eb3RkPsMGmjvUF3~X{-%A{XPx*XEq_`NF(15^vQ8=MbKUsR-!;4DO?AO<)p zI1?W%0uD|9cv^U01j{0-@WD{H?y55^l!9X{I#&9Sr9Tf22>OWFj%Xg-{y^X|1+b{z zb!;y)qb-&vP9TGhqliqoV6{>;E;-(k)b&08rVTEEoO_jW3|AkRnQNplcpntoO95 z=6?&V6_?lzE(6D^TxcfLL}=ktChA}_3SiBaOBn#+{8H{uQZdF#qVl!oyNKI1xXFi@ zN>Pem)aO>S^33a{WOdf7eq-6F#Wfh6p7NjnNBj8miG5L4iHay06;W*P4DpJqW7~U* z;7jo>ux*s+Qa8=h*35+O%g#vz9pa*~%am0vE7#ATjzMmBWD!iM}&C^~b-S z#k1@iuX>1!AEJCVg}^*BGl;{?TS8oA6I$e$69b-xZ|BX`feBy*y1FV!=vly@AOIPp z9b`!Gu?~DCM{kPBfVMKv&tj4z6AZT`!ic4KQkclB2G^7U^`JWyQ9GxB3 z&0{Y!VZhJ-iI4;pmuP+V$~qJ*()0j8m=)4_2u)nm#0X2%kz(f@Mt_`xwFjHL1pbOz z;4?g13)vTOoD#bYsuo=7S|B>GIKWmr*H-B$N9#v4H>g-pDd_zkef@3(e217&I~^{z zSmZLMTWH~4ekEDg5rbh}@ykzBWN97X0EV?Q7HoaQJARAit<(0dMOmO|3aFgF;uplE z5-?0gj9Z-EE=Lpp)3j0T(k*|6CbztO;jD_urRT0uyE~S==xv7u2%*AiEptRg_Q<8) ze~;zYDn&a=jVybu9DA*qcx%lB>*4nij1^q!v`RMvR;~T%vNHV>bRSJ&gU^=)$C>G4 zKsk&F?oA^);7piPeR&*l!ekHu;T5^^RLb z7A5ek!f|-QoWQ;hG6Bwj8XfHEGEfhte&rTHG zZtpm@E~cbozR0e~IDj54^1)RJ2U(U}y{x#dl6i&=SEHXNCfE{#n0sR&<2FZEJ_@NQ zyR>CxNQ{osEASStU4$}+i8t03(>wKe$W(oEyTH^=BdT}Hlb|iJsT$HW)Lomv(rt$0 zt|~Eq%Y6<3Cc&gZ^D5STlnR*Gm%dyPu!xzrkF?WJKXt|bH;K{}P|W@;0@&76hPTLCMleL@vKRg*Ly(IJ%b@h)O7mnrEZ}@GaQJ z7>frenCIDm`2bJ>W5mx6?|cg1;R~|C;8}4x$Z%vS@qM-b^jDb!WSTDhCHDUG^51Rj zkGI`b&A#McerYhn1o%1CLqY>IlLmq;l3+dVzkjw8y*wU0|9}|owF_mwvF7hzM}WzW zVcfauAwedB{SRH_?+OaFn?NXSGr5(7xn~z`*|W^XSHoUI{15}QXD5yZyF;st zEo=Dkb4SrYr*)l=qCa+2iU^R7FkmUF1?pCzBZ=8AF4rnO%Z!(fyP~*ZN|QI}$R-!7 zs09YD-IMB|8G!BEXbt}fQ?rk5&;vrx#cHhAi=t=CZSAzuY_yGteKyB?b-(EA9msRP zPilT%BS|Qf6nP51P4HcqU}qpejg;Y79DrAOqj|bUc{PUx8bGy7#ROSJzY4w$X2&Pe zNio5(0fEgyL8qr6^-$&VF|WA5+6@7LQd>{zCCkdriwEe=bd@aZyHOnw*rJ@w$ju#0 zPtD8fLy#CE1b-f#+oCufJaBhFn6yvuDB{=9Zw;SJn|_UZ39sxZ%K97 z`fMX>t}vRHtG!EG-CEPS<2g^jd(M0H38*P_TWJ5Cinj{q*p^pYn%?wmgJn4XsA!X~ zpK$K_gJU7tgPPXr)_Y}<>K296&F?&y9Xv@UXZq*0q<0`X+bE7a{+X}lvA9Rk?gebDULU5l*JN0EIQ@81O2w+*_R%+Ee} z|0cq|jZx$~U4C_GiqpRwVSjgUG1$^}z`gf$nd?iI{2nDm%L7ponWxO;D~6zfd!0Iy)*xUm$I@ievT9o#Z;MCfDA z5D+;e;k`(;MAafQm<4eNORF6(J?(Jf(yG|)NdsaHF34GK9b1OSKytgch1QTrk76i- zyqtm0hFeDwZ-^@O3m0TpiCMaAk<50<4$t&EQcJw#hMVZ1NQkEl`U;I6pV$2(|JcFB zJ@B?ONVcLGm<~rpBY1xCMi`9(zprv#LD^x!?{qs%V%dOK@Zcw}YVzI(pieB}0XlN# zj|d7yMa7*o4W(q$*J(?{bS$WbyCb7AUxlTJgkkL@c)lI`(;I_=rE?ERbztinXjiS< z%u~tS1GOeCS}Wxr@W|qJ`NM|k(dgLbSlgM>1APkRcijw~n6!>iR1#a$M_gDsY97Ud z2m1OMwgU%xC#I(Q-?aBncN)y*1W_0F39YEU+4pbaENw@Y$kl<~)8x;5eNg^vhdBFt zsf}pGm1U+<^bHY9`lq&k#H%q@T^2>Yy88Ixs` z%V+PuKxD|O4Ltg+(WB57gpe;qA)xen`aeawox72(jI%HV)bDW0OOWNcT)cmL(sS9S zqMB~!&Z+TOwER#i4X32?|K6t>8He(+Kyte3;j>pR>`@%~oCBvu7s=^|7H`uFay;V_ z6w9^`XJl#1Cg%l{oDdgWMeoyu8q+k_luwgUF)))7ml6@JHDlg`-mW#17}b+VQgNk3 zh0~R}=MRQ^&?EQq-TJ8mL(}6u%W>DsT&Kh2#ZnR%HUqu=bdSko>i74QzPerBJhd1f zFJP@a$RA3u9eO|ChntesrK#yQ2=7t3P1z&6p#$zgz54ov1`}PMp2ifNdn#lq1U885 z7Z4CG3|4UmO3&C?P*}m4SxjkjXI_a4P7u*>)sED`L7gAuqinOYadiLP3aQaddAx$QV6Iv!_Y8IEiUYQ&$`?)c? z6Li&)<1M3nSd;do_Pq9gwdXmdd~AsB7Bg@;epJgwhzO5rDi=PXuX>ZF z7p+Jj`rf^oDFxP~5#} zJv&;?MPvprSa@K96Xcp^BO!%u+++c;Q`z@bGI2o@Wys_Al;)Uo|9$!Rp&)YjZt-ML z-&7X zDk1jQ)r8(i+$<&J2h~%5EQ0cF0+G(HO~gI&t3>TWCXXb zui>`P2JJd;2otV-E=cUYIw1I|a(T)IUgJ-PnhpyRG6wT(%v8E)vRWIPlnrHbIwZ&3 z1}(7ZH}p%%MHomV9bNyIV#1FNmrt&(U6%}_f(K?&damZ3nKtFOr@9#S1Fw9i=W6Db zv}Bgr{``6Lz>s=Q!`Z_w@ot>Zo8*7;!cuQIdtHCNeyQvISpQgjX=!m!%^Wc(UlD`i zSJGo|SF-w!HUFf3>i3XycCovf%AOv0Xr2yT1OtvEN32TsQx&yMW0O!UH1ZhWBkA&A zS_j{b(occ9P*K!T;QjVgB{^;%P2ztc)d$le?&wCug6#cGqhefJ{N*+76MT)UGmVY7Q9jag{+0dk>m1AF(c&^FsR`kws0Ku*vc$v%XCAX{=xw*r zmZYG&gk9q;&;VEN3O3w}9z~DG$Xl)bKQ-PGevP@69+iWY3tuUY{FWUG?Ny=JhSIqC z@Ul{A=<3c)CVNOy6Z?w~nJYgawp z2kmM`Oa}R}D2Ss=h?yhA42~%oOt9n}@1~Ryv3J{m$;ztl5%k z6dlFT9KDp|xqOKZ+h$$R9VGkBzkN=Z7(~s!ISXrkpf|FwKIR`3*rW^ za2KeyPGai^Di8K|3^EUghrw}$%K>Awoza;fV3`vG+*HayWz<3<3x-$1PaUzeOE+~ zU5@(VCv^BK*+6D}^!O~?jFjV%<;}Vuk^KQv^C<`5z)>;EGv0&ra9F7T%(kIdvE8d+ zeNbxJk)2af{g_>LOK9R@v~mrZdsYQy=-Q8_K$8{A>c0Sk`|vQ8j%y0T&Ud!clj-;r z2hQD$mTSZPG?+4$RX{W}a@+!oQ>q=kYq5QeFHzbM{*EKm%)dJJbDE~6cG?g0m~3f2 zlKNg|seV(JT4lCn=cu9#LH=HpnVU{Cp9+bzKM<7f4i#9xXyP835L37GAb-&$s97r# zA_L;S`_$cJt}mm%oU%Rc1hlc_PhI|WCvy||j&QJmt09xXz~Zg@c#hL49kTLY1ZU3g zhk}40fv5rGVqyGYd2rrfn~W)Gxlv#Yuo~cd4Oy3n>M3mmI#&ZwbB0>fEz0z|QEO&* za?m2c@JA>0Z1s?ss2*gL>{y;EF53}({{D+i!^dC0yKJdUoSw}yA($FGgqygiXA^%s ze=6W=St00Q@(9;KaZIYQJKS#@9l_{H$>B~Y`1uL_S6P7ZLK6NL|OQ1Cl+knPwN zOAZeg?kB+kGbrYiHH8T_-{qk(8a)>Fa_-*SUqE%mJXmcV*9u+kw6-sqeOFxeXmP3- zMY8h+0r+@v&1W``X3_vW&~{5=DZu`Q+oMse~#tD ztuF=s1t9(2C&R9DEjlOb6!#o7;9&J4xP06;Bzg zku5T+YNL1gZtA-9Y!CI2CNvWuO@+ir{ zu}k>Fn^FOag4|^Z(j-U-Y*lW5-iAI>_PJo2rzUoDn+D8+E=vBhx*M?kzp_WNNc9Um zOBbrGP~7?gnGX5|nz)ZjxQ@M(on947K}NL=#sQiJ-?w~S67imBZrC<3=fRoz#Iz@y zVat)dM3YE1l~BF%WrV$Z?{&Xl+kTPS9mzP`VypRcPG?ni>h8ziZ3#Oji2dO=y$jFA z7)@oj0l8krU!QB9>JK^BimiQn5?)A1{0eIYe4-zi#dq*W;5f#gGg~^_ncwxk!&qVa zHRGMT;0_wEITB>Y6F{W~n45mZtBcN3#5mD;0tE4mMA1kb&^El6*al!L$N(e7$@^ux z(uv`xJa~8?quH`2iF*j`=TnY+%p)m+49o&o>Lf_bL&^}~& zwm6}5cFj+`if(4h8drh6teoY9Xr+QSPGvWQa=-8`zZYs$#BD;jyCM!bnI#^J8V47p z(Y})M3z3%-x^LXCZd8}d&Ox6%MObrP`pEU}2AF}*F{-J}f>g~xMh1v&VR8sYwIz|J zH-?wMJEWNLbnNtUE)M2vPpjJNGL^bYp7Q9_u1v=>YDrcb(zQj%sn5?PlU#_G20egU zZT$FTCGGZ|O=aalFGDKR({WM;vY&L0{w@fMc{B0!K}f>Vd_Uzp}r(yU6!d93XS-uG*_UThRg< z2O{Glb_~n_A;>`VQto3ib02M66-@Y#&fXvV6(&;$hW%o=J5i-HxE>cFLl|~&mGD%8 zh+T&bFCp$DBfv2cT8olyi-D{#txM4t* zbl)Dbx3O}Zlg1ZNail_gIHolGkQC|t5`UcC)!S=abhoFtswdvtK*uH%9=F{ zSC_QigFoW`J4GO3pJ!`vMZW9q2RmbSx%bZX!OFwIY$^jhBM_S0^(}!1)b{{-ky3n- zgr$LsbbF~ErO=#S;;N4ZcMzc|jU@5Hf)mzQh2;;s0@yFI0ahNa{-t$+Kh$jE&7k?iEm#t@iBp|fFyG>2ge^lVK=WB}ls27{B_62!Q{={~y0AuRKT zZbJi_s0cN#J~`1kx_rSBE$*JZU0(xUvuhygc*`u39HR(A1FC+~fNbA0&tx6UI(j`8 zzoMglx~eknYx?RIP-4Begk_H7o4f`+7E$f{327x=-&kt zV0W_)ch?u#XFe78m*vtjj`C6wqED>mmkPdHNThsz;!qD-fOPUAVATQM9|1s0fM9D9 zBDNS7LRv2O%ZQmb!T&vwA9SEM9jC0FoU*4ST9KhLsT(p!AOFqm;^zX=)$lX_fBOU# z1`$Vx9HZ$@3WnL2_TW^31W7`HxrQ9<2JFi$^T%h-FLj+@II0bW_Dr zbyIa4B)7ApWkBE>6%&G-+FwlV9CT-0; znJ-Y1B%`XumcdtqW=9eQhJId^`lsd!nAOgi~>a` zS&dN@ji#pYA@rt39m`v5`@4ksDtog0{*#2&uGJ>~@;$1>8VRQ8UkEU~w9q%{vDg>t zhF!iqb?k6VaOZrv@OLDj9>!r9DMRxcqm{EJQhYtB3o0o`rIOGgA}O~M^{ylth(Smq z1HS%W-ju{sYc()t*-Lp>&7S8`GxY)xVedzPue&@4lyy6>(BN-GOxqMxS`_Afk&w@?wV*z6;ls z5+X}Y{0^dtsBcboF(G~hxlonG=p5)z;#pine1`+iN zdr-FW#s;xObo$EfE^AHJ7%7A==)J67uohZb@obg*1rZdW0()P%ne}Gqs4C$jj&yn1 zWO7jw9%azB$&l}wIq&FA=tGbd_*sES6d(~S!lRlUg%h+U4^@`7D-Wbq*-VuEKiYoP zk7}^237sel2`wFY*c(z_KQK_<`LoTidX8l$AXw3EM_PvtVmHbPvT|V&<;|eH;v+1Z z0Brv<>A=CwQ{(^3)5Gzbr$Q~3wngOz`LTtV$l9dq^t~}$OlTRbFlEe%-ov-!a4GU} z%?+V^?lmJoyga>s9)*!7dD`lolo;Q3}46eUYdhqDPJ8eO&XGhTaqpWqr~FAH;GtV{xLt z=grycrLNQEQ!m3BcdP&W=CW8!3bP_{VGmG)vjcOY-(dC)Yp#o7TUcIBalN%4m=aF> zIauXalZa=nS!JLto3iQK<@N6Rk>(q8j6j4qp&J4?Pa*}laTHiU?2yE*s6#*w1!Zn6 zXoRVUQ;kvs!{$l-Fc{crS4TKXAZ{xgf!ytYUf-k4gdX2S}xH%(7iV zWN;Rc5ZW^ih6K^9Ww0W}=v#ET0qB>CZ7~wSo+!_Nk01Z|iDYPwdXD<7H2e2*757$q zHH!`Rg>RFp`(!qamFM~A^b?dvTOH0wbd5+4i+ytSIFshELC;HZ5_7l5?UTDhZwY&j zM0zeJdm?~U*gaWsv@%Xx(Y<2135izU)qz!^dt)*)1RLbVU>k^EINCwWU@5zI(KUIv zH1ln_J0$WB@N`F$YBPZ4CBSRdT~51yG^HA*dJmz=!OLfv9hKIW&qz!=p+Yls$nV{f zdiCEO&rR=IX~kP@@ zPK}4Zn+|xl(l6-DXwT{0vikPr>(TnrgcGjz>g6*#ZqH=*MXkN**=$#am~y^yzDuh3 zdJh)Pff{jJp~YUp5WtXlL4MFo_lYW7(_<;shax39fTY$eg%3|ZP}gQHT#ulz8<9J3 zbO0fj0h^Lvg4^%duO|`1Vo?8>w$14F^k|xF)jI#%g|kh~3JnG!ZiBwF6YR1bi&N|) zSC`Lrxf6ee^iM-;zn15JW)IkeOgA>68^u83;hl#c3VPa5O@@JwCU0 zaa0CTm0QnFaQKSTTM_rA;yi*@sKW8%G>bPWt2w2W2t))|m<$x{js@{ONC@sxba(XD zWM-l)begIjt3cjNrI`RG_;XZ*55mC#JL$-!C39(x`O2EDMYfu^CwuH4DmSFIXMA~X zSB$n~;mLoC9h|&vGx@cx(MU+d zvR6lDM^}%#CRn@n%GlX2EI-R=e-pd4af=5|GBE|%Z^sB1jqqtTTWqIj1@s=o9T zNe*YV)oNuXV|2B(abYB5$^@HUSpk0~O_)v+Sq=o;5&fh?P|{!Y2<1tTC)Vr-6RUN#vFZyh4{dm}MAmAnz?sUKZM@NB*|6Hi9*bg2W8>%v_MP~0jfxAV;I zGo%S^XlT=&@mI%uPY6Muyfs)QeLu?<+Q8Pop5s=j4G+Jb%U1K28;P3@S9C`+x(a^! z{_&#KlP)V#UvXwW8!z&^9T<(VfCF);Mz z?w!6!LLD#3(}H`{B4cbKCVv8jvvj4{rXu;h&8Tia}w!@`$q z7MCNZJkrNKj&O=%Qc3kj6I`h zB_e#`L4A7;C4=ShML}Dc1{kd8ouhAt?oVRrJJZ`cc4}+$Za@`&z!QD z+4xbS;q@jPtiC1wM)Bv6Z;gb+JI{res*K{#^^A-xGyuc0vFC>(&Uf~t_dT>ejrCtX z{T0WyAOXCHZ9!-&c6ejC(86VfhWPDmRPP+Y&<~@7Mo|4^NXJ!gL33`2zjT*mN31x1 z`>3tZnL!{E?=IxOgQeJf*(+FFR9=<1s&Ww~#69CDnSyZ5EP;H$+fCE zD)*zeW`OJ=tG{LmsFx7Et%EbY=8EP*HAO<7@!WK9Ogd=u0lAVOh4Ak(wq<;gXw9~s zu=#nWv32}i_6wVzLt|p8Zka7jNSQ-+>6!5=Bi|E(KiMc$C~3SqJNIy?@Qk=~-0Z~) zWc-G@AZ!)dx~NLxQe!+9P$Nhcl%UVUF8f{SesTnZRE{7anw`MzcBxqY2vyAC?&Im~ zk>o_0O-!ob1?1&Rqg6%wkuXNAc21@wEOy3$;7m!;^-?MOq?L*Q5s3p$i~~Xbh-=(a zalNOa#}B&Ve?cF{cgD&zoZ;Gw^8=anc0y*u#l5TNci*)xt9dm0c5!)*(PmpVQabq} zrnO{ppsAVMG~X$*d9wXcc(#SOz!0vp7<>}{>!lhk*KP*^0r;xlR!)UYKNnL>06McoEsuRDndnx3}%6B zza*#z>g4^FcvMw}e1J0B{?c4ALc|kvj1y%*&L$CUeu;nyBkyx`Fuw%qo9&<}PBbbIp$c{OkeWoYsINBM%Lb6?G^z63}zDBKn&#~c_@wb#gM_UrA(4j@}XU7x-h-1cH zKomF>QO4sx2*Z(TiXKx|1@?}_ihIx#&_xq*RRPHnLfV8?11dP!I+7-&bOOGe_ojS0M?N2&3R$udw2Y;Vhzq} zXOBih)Zk#u8UDmW^+_NGb&Ik}QF=kb{=bB@Hau?r5IV4yeacDoq_6VHU=r||keM=h z+Wvv;vSE8Hwuxm6Mr_Q!fJ`(QVGWyDFLUB;}F-jL}KygQA%QbspEQOod%5 zed2nidyIeFbd zY`a8KVpp>In~Kh^sCBHcA{Y}&Jj%swvck9srUsss^k}d7Jy5>X45Vbut88^bT_&>X>fUu_?hAtj5F7*hr-YI6j5f+ zclL=TF?&~A?(l!#R`YZ8H=R8=lreL06O1$2Hw-TX3Aap#&Yi4Gp{`mA2AB6P5UGhH{^JekBGA!n8T&1TNJFmH{RTO5z zTCT+|aOgm$QQx2NsuC37roJ`7jL|0<6xBxY2RKT14nEcH{Ko2Kea+PuolCiq9& zz*7e(ACx|`)naQ2fJ)TFT*px1fI>s)!ob%nbJyEi`873*FVt4zIaNqtCT8$R%kFUH zadZbrs9^hf3Vy~cJro`t!F{ z3|Ltoy|vji%}-ygzrzN`I8SInl6w`PLZJH7PQZ0lk;%*wDU{ZBlE#y;c?72K;XR_H zlM|4;4#qqZU0+05m)kq!&RjUXrBETYD+mr|%$-sh%gM!ac7A1(MKP^~HlK|2luS%t zcQ-q19AIecs`;iu(%My1rVsMq!^L$Y&MmYZ=Xok+;ZifEmLRD=h{KB$_65={5I!Sz zi0}yHAOLlnMxqZSu}o{hPbjic4{9S(upJwpa#W`|J2X{t0x%=1gt$im2#y=r5ZtIq zax{V%r&@Gbx-euu9J=VnfKuxc>yoA-Tn~kx=^Qxr0g*ruojtIJTU_`WwRy2-JXxN8DN(`@1rR*cLI!Yq^hsk;ol|L4f+<{b2!YDs zyC2=H!b;N~Mw4Nd{{^!t5fgpa!tcM_tqD9*esywcX)(;Emte-IC%}yj-;~;XQuZe! z>So~y@$V%I-izUt?3r5P9VIzSk}cidtwf}Os$`q=Os zis?qAo67T3X@*fHDSE^q0>I*j`7_>K zT3Y#-Erlsyf|;}#^Igc$^1?7SP**(JDu65E66(+{eE^PJ6=@tQn4n}4QSM1W1}n%B zakOr|&aJl@u6_P|)1{Zs9!w0x+^Ongl>O;hPF$|zle?cZoxZNhj=kv?@y}27ONgtL z?{fE=m0KU@evo9DMx5Q^OHb!-SH4UtQf$hnUDa`xjxc84L0 zVx%^0B3a7wo-5md6S|N<$T6@HN>(mRq_b;kC=@|p$4$f;4%YtY8SlVg?@_rxYeU#~ zSXqXpD8ov-C=I9})j?;{fCZm&Xt^k@gv3ZBhah6CikS*Ylf@0~B(YDlO)>i;9br^O zovloJdOE*6_ifPaGbKg6;kO~87p`Y|c0M_7(Ie|ryFpUl!$9tKSF-E5+)rg9t}$HI z4S@Tsy7lr6^IefJmIc@iJ5H%5WDJlv0udy!GVWYXqYLDE8JUNfeTA|5Dv5-toJ=jn^mj;PwZN&8|tZf-8S0mRxYP7eB$ zUT$l9PV^Y8NtZp?wQ=gWO}F4Iov{NxD6{T;C|9MzSM~zQlVGyO_bg}A3(6`NSZE!H zI!cljKs^L@KPW=?b0o_>e+X-hTFa}EV@0c;1>Mc`R&%Njzl}aDC+;sT5D{7s67JNp zXkZ}2RC6u2Z?KPF3P6r^-$4uvR5yjwNNk6@aH=jpcDsm#)Xj*KatgVegR-@TNdaH{ zOkoNm z$d)H&jA$&Psc1O0gBb*Fac({39Omx50N0#3zCfI^vz@J#Mlr9IQIkM=%1o~!V4@aSZl&TEDIm!B5 z0A~ko&vJ7`G%8o4JOoft8T8f*y66^E6xwQ7U}9*uPpLLPiW3X)+V=1%6s-Xg>L_f1 zoFk~+|Kn!K4%t(!hf>ZANlZXAK7J`# z_M@j0Z4>ZHU?AaoDM+b9;3aW>APXXnwZ;12xLm4~jYO=HyK9g; z^$%Te@R=l_;`o@2v{VKOXnliZ7bHJafSDIsd zWC23gf)FD+aGcldZFK-3%SOx_vKh7I(m^dsqlu(9J}gf8-M}h6#X*nGlv|V&mb`V8 z5GOUEjprUvj@j?W&?5Iw_7P0U;3N1Q1^wH}u;|_D5H~AFmc@_#xnR5^PU9<1xyRx} z)OX(1o-0-^)0J^4-A8T+dlcw?$kjr^Ng)czKO5KeMAnJPAtR>UJ=07FC4pU&@{E}s zZ(%)m$Cxj8E*cZ2MJ5vv{x3X$n86xK*;CCz_HLe+V~38Ch-h7IEHp2##uQzol8jT< ziD)xbuQ(*F8_xs8Tw6ip4ggrv5C%eS5Q(XRu_SCCb{dx}s*UU_!VwY@5H5lo-V3}6 zM~HB;WC_7-M4$YygvMY(vzT2s2uWHkial9Z&%_{ikRqbBwT(w+A5H;hH-iVC{+SHH z0oYh0oSq<;u;}ZNmhqksk%;RL)PA0BEW{EXekj+5HCeVHO$84M-d4sHV~lC#@@cwO zxi_dKdsXB_M}3b5OE>rrtbat5VlRqub`&Ih+dbp9-UrMVPZC}2xEM^Vn1gmG+Tp$H zR2{tqOdPFsRC*N1Tf*03|ItnYP~?>WG3dY%Y%x-*-FFF`92(|<(2?9;goxk{A92SU ziSoILvN}dd;w%jQ=%Da1v>M>8KYpj2s-q6!a)^V1Qw%PWtmDyB*vy0nAeJA?Wg+2{ zCcRBI!elHDYubtzBU^eq9sNh+qzua0iB!j;@)TM(Z=|?+n={PRIqq)F0%daZ*X0 zk|RugXJwoRaw5JLV*B0XpP&P;m3G^IHr@cFFj4~ZU)qg5n+AY@s(_U4yC^Cr#@=L% z_y6(rF7Qz2ZU1-3C;Ne^ ztit%t$?OEFlr_$sC2YKlZix+B&4e{Pv-}O<8F9nF##_hgQ3bf45WquCMp#7A;hH4wyZNjVwur_lw{-H z#&VV3=>&I@B>1bSzJANriTk^zk)pYYaPY%Z4QJ#F@O1Od7jJ)z@qKphbYJO?-YB1_ zUJL2)j2d)Xd`3En(_6MlWQWDo3?!;qBlJBZ=sOFTG&K)V;OD}@2i*9|XMyI2KF1sj z@TDlx)SY-)k|N)&?xJ!GRek+mGId%+$%TjT_ zg|w#%4&TBoYbpw+&glMvOP*W`r)bJ)gY$!lalzGsrxb|TcBNN zqg_~yS)+io7T#?7__6H0WH|_7;k!(hx{eyA#rI-GKlA=!nVAW#Kyx3?^h??B0_!fLWi8vP zk0uyIWnXl!EpQ3Pc18SiOQ-}Y0ZnRMC$qaA(?*;^oKI-u$!rgz+Hpa%e}Pb{R1`8I zGw78kvt4kpo$Zg?jERn?rwGyms^aC41Ox>!Blw^W1ZW!!0e!rwX#}PUDAn1RLKLZP zw?a%XffezXL|wh%-FYeoDn@`p+IVhny8&^#hAQTU?B#e*gsrK=@7gXMr~+Q_Os{d( z73Xi_|9hmUifR={aJ=I>_)#g7KgX0$yzTBoY+Tng_&(=D?V81dzCohZJNcR2<;W1O z12^%m8C=ExdM@d&TPf4eX_L$5ti5rjy)yTFQhpoheDPRyurEMl3wEGchKHSXG(imc>|m%@BIt$lg6$Ae zqCCsj-@NRc*y#bce&SZjnSjI+PvPmH2oc?OTTu$is0TW-iIChK&R6~fqUT9ZP z%iu}Z!q#?%8)el)e*|N8GFuda-ep7P*S_ny!9B*yaU6jG=KE;hfQ4Js5moMNBH6(?yg*+C| z-Y+qY`>0}^i!S79jPFD-M<8C{4HdS07X1WAU@c`C<)hjdaMoysK!muYHj`=)qVXH1HQ2DQ z4m&VWf6UamBU_5Q1e*YPlR?0lS950@W3L4Sk00G`MdsILuBSMj6&c};ycK2Upu8yC zeL_Y;vz<^a)^jPshB~N^;cifiIf~8=mE9B=5T{e9BsCwcEenQ~-;NDK+9DCxw>Y_3 zF!)(H=C-{I?|8M#>T=`bq^nTzw`C=(?d9LEL+f&^W8Bbju=;_l{xH7v8EM4(tHIAK z;;?)x6JRDk)v(4aw)2o&nD5*Q$Mb>@K~vI{4CpUJ-MLU^fKxfOH>i}us@V`5P}zKh z`wB#6I&K-K<)Q$aZx*9&U>&web&Us<7Fz3sardHA3_LQ*SKJL4BN3UJT3aBU&0K!_ z$ssQodJM$DaVPQ+lLR3UNS%m8$o7Pi6x0}N%|E&p;;V=TfblG}AtTX_&%-&uMT%lV*!&yj%cn?wY8|z?f=_BzvS}7FkGxDiw92zjaZQa;=9OIzY z(J8+j=o`V9b*Dq`>-(nOpBlJ4zVF_vT~1+pWAV*u0osi99CTOcVnBkczwFv6js`mM zwERRD1I_y-=f0MtvbbtRC1=`6B5i^1#bC$xX&tQTcjc|uVc&ff6D?W{!fY33T5G?; z`2)g%he2aYqy`*k3F1hA&ohxI>w^w4CNRQwd2J@JyHPK$xyu7ugWX-YeyKEcfzktb z42mG(9+tpPlKW+(QwYPk%^Tx_WsVX8q9U$ni5Y;LBVZliaFKwccfc19eT7%T0bxon zS!UV@2+DTII2bIJ-YQpr-I0bTd-p!Nr`NRF9(~q-JdHXu`SZ*{!HkorbwhH$XyQBU zI)L`Y>R>C~nki#g$jgFas1907qgaPLc-=K1#P0`96|i`%cjVz=xRg(Xc$!ak_i2UM zWWdt(wmlj$H#8HS&s&EZMeYUen(Z3Q&%{O5a!+Qj$JTE05Ne;QFc(ReN*#DuevF+AhcF1X9C2d`bs1NUSC*BjkEoEpV=K~d+qkI9o zJ|C@e3KMsvBcASnO7aW?!Z9=_3!@7gqP*o`&uw%{VCCeVAYeoA#+*aj$U0ayX);JU zM%!to#q#!Zk{mQO-qTDDm@RJ{-FAcgR5wXdf(ZiE5I$RE?`1#<`mfvY3OastpU6c+ zV7Z;F-g!qMLUQ*=`ck6}ep#hG6q+hJb0*{Pg5j}e&uX9Uy&4tYgA@1>#0a2M&SCE+ zzUzCG+#+~q*#y*gAbwa`*GM4)^66*)n4qr#o6qUrh?$?PLsBg3;7X0Y3WR#ZMD~(% zG4Ef;&&9;5_~6RsT<*o>3P8dTz8%~$`DU=k{cNoGgp&ynWpgi9G`pM^JMzlc3x5ze z@Ude^J1e1}T3Rr#uAmTZRJu{?NGS&XXLP|8cuPxRfJxU$B}xPo)}ot6LfWVrpbb%u zq8TV!h;bJ15K~tIR{|}Rl4>_y+;-$Knjaw>96u;8j-=>-3%hPybc@PsqTdrPE@{3Cot#Ir&>LmJ)+JvYP4>795@hpP{FZR`&M1--|k zjV)AUQv$~w%82z)%gcA4l{2NW5`y^op6jnr-nZ&~JO;tAZTJS^{CB9@Fw?L`vrmkl zXaS1{69-I_7|IXil=+K1S$$QENF!LzKL|=#@CoZGOF51;;iSdk2+8F%MxoSbC;N=W zdllrkR;Z)VH+c*0$C`1`id4LoQUr9MQR83P97^2fpKVy>5Y!ncD09@TVlP%-%0A}a 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�W^D$rg32-26V?O82q$s%5*{1*Hlnm8 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

Euz}0mGo4SAt(6kh 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

Euz}0mGo4SAt(6kh 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

Euz}0mGo4SAt(6kh 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 + + + + CADisableMinimumFrameDurationOnPhone + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleDisplayName + Nuvio + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + $(PRODUCT_BUNDLE_PACKAGE_TYPE) + CFBundleShortVersionString + 1.0.0 + CFBundleSignature + ???? + CFBundleURLTypes + + + CFBundleURLSchemes + + stremioexpo + com.nuvio.app + + + + CFBundleURLSchemes + + exp+nuvio + + + + CFBundleVersion + 12 + LSMinimumSystemVersion + 12.0 + LSRequiresIPhoneOS + + LSSupportsOpeningDocumentsInPlace + + NSAppTransportSecurity + + NSAllowsArbitraryLoads + + + NSBonjourServices + + _http._tcp + + NSLocalNetworkUsageDescription + App uses the local network to discover and connect to devices. + NSMicrophoneUsageDescription + This app does not require microphone access. + RCTRootViewBackgroundColor + 4278322180 + UIBackgroundModes + + audio + + UIFileSharingEnabled + + UILaunchStoryboardName + SplashScreen + UIRequiredDeviceCapabilities + + arm64 + + UIRequiresFullScreen + + UIStatusBarStyle + UIStatusBarStyleDefault + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UIUserInterfaceStyle + Dark + UIViewControllerBasedStatusBarAppearance + + + \ No newline at end of file diff --git a/ios/Nuvio/KSPlayerManager.m b/ios/Nuvio/KSPlayerManager.m new file mode 100644 index 0000000..a4c8c05 --- /dev/null +++ b/ios/Nuvio/KSPlayerManager.m @@ -0,0 +1,41 @@ +// +// KSPlayerManager.m +// Nuvio +// +// Created by KSPlayer integration +// + +#import +#import +#import + +@interface RCT_EXTERN_MODULE(KSPlayerViewManager, RCTViewManager) + +RCT_EXPORT_VIEW_PROPERTY(source, NSDictionary) +RCT_EXPORT_VIEW_PROPERTY(paused, BOOL) +RCT_EXPORT_VIEW_PROPERTY(volume, NSNumber) +RCT_EXPORT_VIEW_PROPERTY(audioTrack, NSNumber) +RCT_EXPORT_VIEW_PROPERTY(textTrack, NSNumber) + +// Event properties +RCT_EXPORT_VIEW_PROPERTY(onLoad, RCTDirectEventBlock) +RCT_EXPORT_VIEW_PROPERTY(onProgress, RCTDirectEventBlock) +RCT_EXPORT_VIEW_PROPERTY(onBuffering, RCTDirectEventBlock) +RCT_EXPORT_VIEW_PROPERTY(onEnd, RCTDirectEventBlock) +RCT_EXPORT_VIEW_PROPERTY(onError, RCTDirectEventBlock) +RCT_EXPORT_VIEW_PROPERTY(onBufferingProgress, RCTDirectEventBlock) + +RCT_EXTERN_METHOD(seek:(nonnull NSNumber *)node toTime:(nonnull NSNumber *)time) +RCT_EXTERN_METHOD(setSource:(nonnull NSNumber *)node source:(nonnull NSDictionary *)source) +RCT_EXTERN_METHOD(setPaused:(nonnull NSNumber *)node paused:(BOOL)paused) +RCT_EXTERN_METHOD(setVolume:(nonnull NSNumber *)node volume:(nonnull NSNumber *)volume) +RCT_EXTERN_METHOD(setAudioTrack:(nonnull NSNumber *)node trackId:(nonnull NSNumber *)trackId) +RCT_EXTERN_METHOD(setTextTrack:(nonnull NSNumber *)node trackId:(nonnull NSNumber *)trackId) + +@end + +@interface RCT_EXTERN_MODULE(KSPlayerModule, RCTEventEmitter) + +RCT_EXTERN_METHOD(getTracks:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) + +@end diff --git a/ios/Nuvio/KSPlayerModule.swift b/ios/Nuvio/KSPlayerModule.swift new file mode 100644 index 0000000..f056a7d --- /dev/null +++ b/ios/Nuvio/KSPlayerModule.swift @@ -0,0 +1,36 @@ +// +// KSPlayerModule.swift +// Nuvio +// +// Created by KSPlayer integration +// + +import Foundation +import KSPlayer +import React + +@objc(KSPlayerModule) +class KSPlayerModule: RCTEventEmitter { + override static func requiresMainQueueSetup() -> Bool { + return true + } + + override func supportedEvents() -> [String]! { + return [ + "KSPlayer-onLoad", + "KSPlayer-onProgress", + "KSPlayer-onBuffering", + "KSPlayer-onEnd", + "KSPlayer-onError" + ] + } + + @objc func getTracks(_ resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) { + // This method can be expanded to get track information + // For now, return empty tracks + resolve([ + "audioTracks": [], + "textTracks": [] + ]) + } +} diff --git a/ios/Nuvio/KSPlayerView.swift b/ios/Nuvio/KSPlayerView.swift new file mode 100644 index 0000000..02390c6 --- /dev/null +++ b/ios/Nuvio/KSPlayerView.swift @@ -0,0 +1,281 @@ +// +// KSPlayerView.swift +// Nuvio +// +// Created by KSPlayer integration +// + +import Foundation +import KSPlayer +import React + +@objc(KSPlayerView) +class KSPlayerView: UIView { + private var playerView: IOSVideoPlayerView! + private var currentSource: NSDictionary? + private var isPaused = false + private var currentVolume: Float = 1.0 + weak var viewManager: KSPlayerViewManager? + + // Event blocks for Fabric + @objc var onLoad: RCTDirectEventBlock? + @objc var onProgress: RCTDirectEventBlock? + @objc var onBuffering: RCTDirectEventBlock? + @objc var onEnd: RCTDirectEventBlock? + @objc var onError: RCTDirectEventBlock? + @objc var onBufferingProgress: RCTDirectEventBlock? + + // Property setters that React Native will call + @objc var source: NSDictionary? { + didSet { + if let source = source { + setSource(source) + } + } + } + + @objc var paused: Bool = false { + didSet { + setPaused(paused) + } + } + + @objc var volume: NSNumber = 1.0 { + didSet { + setVolume(volume.floatValue) + } + } + + @objc var audioTrack: NSNumber = -1 { + didSet { + setAudioTrack(audioTrack.intValue) + } + } + + @objc var textTrack: NSNumber = -1 { + didSet { + setTextTrack(textTrack.intValue) + } + } + + override init(frame: CGRect) { + super.init(frame: frame) + setupPlayerView() + } + + required init?(coder: NSCoder) { + super.init(coder: coder) + setupPlayerView() + } + + private func setupPlayerView() { + playerView = IOSVideoPlayerView() + playerView.translatesAutoresizingMaskIntoConstraints = false + addSubview(playerView) + + NSLayoutConstraint.activate([ + playerView.topAnchor.constraint(equalTo: topAnchor), + playerView.leadingAnchor.constraint(equalTo: leadingAnchor), + playerView.trailingAnchor.constraint(equalTo: trailingAnchor), + playerView.bottomAnchor.constraint(equalTo: bottomAnchor) + ]) + + // Set up player delegates and callbacks + setupPlayerCallbacks() + } + + private func setupPlayerCallbacks() { + // Set up the player layer delegate + playerView.playerLayer?.delegate = self + + // Configure KSOptions (use static defaults where required) + KSOptions.isAutoPlay = false + } + + func setSource(_ source: NSDictionary) { + currentSource = source + + guard let uri = source["uri"] as? String else { + print("KSPlayerView: No URI provided") + return + } + + var headers: [String: String] = [:] + if let headersDict = source["headers"] as? [String: String] { + headers = headersDict + } + + // Create KSPlayerResource + let url = URL(string: uri)! + let resource = KSPlayerResource(url: url, options: createOptions(with: headers), name: "Video") + + print("KSPlayerView: Setting source: \(uri)") + playerView.set(resource: resource) + + // Apply current state + if isPaused { + playerView.pause() + } else { + playerView.play() + } + + setVolume(currentVolume) + } + + private func createOptions(with headers: [String: String]) -> KSOptions { + let options = KSOptions() + options.hardwareDecode = KSOptions.hardwareDecode + if !headers.isEmpty { + options.appendHeader(headers) + if let referer = headers["Referer"] ?? headers["referer"] { + options.referer = referer + } + } + return options + } + + func setPaused(_ paused: Bool) { + isPaused = paused + if paused { + playerView.pause() + } else { + playerView.play() + } + } + + func setVolume(_ volume: Float) { + currentVolume = volume + playerView.playerLayer?.player.playbackVolume = volume + } + + func seek(to time: TimeInterval) { + playerView.seek(time: time) { _ in } + } + + func setAudioTrack(_ trackId: Int) { + if let player = playerView.playerLayer?.player { + let audioTracks = player.tracks(mediaType: .audio) + if trackId >= 0 && trackId < audioTracks.count { + // Enable only the selected track + for (index, track) in audioTracks.enumerated() { + track.isEnabled = (index == trackId) + } + } + } + } + + func setTextTrack(_ trackId: Int) { + if let player = playerView.playerLayer?.player { + let textTracks = player.tracks(mediaType: .subtitle) + if trackId >= 0 && trackId < textTracks.count { + for (index, track) in textTracks.enumerated() { + track.isEnabled = (index == trackId) + } + } else if trackId == -1 { + // Disable all subtitles + for track in textTracks { track.isEnabled = false } + } + } + } + + // Get current player state for React Native + func getCurrentState() -> [String: Any] { + guard let player = playerView.playerLayer?.player else { + return [:] + } + + return [ + "currentTime": player.currentPlaybackTime, + "duration": player.duration, + "buffered": player.playableTime, + "isPlaying": !isPaused, + "volume": currentVolume + ] + } +} + +extension KSPlayerView: KSPlayerLayerDelegate { + func player(layer: KSPlayerLayer, state: KSPlayerState) { + switch state { + case .readyToPlay: + // Send onLoad event to React Native + let p = layer.player + sendEvent("onLoad", [ + "duration": p.duration, + "currentTime": p.currentPlaybackTime, + "naturalSize": [ + "width": p.naturalSize.width, + "height": p.naturalSize.height + ] + ]) + case .buffering: + sendEvent("onBuffering", ["isBuffering": true]) + case .bufferFinished: + sendEvent("onBuffering", ["isBuffering": false]) + case .playedToTheEnd: + sendEvent("onEnd", [:]) + case .error: + // Error will be handled by the finish delegate method + break + default: + break + } + } + + func player(layer: KSPlayerLayer, currentTime: TimeInterval, totalTime: TimeInterval) { + let p = layer.player + sendEvent("onProgress", [ + "currentTime": currentTime, + "duration": totalTime, + "bufferTime": p.playableTime + ]) + } + + func player(layer: KSPlayerLayer, finish error: Error?) { + if let error = error { + sendEvent("onError", ["error": error.localizedDescription]) + } + } + + func player(layer: KSPlayerLayer, bufferedCount: Int, consumeTime: TimeInterval) { + // Handle buffering progress if needed + sendEvent("onBufferingProgress", [ + "bufferedCount": bufferedCount, + "consumeTime": consumeTime + ]) + } +} + +extension KSPlayerView { + private func sendEvent(_ eventName: String, _ body: [String: Any]) { + DispatchQueue.main.async { + switch eventName { + case "onLoad": + self.onLoad?(body) + case "onProgress": + self.onProgress?(body) + case "onBuffering": + self.onBuffering?(body) + case "onEnd": + self.onEnd?([:]) + case "onError": + self.onError?(body) + case "onBufferingProgress": + self.onBufferingProgress?(body) + default: + break + } + } + } + // Renamed to avoid clashing with React's UIView category method + private func findHostViewController() -> UIViewController? { + var responder: UIResponder? = self + while let nextResponder = responder?.next { + if let viewController = nextResponder as? UIViewController { + return viewController + } + responder = nextResponder + } + return nil + } +} diff --git a/ios/Nuvio/KSPlayerViewManager.swift b/ios/Nuvio/KSPlayerViewManager.swift new file mode 100644 index 0000000..dad2c71 --- /dev/null +++ b/ios/Nuvio/KSPlayerViewManager.swift @@ -0,0 +1,88 @@ +// +// KSPlayerViewManager.swift +// Nuvio +// +// Created by KSPlayer integration +// + +import Foundation +import KSPlayer +import React + +@objc(KSPlayerViewManager) +class KSPlayerViewManager: RCTViewManager { + + // Not needed for RCTViewManager-based views; events are exported via RCT_EXPORT_VIEW_PROPERTY + override func view() -> UIView! { + let view = KSPlayerView() + view.viewManager = self + return view + } + + override static func requiresMainQueueSetup() -> Bool { + return true + } + + override func constantsToExport() -> [AnyHashable : Any]! { + return [ + "EventTypes": [ + "onLoad": "onLoad", + "onProgress": "onProgress", + "onBuffering": "onBuffering", + "onEnd": "onEnd", + "onError": "onError", + "onBufferingProgress": "onBufferingProgress" + ] + ] + } + + // No-op: events are sent via direct event blocks on the view + + @objc func seek(_ node: NSNumber, toTime time: NSNumber) { + DispatchQueue.main.async { + if let view = self.bridge.uiManager.view(forReactTag: node) as? KSPlayerView { + view.seek(to: TimeInterval(truncating: time)) + } + } + } + + @objc func setSource(_ node: NSNumber, source: NSDictionary) { + DispatchQueue.main.async { + if let view = self.bridge.uiManager.view(forReactTag: node) as? KSPlayerView { + view.setSource(source) + } + } + } + + @objc func setPaused(_ node: NSNumber, paused: Bool) { + DispatchQueue.main.async { + if let view = self.bridge.uiManager.view(forReactTag: node) as? KSPlayerView { + view.setPaused(paused) + } + } + } + + @objc func setVolume(_ node: NSNumber, volume: NSNumber) { + DispatchQueue.main.async { + if let view = self.bridge.uiManager.view(forReactTag: node) as? KSPlayerView { + view.setVolume(Float(truncating: volume)) + } + } + } + + @objc func setAudioTrack(_ node: NSNumber, trackId: NSNumber) { + DispatchQueue.main.async { + if let view = self.bridge.uiManager.view(forReactTag: node) as? KSPlayerView { + view.setAudioTrack(Int(truncating: trackId)) + } + } + } + + @objc func setTextTrack(_ node: NSNumber, trackId: NSNumber) { + DispatchQueue.main.async { + if let view = self.bridge.uiManager.view(forReactTag: node) as? KSPlayerView { + view.setTextTrack(Int(truncating: trackId)) + } + } + } +} diff --git a/ios/Nuvio/Nuvio-Bridging-Header.h b/ios/Nuvio/Nuvio-Bridging-Header.h new file mode 100644 index 0000000..5f6de5e --- /dev/null +++ b/ios/Nuvio/Nuvio-Bridging-Header.h @@ -0,0 +1,11 @@ +// +// Use this file to import your target's public headers that you would like to expose to Swift. +// + +// React Native imports for bridge +#import +#import +#import +#import +#import +// Avoid importing deprecated/private headers that can break module maps diff --git a/ios/Nuvio/Nuvio.entitlements b/ios/Nuvio/Nuvio.entitlements new file mode 100644 index 0000000..a0bc443 --- /dev/null +++ b/ios/Nuvio/Nuvio.entitlements @@ -0,0 +1,10 @@ + + + + + aps-environment + development + com.apple.developer.associated-domains + + + \ No newline at end of file diff --git a/ios/Nuvio/PrivacyInfo.xcprivacy b/ios/Nuvio/PrivacyInfo.xcprivacy new file mode 100644 index 0000000..c6b452e --- /dev/null +++ b/ios/Nuvio/PrivacyInfo.xcprivacy @@ -0,0 +1,48 @@ + + + + + NSPrivacyAccessedAPITypes + + + NSPrivacyAccessedAPIType + NSPrivacyAccessedAPICategoryFileTimestamp + NSPrivacyAccessedAPITypeReasons + + C617.1 + 0A2A.1 + 3B52.1 + + + + NSPrivacyAccessedAPIType + NSPrivacyAccessedAPICategoryUserDefaults + NSPrivacyAccessedAPITypeReasons + + CA92.1 + + + + NSPrivacyAccessedAPIType + NSPrivacyAccessedAPICategorySystemBootTime + NSPrivacyAccessedAPITypeReasons + + 35F9.1 + + + + NSPrivacyAccessedAPIType + NSPrivacyAccessedAPICategoryDiskSpace + NSPrivacyAccessedAPITypeReasons + + E174.1 + 85F4.1 + + + + NSPrivacyCollectedDataTypes + + NSPrivacyTracking + + + diff --git a/ios/Nuvio/SplashScreen.storyboard b/ios/Nuvio/SplashScreen.storyboard new file mode 100644 index 0000000..1ff6f24 --- /dev/null +++ b/ios/Nuvio/SplashScreen.storyboard @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ios/Nuvio/Supporting/Expo.plist b/ios/Nuvio/Supporting/Expo.plist new file mode 100644 index 0000000..397287a --- /dev/null +++ b/ios/Nuvio/Supporting/Expo.plist @@ -0,0 +1,16 @@ + + + + + EXUpdatesCheckOnLaunch + ERROR_RECOVERY_ONLY + EXUpdatesEnabled + + EXUpdatesLaunchWaitMs + 30000 + EXUpdatesRuntimeVersion + 1.0.0 + EXUpdatesURL + https://grim-reyna-tapframe-69970143.koyeb.app/api/manifest + + \ No newline at end of file diff --git a/ios/Nuvio/main.m b/ios/Nuvio/main.m new file mode 100644 index 0000000..25181b6 --- /dev/null +++ b/ios/Nuvio/main.m @@ -0,0 +1,10 @@ +#import + +#import "AppDelegate.h" + +int main(int argc, char * argv[]) { + @autoreleasepool { + return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); + } +} + diff --git a/ios/Nuvio/noop-file.swift b/ios/Nuvio/noop-file.swift new file mode 100644 index 0000000..b2ffafb --- /dev/null +++ b/ios/Nuvio/noop-file.swift @@ -0,0 +1,4 @@ +// +// @generated +// A blank Swift file must be created for native modules with Swift files to work correctly. +// diff --git a/ios/Podfile b/ios/Podfile new file mode 100644 index 0000000..4516ea1 --- /dev/null +++ b/ios/Podfile @@ -0,0 +1,72 @@ +require File.join(File.dirname(`node --print "require.resolve('expo/package.json')"`), "scripts/autolinking") +require File.join(File.dirname(`node --print "require.resolve('react-native/package.json')"`), "scripts/react_native_pods") + +require 'json' +podfile_properties = JSON.parse(File.read(File.join(__dir__, 'Podfile.properties.json'))) rescue {} + +ENV['RCT_NEW_ARCH_ENABLED'] = podfile_properties['newArchEnabled'] == 'true' ? '1' : '0' +ENV['EX_DEV_CLIENT_NETWORK_INSPECTOR'] = podfile_properties['EX_DEV_CLIENT_NETWORK_INSPECTOR'] + +platform :ios, podfile_properties['ios.deploymentTarget'] || '15.1' +install! 'cocoapods', + :deterministic_uuids => false + +prepare_react_native_project! + +target 'Nuvio' do + use_expo_modules! + + if ENV['EXPO_USE_COMMUNITY_AUTOLINKING'] == '1' + config_command = ['node', '-e', "process.argv=['', '', 'config'];require('@react-native-community/cli').run()"]; + else + config_command = [ + 'node', + '--no-warnings', + '--eval', + 'require(require.resolve(\'expo-modules-autolinking\', { paths: [require.resolve(\'expo/package.json\')] }))(process.argv.slice(1))', + 'react-native-config', + '--json', + '--platform', + 'ios' + ] + end + + config = use_native_modules!(config_command) + + use_frameworks! :linkage => podfile_properties['ios.useFrameworks'].to_sym if podfile_properties['ios.useFrameworks'] + use_frameworks! :linkage => ENV['USE_FRAMEWORKS'].to_sym if ENV['USE_FRAMEWORKS'] + + use_react_native!( + :path => config[:reactNativePath], + :hermes_enabled => podfile_properties['expo.jsEngine'] == nil || podfile_properties['expo.jsEngine'] == 'hermes', + # An absolute path to your application root. + :app_path => "#{Pod::Config.instance.installation_root}/..", + :privacy_file_aggregation_enabled => podfile_properties['apple.privacyManifestAggregationEnabled'] != 'false', + ) + + # KSPlayer dependencies + pod 'KSPlayer',:git => 'https://github.com/kingslay/KSPlayer.git', :branch => 'main', :modular_headers => true + pod 'DisplayCriteria',:git => 'https://github.com/kingslay/KSPlayer.git', :branch => 'main', :modular_headers => true + pod 'FFmpegKit',:git => 'https://github.com/kingslay/FFmpegKit.git', :branch => 'main', :modular_headers => true + pod 'Libass',:git => 'https://github.com/kingslay/FFmpegKit.git', :branch => 'main', :modular_headers => true + + post_install do |installer| + react_native_post_install( + installer, + config[:reactNativePath], + :mac_catalyst_enabled => false, + :ccache_enabled => podfile_properties['apple.ccacheEnabled'] == 'true', + ) + + # This is necessary for Xcode 14, because it signs resource bundles by default + # when building for devices. + installer.target_installation_results.pod_target_installation_results + .each do |pod_name, target_installation_result| + target_installation_result.resource_bundle_targets.each do |resource_bundle_target| + resource_bundle_target.build_configurations.each do |config| + config.build_settings['CODE_SIGNING_ALLOWED'] = 'NO' + end + end + end + end +end diff --git a/ios/Podfile.lock b/ios/Podfile.lock new file mode 100644 index 0000000..aa01f07 --- /dev/null +++ b/ios/Podfile.lock @@ -0,0 +1,2957 @@ +PODS: + - boost (1.84.0) + - DisplayCriteria (1.1.0) + - DoubleConversion (1.1.6) + - EASClient (0.13.3): + - ExpoModulesCore + - EXApplication (6.0.2): + - ExpoModulesCore + - EXConstants (17.0.8): + - ExpoModulesCore + - EXJSONUtils (0.14.0) + - EXManifests (0.15.8): + - ExpoModulesCore + - EXNotifications (0.29.14): + - ExpoModulesCore + - Expo (52.0.47): + - ExpoModulesCore + - expo-dev-client (5.0.20): + - EXManifests + - expo-dev-launcher + - expo-dev-menu + - expo-dev-menu-interface + - EXUpdatesInterface + - expo-dev-launcher (5.0.35): + - DoubleConversion + - EXManifests + - expo-dev-launcher/Main (= 5.0.35) + - expo-dev-menu + - expo-dev-menu-interface + - ExpoModulesCore + - EXUpdatesInterface + - glog + - hermes-engine + - RCT-Folly (= 2024.10.14.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - React-jsinspector + - React-NativeModulesApple + - React-RCTAppDelegate + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga + - expo-dev-launcher/Main (5.0.35): + - DoubleConversion + - EXManifests + - expo-dev-launcher/Unsafe + - expo-dev-menu + - expo-dev-menu-interface + - ExpoModulesCore + - EXUpdatesInterface + - glog + - hermes-engine + - RCT-Folly (= 2024.10.14.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - React-jsinspector + - React-NativeModulesApple + - React-RCTAppDelegate + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga + - expo-dev-launcher/Unsafe (5.0.35): + - DoubleConversion + - EXManifests + - expo-dev-menu + - expo-dev-menu-interface + - ExpoModulesCore + - EXUpdatesInterface + - glog + - hermes-engine + - RCT-Folly (= 2024.10.14.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - React-jsinspector + - React-NativeModulesApple + - React-RCTAppDelegate + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga + - expo-dev-menu (6.0.25): + - DoubleConversion + - expo-dev-menu/Main (= 6.0.25) + - expo-dev-menu/ReactNativeCompatibles (= 6.0.25) + - glog + - hermes-engine + - RCT-Folly (= 2024.10.14.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - React-NativeModulesApple + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga + - expo-dev-menu-interface (1.9.3) + - expo-dev-menu/Main (6.0.25): + - DoubleConversion + - EXManifests + - expo-dev-menu-interface + - expo-dev-menu/Vendored + - ExpoModulesCore + - glog + - hermes-engine + - RCT-Folly (= 2024.10.14.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - React-jsinspector + - React-NativeModulesApple + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga + - expo-dev-menu/ReactNativeCompatibles (6.0.25): + - DoubleConversion + - glog + - hermes-engine + - RCT-Folly (= 2024.10.14.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - React-NativeModulesApple + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga + - expo-dev-menu/SafeAreaView (6.0.25): + - DoubleConversion + - ExpoModulesCore + - glog + - hermes-engine + - RCT-Folly (= 2024.10.14.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - React-NativeModulesApple + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga + - expo-dev-menu/Vendored (6.0.25): + - DoubleConversion + - expo-dev-menu/SafeAreaView + - glog + - hermes-engine + - RCT-Folly (= 2024.10.14.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - React-NativeModulesApple + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga + - ExpoAsset (11.0.5): + - ExpoModulesCore + - ExpoBlur (14.0.3): + - ExpoModulesCore + - ExpoBrightness (13.0.3): + - ExpoModulesCore + - ExpoCrypto (14.0.2): + - ExpoModulesCore + - ExpoDevice (7.0.3): + - ExpoModulesCore + - ExpoFileSystem (18.0.12): + - ExpoModulesCore + - ExpoFont (13.0.4): + - ExpoModulesCore + - ExpoHaptics (14.0.1): + - ExpoModulesCore + - ExpoImage (2.0.7): + - ExpoModulesCore + - libavif/libdav1d + - SDWebImage (~> 5.19.1) + - SDWebImageAVIFCoder (~> 0.11.0) + - SDWebImageSVGCoder (~> 1.7.0) + - ExpoKeepAwake (14.0.3): + - ExpoModulesCore + - ExpoLinearGradient (14.0.2): + - ExpoModulesCore + - ExpoLinking (7.0.5): + - ExpoModulesCore + - ExpoLocalization (16.0.1): + - ExpoModulesCore + - ExpoModulesCore (2.2.3): + - DoubleConversion + - glog + - hermes-engine + - RCT-Folly (= 2024.10.14.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - React-jsinspector + - React-NativeModulesApple + - React-RCTAppDelegate + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga + - ExpoRandom (14.0.1): + - ExpoModulesCore + - ExpoScreenOrientation (8.0.4): + - DoubleConversion + - ExpoModulesCore + - glog + - hermes-engine + - RCT-Folly (= 2024.10.14.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - React-NativeModulesApple + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga + - ExpoSystemUI (4.0.9): + - ExpoModulesCore + - ExpoWebBrowser (14.0.2): + - ExpoModulesCore + - EXStructuredHeaders (4.0.0) + - EXUpdates (0.27.4): + - DoubleConversion + - EASClient + - EXManifests + - ExpoModulesCore + - EXStructuredHeaders + - EXUpdatesInterface + - glog + - hermes-engine + - RCT-Folly (= 2024.10.14.00) + - RCTRequired + - RCTTypeSafety + - ReachabilitySwift + - React-Core + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - React-NativeModulesApple + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga + - EXUpdatesInterface (1.0.0): + - ExpoModulesCore + - fast_float (6.1.4) + - FBLazyVector (0.76.9) + - FFmpegKit (6.1.0): + - FFmpegKit/FFmpegKit (= 6.1.0) + - FFmpegKit/FFmpegKit (6.1.0): + - Libass + - fmt (11.0.2) + - glog (0.3.5) + - hermes-engine (0.76.9): + - hermes-engine/Pre-built (= 0.76.9) + - hermes-engine/Pre-built (0.76.9) + - ImageColors (2.5.0): + - ExpoModulesCore + - KSPlayer (1.1.0): + - KSPlayer/Audio (= 1.1.0) + - KSPlayer/AVPlayer (= 1.1.0) + - KSPlayer/Core (= 1.1.0) + - KSPlayer/MEPlayer (= 1.1.0) + - KSPlayer/Metal (= 1.1.0) + - KSPlayer/Subtitle (= 1.1.0) + - KSPlayer/SwiftUI (= 1.1.0) + - KSPlayer/Video (= 1.1.0) + - KSPlayer/Audio (1.1.0): + - KSPlayer/Core + - KSPlayer/AVPlayer (1.1.0): + - DisplayCriteria + - KSPlayer/Core (1.1.0): + - KSPlayer/AVPlayer + - KSPlayer/MEPlayer (1.1.0): + - FFmpegKit + - KSPlayer/AVPlayer + - KSPlayer/Metal + - KSPlayer/Subtitle + - KSPlayer/Metal (1.1.0) + - KSPlayer/Subtitle (1.1.0) + - KSPlayer/SwiftUI (1.1.0): + - KSPlayer/AVPlayer + - KSPlayer/Video (1.1.0): + - KSPlayer/Core + - KSPlayer/Subtitle + - Libass (0.17.1): + - Libass/Libass (= 0.17.1) + - Libass/Libass (0.17.1) + - libavif/core (0.11.1) + - libavif/libdav1d (0.11.1): + - libavif/core + - libdav1d (>= 0.6.0) + - libdav1d (1.2.0) + - lottie-ios (4.5.0) + - lottie-react-native (7.1.0): + - DoubleConversion + - glog + - hermes-engine + - lottie-ios (= 4.5.0) + - RCT-Folly (= 2024.10.14.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - React-NativeModulesApple + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga + - MobileVLCKit (3.5.1) + - RCT-Folly (2024.10.14.00): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - RCT-Folly/Default (= 2024.10.14.00) + - RCT-Folly/Default (2024.10.14.00): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - RCT-Folly/Fabric (2024.10.14.00): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - RCTDeprecation (0.76.9) + - RCTRequired (0.76.9) + - RCTTypeSafety (0.76.9): + - FBLazyVector (= 0.76.9) + - RCTRequired (= 0.76.9) + - React-Core (= 0.76.9) + - ReachabilitySwift (5.2.4) + - React (0.76.9): + - React-Core (= 0.76.9) + - React-Core/DevSupport (= 0.76.9) + - React-Core/RCTWebSocket (= 0.76.9) + - React-RCTActionSheet (= 0.76.9) + - React-RCTAnimation (= 0.76.9) + - React-RCTBlob (= 0.76.9) + - React-RCTImage (= 0.76.9) + - React-RCTLinking (= 0.76.9) + - React-RCTNetwork (= 0.76.9) + - React-RCTSettings (= 0.76.9) + - React-RCTText (= 0.76.9) + - React-RCTVibration (= 0.76.9) + - React-callinvoker (0.76.9) + - React-Core (0.76.9): + - glog + - hermes-engine + - RCT-Folly (= 2024.10.14.00) + - RCTDeprecation + - React-Core/Default (= 0.76.9) + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-perflogger + - React-runtimescheduler + - React-utils + - SocketRocket (= 0.7.1) + - Yoga + - React-Core/CoreModulesHeaders (0.76.9): + - glog + - hermes-engine + - RCT-Folly (= 2024.10.14.00) + - RCTDeprecation + - React-Core/Default + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-perflogger + - React-runtimescheduler + - React-utils + - SocketRocket (= 0.7.1) + - Yoga + - React-Core/Default (0.76.9): + - glog + - hermes-engine + - RCT-Folly (= 2024.10.14.00) + - RCTDeprecation + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-perflogger + - React-runtimescheduler + - React-utils + - SocketRocket (= 0.7.1) + - Yoga + - React-Core/DevSupport (0.76.9): + - glog + - hermes-engine + - RCT-Folly (= 2024.10.14.00) + - RCTDeprecation + - React-Core/Default (= 0.76.9) + - React-Core/RCTWebSocket (= 0.76.9) + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-perflogger + - React-runtimescheduler + - React-utils + - SocketRocket (= 0.7.1) + - Yoga + - React-Core/RCTActionSheetHeaders (0.76.9): + - glog + - hermes-engine + - RCT-Folly (= 2024.10.14.00) + - RCTDeprecation + - React-Core/Default + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-perflogger + - React-runtimescheduler + - React-utils + - SocketRocket (= 0.7.1) + - Yoga + - React-Core/RCTAnimationHeaders (0.76.9): + - glog + - hermes-engine + - RCT-Folly (= 2024.10.14.00) + - RCTDeprecation + - React-Core/Default + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-perflogger + - React-runtimescheduler + - React-utils + - SocketRocket (= 0.7.1) + - Yoga + - React-Core/RCTBlobHeaders (0.76.9): + - glog + - hermes-engine + - RCT-Folly (= 2024.10.14.00) + - RCTDeprecation + - React-Core/Default + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-perflogger + - React-runtimescheduler + - React-utils + - SocketRocket (= 0.7.1) + - Yoga + - React-Core/RCTImageHeaders (0.76.9): + - glog + - hermes-engine + - RCT-Folly (= 2024.10.14.00) + - RCTDeprecation + - React-Core/Default + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-perflogger + - React-runtimescheduler + - React-utils + - SocketRocket (= 0.7.1) + - Yoga + - React-Core/RCTLinkingHeaders (0.76.9): + - glog + - hermes-engine + - RCT-Folly (= 2024.10.14.00) + - RCTDeprecation + - React-Core/Default + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-perflogger + - React-runtimescheduler + - React-utils + - SocketRocket (= 0.7.1) + - Yoga + - React-Core/RCTNetworkHeaders (0.76.9): + - glog + - hermes-engine + - RCT-Folly (= 2024.10.14.00) + - RCTDeprecation + - React-Core/Default + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-perflogger + - React-runtimescheduler + - React-utils + - SocketRocket (= 0.7.1) + - Yoga + - React-Core/RCTSettingsHeaders (0.76.9): + - glog + - hermes-engine + - RCT-Folly (= 2024.10.14.00) + - RCTDeprecation + - React-Core/Default + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-perflogger + - React-runtimescheduler + - React-utils + - SocketRocket (= 0.7.1) + - Yoga + - React-Core/RCTTextHeaders (0.76.9): + - glog + - hermes-engine + - RCT-Folly (= 2024.10.14.00) + - RCTDeprecation + - React-Core/Default + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-perflogger + - React-runtimescheduler + - React-utils + - SocketRocket (= 0.7.1) + - Yoga + - React-Core/RCTVibrationHeaders (0.76.9): + - glog + - hermes-engine + - RCT-Folly (= 2024.10.14.00) + - RCTDeprecation + - React-Core/Default + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-perflogger + - React-runtimescheduler + - React-utils + - SocketRocket (= 0.7.1) + - Yoga + - React-Core/RCTWebSocket (0.76.9): + - glog + - hermes-engine + - RCT-Folly (= 2024.10.14.00) + - RCTDeprecation + - React-Core/Default (= 0.76.9) + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-perflogger + - React-runtimescheduler + - React-utils + - SocketRocket (= 0.7.1) + - Yoga + - React-CoreModules (0.76.9): + - DoubleConversion + - fast_float + - fmt + - RCT-Folly + - RCTTypeSafety + - React-Core/CoreModulesHeaders + - React-jsi + - React-jsinspector + - React-NativeModulesApple + - React-RCTBlob + - React-RCTImage + - ReactCodegen + - ReactCommon + - SocketRocket + - React-cxxreact (0.76.9): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - React-callinvoker + - React-debug + - React-jsi + - React-jsinspector + - React-logger + - React-perflogger + - React-runtimeexecutor + - React-timing + - React-debug (0.76.9) + - React-defaultsnativemodule (0.76.9): + - DoubleConversion + - glog + - hermes-engine + - RCT-Folly (= 2024.10.14.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-debug + - React-domnativemodule + - React-Fabric + - React-featureflags + - React-featureflagsnativemodule + - React-graphics + - React-idlecallbacksnativemodule + - React-ImageManager + - React-microtasksnativemodule + - React-NativeModulesApple + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga + - React-domnativemodule (0.76.9): + - DoubleConversion + - glog + - hermes-engine + - RCT-Folly (= 2024.10.14.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-debug + - React-Fabric + - React-FabricComponents + - React-featureflags + - React-graphics + - React-ImageManager + - React-NativeModulesApple + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga + - React-Fabric (0.76.9): + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.10.14.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric/animations (= 0.76.9) + - React-Fabric/attributedstring (= 0.76.9) + - React-Fabric/componentregistry (= 0.76.9) + - React-Fabric/componentregistrynative (= 0.76.9) + - React-Fabric/components (= 0.76.9) + - React-Fabric/core (= 0.76.9) + - React-Fabric/dom (= 0.76.9) + - React-Fabric/imagemanager (= 0.76.9) + - React-Fabric/leakchecker (= 0.76.9) + - React-Fabric/mounting (= 0.76.9) + - React-Fabric/observers (= 0.76.9) + - React-Fabric/scheduler (= 0.76.9) + - React-Fabric/telemetry (= 0.76.9) + - React-Fabric/templateprocessor (= 0.76.9) + - React-Fabric/uimanager (= 0.76.9) + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/animations (0.76.9): + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.10.14.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/attributedstring (0.76.9): + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.10.14.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/componentregistry (0.76.9): + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.10.14.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/componentregistrynative (0.76.9): + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.10.14.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/components (0.76.9): + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.10.14.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric/components/legacyviewmanagerinterop (= 0.76.9) + - React-Fabric/components/root (= 0.76.9) + - React-Fabric/components/view (= 0.76.9) + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/components/legacyviewmanagerinterop (0.76.9): + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.10.14.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/components/root (0.76.9): + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.10.14.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/components/view (0.76.9): + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.10.14.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - Yoga + - React-Fabric/core (0.76.9): + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.10.14.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/dom (0.76.9): + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.10.14.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/imagemanager (0.76.9): + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.10.14.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/leakchecker (0.76.9): + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.10.14.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/mounting (0.76.9): + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.10.14.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/observers (0.76.9): + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.10.14.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric/observers/events (= 0.76.9) + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/observers/events (0.76.9): + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.10.14.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/scheduler (0.76.9): + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.10.14.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric/observers/events + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-performancetimeline + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/telemetry (0.76.9): + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.10.14.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/templateprocessor (0.76.9): + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.10.14.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/uimanager (0.76.9): + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.10.14.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric/uimanager/consistency (= 0.76.9) + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererconsistency + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/uimanager/consistency (0.76.9): + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.10.14.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererconsistency + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-FabricComponents (0.76.9): + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.10.14.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric + - React-FabricComponents/components (= 0.76.9) + - React-FabricComponents/textlayoutmanager (= 0.76.9) + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/core + - Yoga + - React-FabricComponents/components (0.76.9): + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.10.14.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric + - React-FabricComponents/components/inputaccessory (= 0.76.9) + - React-FabricComponents/components/iostextinput (= 0.76.9) + - React-FabricComponents/components/modal (= 0.76.9) + - React-FabricComponents/components/rncore (= 0.76.9) + - React-FabricComponents/components/safeareaview (= 0.76.9) + - React-FabricComponents/components/scrollview (= 0.76.9) + - React-FabricComponents/components/text (= 0.76.9) + - React-FabricComponents/components/textinput (= 0.76.9) + - React-FabricComponents/components/unimplementedview (= 0.76.9) + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/core + - Yoga + - React-FabricComponents/components/inputaccessory (0.76.9): + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.10.14.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/core + - Yoga + - React-FabricComponents/components/iostextinput (0.76.9): + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.10.14.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/core + - Yoga + - React-FabricComponents/components/modal (0.76.9): + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.10.14.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/core + - Yoga + - React-FabricComponents/components/rncore (0.76.9): + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.10.14.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/core + - Yoga + - React-FabricComponents/components/safeareaview (0.76.9): + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.10.14.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/core + - Yoga + - React-FabricComponents/components/scrollview (0.76.9): + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.10.14.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/core + - Yoga + - React-FabricComponents/components/text (0.76.9): + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.10.14.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/core + - Yoga + - React-FabricComponents/components/textinput (0.76.9): + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.10.14.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/core + - Yoga + - React-FabricComponents/components/unimplementedview (0.76.9): + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.10.14.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/core + - Yoga + - React-FabricComponents/textlayoutmanager (0.76.9): + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.10.14.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/core + - Yoga + - React-FabricImage (0.76.9): + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Fabric + - React-graphics + - React-ImageManager + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-utils + - ReactCommon + - Yoga + - React-featureflags (0.76.9) + - React-featureflagsnativemodule (0.76.9): + - DoubleConversion + - glog + - hermes-engine + - RCT-Folly (= 2024.10.14.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - React-NativeModulesApple + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga + - React-graphics (0.76.9): + - DoubleConversion + - fast_float + - fmt + - glog + - RCT-Folly/Fabric + - React-jsi + - React-jsiexecutor + - React-utils + - React-hermes (0.76.9): + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - React-cxxreact + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-perflogger + - React-runtimeexecutor + - React-idlecallbacksnativemodule (0.76.9): + - DoubleConversion + - glog + - hermes-engine + - RCT-Folly (= 2024.10.14.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - React-NativeModulesApple + - React-RCTFabric + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga + - React-ImageManager (0.76.9): + - glog + - RCT-Folly/Fabric + - React-Core/Default + - React-debug + - React-Fabric + - React-graphics + - React-rendererdebug + - React-utils + - React-jserrorhandler (0.76.9): + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.10.14.00) + - React-cxxreact + - React-debug + - React-jsi + - React-jsi (0.76.9): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - React-jsiexecutor (0.76.9): + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - React-cxxreact + - React-jsi + - React-jsinspector + - React-perflogger + - React-jsinspector (0.76.9): + - DoubleConversion + - glog + - hermes-engine + - RCT-Folly + - React-featureflags + - React-jsi + - React-perflogger + - React-runtimeexecutor + - React-jsitracing (0.76.9): + - React-jsi + - React-logger (0.76.9): + - glog + - React-Mapbuffer (0.76.9): + - glog + - React-debug + - React-microtasksnativemodule (0.76.9): + - DoubleConversion + - glog + - hermes-engine + - RCT-Folly (= 2024.10.14.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - React-NativeModulesApple + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga + - react-native-blur (4.4.1): + - DoubleConversion + - glog + - hermes-engine + - RCT-Folly (= 2024.10.14.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - React-NativeModulesApple + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga + - react-native-device-brightness (1.2.7): + - React + - react-native-get-random-values (1.11.0): + - React-Core + - react-native-netinfo (11.4.1): + - React-Core + - react-native-safe-area-context (4.12.0): + - DoubleConversion + - glog + - hermes-engine + - RCT-Folly (= 2024.10.14.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - react-native-safe-area-context/common (= 4.12.0) + - react-native-safe-area-context/fabric (= 4.12.0) + - React-NativeModulesApple + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga + - react-native-safe-area-context/common (4.12.0): + - DoubleConversion + - glog + - hermes-engine + - RCT-Folly (= 2024.10.14.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - React-NativeModulesApple + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga + - react-native-safe-area-context/fabric (4.12.0): + - DoubleConversion + - glog + - hermes-engine + - RCT-Folly (= 2024.10.14.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - react-native-safe-area-context/common + - React-NativeModulesApple + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga + - react-native-slider (4.5.5): + - DoubleConversion + - glog + - hermes-engine + - RCT-Folly (= 2024.10.14.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - react-native-slider/common (= 4.5.5) + - React-NativeModulesApple + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga + - react-native-slider/common (4.5.5): + - DoubleConversion + - glog + - hermes-engine + - RCT-Folly (= 2024.10.14.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - React-NativeModulesApple + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga + - react-native-video (6.16.1): + - DoubleConversion + - glog + - hermes-engine + - RCT-Folly (= 2024.10.14.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - react-native-video/Video (= 6.16.1) + - React-NativeModulesApple + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga + - react-native-video/Fabric (6.16.1): + - DoubleConversion + - glog + - hermes-engine + - RCT-Folly (= 2024.10.14.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - React-NativeModulesApple + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga + - react-native-video/Video (6.16.1): + - DoubleConversion + - glog + - hermes-engine + - RCT-Folly (= 2024.10.14.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - react-native-video/Fabric + - React-NativeModulesApple + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga + - react-native-vlc-media-player (1.0.38): + - MobileVLCKit (= 3.5.1) + - React + - TVVLCKit (= 3.5.1) + - React-nativeconfig (0.76.9) + - React-NativeModulesApple (0.76.9): + - glog + - hermes-engine + - React-callinvoker + - React-Core + - React-cxxreact + - React-jsi + - React-jsinspector + - React-runtimeexecutor + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - React-perflogger (0.76.9): + - DoubleConversion + - RCT-Folly (= 2024.10.14.00) + - React-performancetimeline (0.76.9): + - RCT-Folly (= 2024.10.14.00) + - React-cxxreact + - React-timing + - React-RCTActionSheet (0.76.9): + - React-Core/RCTActionSheetHeaders (= 0.76.9) + - React-RCTAnimation (0.76.9): + - RCT-Folly (= 2024.10.14.00) + - RCTTypeSafety + - React-Core/RCTAnimationHeaders + - React-jsi + - React-NativeModulesApple + - ReactCodegen + - ReactCommon + - React-RCTAppDelegate (0.76.9): + - RCT-Folly (= 2024.10.14.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-CoreModules + - React-debug + - React-defaultsnativemodule + - React-Fabric + - React-featureflags + - React-graphics + - React-hermes + - React-nativeconfig + - React-NativeModulesApple + - React-RCTFabric + - React-RCTImage + - React-RCTNetwork + - React-rendererdebug + - React-RuntimeApple + - React-RuntimeCore + - React-RuntimeHermes + - React-runtimescheduler + - React-utils + - ReactCodegen + - ReactCommon + - React-RCTBlob (0.76.9): + - DoubleConversion + - fast_float + - fmt + - hermes-engine + - RCT-Folly (= 2024.10.14.00) + - React-Core/RCTBlobHeaders + - React-Core/RCTWebSocket + - React-jsi + - React-jsinspector + - React-NativeModulesApple + - React-RCTNetwork + - ReactCodegen + - ReactCommon + - React-RCTFabric (0.76.9): + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.10.14.00) + - React-Core + - React-debug + - React-Fabric + - React-FabricComponents + - React-FabricImage + - React-featureflags + - React-graphics + - React-ImageManager + - React-jsi + - React-jsinspector + - React-nativeconfig + - React-performancetimeline + - React-RCTImage + - React-RCTText + - React-rendererconsistency + - React-rendererdebug + - React-runtimescheduler + - React-utils + - Yoga + - React-RCTImage (0.76.9): + - RCT-Folly (= 2024.10.14.00) + - RCTTypeSafety + - React-Core/RCTImageHeaders + - React-jsi + - React-NativeModulesApple + - React-RCTNetwork + - ReactCodegen + - ReactCommon + - React-RCTLinking (0.76.9): + - React-Core/RCTLinkingHeaders (= 0.76.9) + - React-jsi (= 0.76.9) + - React-NativeModulesApple + - ReactCodegen + - ReactCommon + - ReactCommon/turbomodule/core (= 0.76.9) + - React-RCTNetwork (0.76.9): + - RCT-Folly (= 2024.10.14.00) + - RCTTypeSafety + - React-Core/RCTNetworkHeaders + - React-jsi + - React-NativeModulesApple + - ReactCodegen + - ReactCommon + - React-RCTSettings (0.76.9): + - RCT-Folly (= 2024.10.14.00) + - RCTTypeSafety + - React-Core/RCTSettingsHeaders + - React-jsi + - React-NativeModulesApple + - ReactCodegen + - ReactCommon + - React-RCTText (0.76.9): + - React-Core/RCTTextHeaders (= 0.76.9) + - Yoga + - React-RCTVibration (0.76.9): + - RCT-Folly (= 2024.10.14.00) + - React-Core/RCTVibrationHeaders + - React-jsi + - React-NativeModulesApple + - ReactCodegen + - ReactCommon + - React-rendererconsistency (0.76.9) + - React-rendererdebug (0.76.9): + - DoubleConversion + - fast_float + - fmt + - RCT-Folly + - React-debug + - React-rncore (0.76.9) + - React-RuntimeApple (0.76.9): + - hermes-engine + - RCT-Folly/Fabric (= 2024.10.14.00) + - React-callinvoker + - React-Core/Default + - React-CoreModules + - React-cxxreact + - React-jserrorhandler + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-Mapbuffer + - React-NativeModulesApple + - React-RCTFabric + - React-RuntimeCore + - React-runtimeexecutor + - React-RuntimeHermes + - React-runtimescheduler + - React-utils + - React-RuntimeCore (0.76.9): + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.10.14.00) + - React-cxxreact + - React-featureflags + - React-jserrorhandler + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-performancetimeline + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - React-runtimeexecutor (0.76.9): + - React-jsi (= 0.76.9) + - React-RuntimeHermes (0.76.9): + - hermes-engine + - RCT-Folly/Fabric (= 2024.10.14.00) + - React-featureflags + - React-hermes + - React-jsi + - React-jsinspector + - React-jsitracing + - React-nativeconfig + - React-RuntimeCore + - React-utils + - React-runtimescheduler (0.76.9): + - glog + - hermes-engine + - RCT-Folly (= 2024.10.14.00) + - React-callinvoker + - React-cxxreact + - React-debug + - React-featureflags + - React-jsi + - React-performancetimeline + - React-rendererconsistency + - React-rendererdebug + - React-runtimeexecutor + - React-timing + - React-utils + - React-timing (0.76.9) + - React-utils (0.76.9): + - glog + - hermes-engine + - RCT-Folly (= 2024.10.14.00) + - React-debug + - React-jsi (= 0.76.9) + - ReactCodegen (0.76.9): + - DoubleConversion + - glog + - hermes-engine + - RCT-Folly + - RCTRequired + - RCTTypeSafety + - React-Core + - React-debug + - React-Fabric + - React-FabricImage + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-NativeModulesApple + - React-rendererdebug + - React-utils + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - ReactCommon (0.76.9): + - ReactCommon/turbomodule (= 0.76.9) + - ReactCommon/turbomodule (0.76.9): + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - React-callinvoker + - React-cxxreact + - React-jsi + - React-logger + - React-perflogger + - ReactCommon/turbomodule/bridging (= 0.76.9) + - ReactCommon/turbomodule/core (= 0.76.9) + - ReactCommon/turbomodule/bridging (0.76.9): + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - React-callinvoker + - React-cxxreact + - React-jsi (= 0.76.9) + - React-logger + - React-perflogger + - ReactCommon/turbomodule/core (0.76.9): + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - React-callinvoker + - React-cxxreact + - React-debug (= 0.76.9) + - React-featureflags (= 0.76.9) + - React-jsi + - React-logger + - React-perflogger + - React-utils (= 0.76.9) + - RNCAsyncStorage (1.23.1): + - DoubleConversion + - glog + - hermes-engine + - RCT-Folly (= 2024.10.14.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - React-NativeModulesApple + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga + - RNCPicker (2.9.0): + - DoubleConversion + - glog + - hermes-engine + - RCT-Folly (= 2024.10.14.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - React-NativeModulesApple + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga + - RNGestureHandler (2.20.2): + - DoubleConversion + - glog + - hermes-engine + - RCT-Folly (= 2024.10.14.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - React-NativeModulesApple + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga + - RNReanimated (3.16.7): + - DoubleConversion + - glog + - hermes-engine + - RCT-Folly (= 2024.10.14.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - React-NativeModulesApple + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - RNReanimated/reanimated (= 3.16.7) + - RNReanimated/worklets (= 3.16.7) + - Yoga + - RNReanimated/reanimated (3.16.7): + - DoubleConversion + - glog + - hermes-engine + - RCT-Folly (= 2024.10.14.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - React-NativeModulesApple + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - RNReanimated/reanimated/apple (= 3.16.7) + - Yoga + - RNReanimated/reanimated/apple (3.16.7): + - DoubleConversion + - glog + - hermes-engine + - RCT-Folly (= 2024.10.14.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - React-NativeModulesApple + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga + - RNReanimated/worklets (3.16.7): + - DoubleConversion + - glog + - hermes-engine + - RCT-Folly (= 2024.10.14.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - React-NativeModulesApple + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga + - RNScreens (4.4.0): + - DoubleConversion + - glog + - hermes-engine + - RCT-Folly (= 2024.10.14.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - React-NativeModulesApple + - React-RCTFabric + - React-RCTImage + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - RNScreens/common (= 4.4.0) + - Yoga + - RNScreens/common (4.4.0): + - DoubleConversion + - glog + - hermes-engine + - RCT-Folly (= 2024.10.14.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - React-NativeModulesApple + - React-RCTFabric + - React-RCTImage + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga + - RNSentry (6.10.0): + - DoubleConversion + - glog + - hermes-engine + - RCT-Folly (= 2024.10.14.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-hermes + - React-ImageManager + - React-NativeModulesApple + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Sentry/HybridSDK (= 8.48.0) + - Yoga + - RNSVG (15.8.0): + - DoubleConversion + - glog + - hermes-engine + - RCT-Folly (= 2024.10.14.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - React-NativeModulesApple + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - RNSVG/common (= 15.8.0) + - Yoga + - RNSVG/common (15.8.0): + - DoubleConversion + - glog + - hermes-engine + - RCT-Folly (= 2024.10.14.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - React-NativeModulesApple + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga + - SDWebImage (5.19.7): + - SDWebImage/Core (= 5.19.7) + - SDWebImage/Core (5.19.7) + - SDWebImageAVIFCoder (0.11.0): + - libavif/core (>= 0.11.0) + - SDWebImage (~> 5.10) + - SDWebImageSVGCoder (1.7.0): + - SDWebImage/Core (~> 5.6) + - Sentry/HybridSDK (8.48.0) + - SocketRocket (0.7.1) + - Yoga (0.0.0) + +DEPENDENCIES: + - boost (from `../node_modules/react-native/third-party-podspecs/boost.podspec`) + - DisplayCriteria (from `https://github.com/kingslay/KSPlayer.git`, branch `main`) + - DoubleConversion (from `../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec`) + - EASClient (from `../node_modules/expo-eas-client/ios`) + - EXApplication (from `../node_modules/expo-application/ios`) + - EXConstants (from `../node_modules/expo-constants/ios`) + - EXJSONUtils (from `../node_modules/expo-json-utils/ios`) + - EXManifests (from `../node_modules/expo-manifests/ios`) + - EXNotifications (from `../node_modules/expo-notifications/ios`) + - Expo (from `../node_modules/expo`) + - expo-dev-client (from `../node_modules/expo-dev-client/ios`) + - expo-dev-launcher (from `../node_modules/expo-dev-launcher`) + - expo-dev-menu (from `../node_modules/expo-dev-menu`) + - expo-dev-menu-interface (from `../node_modules/expo-dev-menu-interface/ios`) + - ExpoAsset (from `../node_modules/expo-asset/ios`) + - ExpoBlur (from `../node_modules/expo-blur/ios`) + - ExpoBrightness (from `../node_modules/expo-brightness/ios`) + - ExpoCrypto (from `../node_modules/expo-crypto/ios`) + - ExpoDevice (from `../node_modules/expo-device/ios`) + - ExpoFileSystem (from `../node_modules/expo-file-system/ios`) + - ExpoFont (from `../node_modules/expo-font/ios`) + - ExpoHaptics (from `../node_modules/expo-haptics/ios`) + - ExpoImage (from `../node_modules/expo-image/ios`) + - ExpoKeepAwake (from `../node_modules/expo-keep-awake/ios`) + - ExpoLinearGradient (from `../node_modules/expo-linear-gradient/ios`) + - ExpoLinking (from `../node_modules/expo-linking/ios`) + - ExpoLocalization (from `../node_modules/expo-localization/ios`) + - ExpoModulesCore (from `../node_modules/expo-modules-core`) + - ExpoRandom (from `../node_modules/expo-random/ios`) + - ExpoScreenOrientation (from `../node_modules/expo-screen-orientation/ios`) + - ExpoSystemUI (from `../node_modules/expo-system-ui/ios`) + - ExpoWebBrowser (from `../node_modules/expo-web-browser/ios`) + - EXStructuredHeaders (from `../node_modules/expo-structured-headers/ios`) + - EXUpdates (from `../node_modules/expo-updates/ios`) + - EXUpdatesInterface (from `../node_modules/expo-updates-interface/ios`) + - fast_float (from `../node_modules/react-native/third-party-podspecs/fast_float.podspec`) + - FBLazyVector (from `../node_modules/react-native/Libraries/FBLazyVector`) + - FFmpegKit (from `https://github.com/kingslay/FFmpegKit.git`, branch `main`) + - fmt (from `../node_modules/react-native/third-party-podspecs/fmt.podspec`) + - glog (from `../node_modules/react-native/third-party-podspecs/glog.podspec`) + - hermes-engine (from `../node_modules/react-native/sdks/hermes-engine/hermes-engine.podspec`) + - ImageColors (from `../node_modules/react-native-image-colors/ios`) + - KSPlayer (from `https://github.com/kingslay/KSPlayer.git`, branch `main`) + - Libass (from `https://github.com/kingslay/FFmpegKit.git`, branch `main`) + - lottie-react-native (from `../node_modules/lottie-react-native`) + - RCT-Folly (from `../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec`) + - RCT-Folly/Fabric (from `../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec`) + - RCTDeprecation (from `../node_modules/react-native/ReactApple/Libraries/RCTFoundation/RCTDeprecation`) + - RCTRequired (from `../node_modules/react-native/Libraries/Required`) + - RCTTypeSafety (from `../node_modules/react-native/Libraries/TypeSafety`) + - React (from `../node_modules/react-native/`) + - React-callinvoker (from `../node_modules/react-native/ReactCommon/callinvoker`) + - React-Core (from `../node_modules/react-native/`) + - React-Core/RCTWebSocket (from `../node_modules/react-native/`) + - React-CoreModules (from `../node_modules/react-native/React/CoreModules`) + - React-cxxreact (from `../node_modules/react-native/ReactCommon/cxxreact`) + - React-debug (from `../node_modules/react-native/ReactCommon/react/debug`) + - React-defaultsnativemodule (from `../node_modules/react-native/ReactCommon/react/nativemodule/defaults`) + - React-domnativemodule (from `../node_modules/react-native/ReactCommon/react/nativemodule/dom`) + - React-Fabric (from `../node_modules/react-native/ReactCommon`) + - React-FabricComponents (from `../node_modules/react-native/ReactCommon`) + - React-FabricImage (from `../node_modules/react-native/ReactCommon`) + - React-featureflags (from `../node_modules/react-native/ReactCommon/react/featureflags`) + - React-featureflagsnativemodule (from `../node_modules/react-native/ReactCommon/react/nativemodule/featureflags`) + - React-graphics (from `../node_modules/react-native/ReactCommon/react/renderer/graphics`) + - React-hermes (from `../node_modules/react-native/ReactCommon/hermes`) + - React-idlecallbacksnativemodule (from `../node_modules/react-native/ReactCommon/react/nativemodule/idlecallbacks`) + - React-ImageManager (from `../node_modules/react-native/ReactCommon/react/renderer/imagemanager/platform/ios`) + - React-jserrorhandler (from `../node_modules/react-native/ReactCommon/jserrorhandler`) + - React-jsi (from `../node_modules/react-native/ReactCommon/jsi`) + - React-jsiexecutor (from `../node_modules/react-native/ReactCommon/jsiexecutor`) + - React-jsinspector (from `../node_modules/react-native/ReactCommon/jsinspector-modern`) + - React-jsitracing (from `../node_modules/react-native/ReactCommon/hermes/executor/`) + - React-logger (from `../node_modules/react-native/ReactCommon/logger`) + - React-Mapbuffer (from `../node_modules/react-native/ReactCommon`) + - React-microtasksnativemodule (from `../node_modules/react-native/ReactCommon/react/nativemodule/microtasks`) + - "react-native-blur (from `../node_modules/@react-native-community/blur`)" + - "react-native-device-brightness (from `../node_modules/@adrianso/react-native-device-brightness`)" + - react-native-get-random-values (from `../node_modules/react-native-get-random-values`) + - "react-native-netinfo (from `../node_modules/@react-native-community/netinfo`)" + - react-native-safe-area-context (from `../node_modules/react-native-safe-area-context`) + - "react-native-slider (from `../node_modules/@react-native-community/slider`)" + - react-native-video (from `../node_modules/react-native-video`) + - react-native-vlc-media-player (from `../node_modules/react-native-vlc-media-player`) + - React-nativeconfig (from `../node_modules/react-native/ReactCommon`) + - React-NativeModulesApple (from `../node_modules/react-native/ReactCommon/react/nativemodule/core/platform/ios`) + - React-perflogger (from `../node_modules/react-native/ReactCommon/reactperflogger`) + - React-performancetimeline (from `../node_modules/react-native/ReactCommon/react/performance/timeline`) + - React-RCTActionSheet (from `../node_modules/react-native/Libraries/ActionSheetIOS`) + - React-RCTAnimation (from `../node_modules/react-native/Libraries/NativeAnimation`) + - React-RCTAppDelegate (from `../node_modules/react-native/Libraries/AppDelegate`) + - React-RCTBlob (from `../node_modules/react-native/Libraries/Blob`) + - React-RCTFabric (from `../node_modules/react-native/React`) + - React-RCTImage (from `../node_modules/react-native/Libraries/Image`) + - React-RCTLinking (from `../node_modules/react-native/Libraries/LinkingIOS`) + - React-RCTNetwork (from `../node_modules/react-native/Libraries/Network`) + - React-RCTSettings (from `../node_modules/react-native/Libraries/Settings`) + - React-RCTText (from `../node_modules/react-native/Libraries/Text`) + - React-RCTVibration (from `../node_modules/react-native/Libraries/Vibration`) + - React-rendererconsistency (from `../node_modules/react-native/ReactCommon/react/renderer/consistency`) + - React-rendererdebug (from `../node_modules/react-native/ReactCommon/react/renderer/debug`) + - React-rncore (from `../node_modules/react-native/ReactCommon`) + - React-RuntimeApple (from `../node_modules/react-native/ReactCommon/react/runtime/platform/ios`) + - React-RuntimeCore (from `../node_modules/react-native/ReactCommon/react/runtime`) + - React-runtimeexecutor (from `../node_modules/react-native/ReactCommon/runtimeexecutor`) + - React-RuntimeHermes (from `../node_modules/react-native/ReactCommon/react/runtime`) + - React-runtimescheduler (from `../node_modules/react-native/ReactCommon/react/renderer/runtimescheduler`) + - React-timing (from `../node_modules/react-native/ReactCommon/react/timing`) + - React-utils (from `../node_modules/react-native/ReactCommon/react/utils`) + - ReactCodegen (from `build/generated/ios`) + - ReactCommon/turbomodule/core (from `../node_modules/react-native/ReactCommon`) + - "RNCAsyncStorage (from `../node_modules/@react-native-async-storage/async-storage`)" + - "RNCPicker (from `../node_modules/@react-native-picker/picker`)" + - RNGestureHandler (from `../node_modules/react-native-gesture-handler`) + - RNReanimated (from `../node_modules/react-native-reanimated`) + - RNScreens (from `../node_modules/react-native-screens`) + - "RNSentry (from `../node_modules/@sentry/react-native`)" + - RNSVG (from `../node_modules/react-native-svg`) + - Yoga (from `../node_modules/react-native/ReactCommon/yoga`) + +SPEC REPOS: + trunk: + - libavif + - libdav1d + - lottie-ios + - MobileVLCKit + - ReachabilitySwift + - SDWebImage + - SDWebImageAVIFCoder + - SDWebImageSVGCoder + - Sentry + - SocketRocket + +EXTERNAL SOURCES: + boost: + :podspec: "../node_modules/react-native/third-party-podspecs/boost.podspec" + DisplayCriteria: + :branch: main + :git: https://github.com/kingslay/KSPlayer.git + DoubleConversion: + :podspec: "../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec" + EASClient: + :path: "../node_modules/expo-eas-client/ios" + EXApplication: + :path: "../node_modules/expo-application/ios" + EXConstants: + :path: "../node_modules/expo-constants/ios" + EXJSONUtils: + :path: "../node_modules/expo-json-utils/ios" + EXManifests: + :path: "../node_modules/expo-manifests/ios" + EXNotifications: + :path: "../node_modules/expo-notifications/ios" + Expo: + :path: "../node_modules/expo" + expo-dev-client: + :path: "../node_modules/expo-dev-client/ios" + expo-dev-launcher: + :path: "../node_modules/expo-dev-launcher" + expo-dev-menu: + :path: "../node_modules/expo-dev-menu" + expo-dev-menu-interface: + :path: "../node_modules/expo-dev-menu-interface/ios" + ExpoAsset: + :path: "../node_modules/expo-asset/ios" + ExpoBlur: + :path: "../node_modules/expo-blur/ios" + ExpoBrightness: + :path: "../node_modules/expo-brightness/ios" + ExpoCrypto: + :path: "../node_modules/expo-crypto/ios" + ExpoDevice: + :path: "../node_modules/expo-device/ios" + ExpoFileSystem: + :path: "../node_modules/expo-file-system/ios" + ExpoFont: + :path: "../node_modules/expo-font/ios" + ExpoHaptics: + :path: "../node_modules/expo-haptics/ios" + ExpoImage: + :path: "../node_modules/expo-image/ios" + ExpoKeepAwake: + :path: "../node_modules/expo-keep-awake/ios" + ExpoLinearGradient: + :path: "../node_modules/expo-linear-gradient/ios" + ExpoLinking: + :path: "../node_modules/expo-linking/ios" + ExpoLocalization: + :path: "../node_modules/expo-localization/ios" + ExpoModulesCore: + :path: "../node_modules/expo-modules-core" + ExpoRandom: + :path: "../node_modules/expo-random/ios" + ExpoScreenOrientation: + :path: "../node_modules/expo-screen-orientation/ios" + ExpoSystemUI: + :path: "../node_modules/expo-system-ui/ios" + ExpoWebBrowser: + :path: "../node_modules/expo-web-browser/ios" + EXStructuredHeaders: + :path: "../node_modules/expo-structured-headers/ios" + EXUpdates: + :path: "../node_modules/expo-updates/ios" + EXUpdatesInterface: + :path: "../node_modules/expo-updates-interface/ios" + fast_float: + :podspec: "../node_modules/react-native/third-party-podspecs/fast_float.podspec" + FBLazyVector: + :path: "../node_modules/react-native/Libraries/FBLazyVector" + FFmpegKit: + :branch: main + :git: https://github.com/kingslay/FFmpegKit.git + fmt: + :podspec: "../node_modules/react-native/third-party-podspecs/fmt.podspec" + glog: + :podspec: "../node_modules/react-native/third-party-podspecs/glog.podspec" + hermes-engine: + :podspec: "../node_modules/react-native/sdks/hermes-engine/hermes-engine.podspec" + :tag: hermes-2024-11-12-RNv0.76.2-5b4aa20c719830dcf5684832b89a6edb95ac3d64 + ImageColors: + :path: "../node_modules/react-native-image-colors/ios" + KSPlayer: + :branch: main + :git: https://github.com/kingslay/KSPlayer.git + Libass: + :branch: main + :git: https://github.com/kingslay/FFmpegKit.git + lottie-react-native: + :path: "../node_modules/lottie-react-native" + RCT-Folly: + :podspec: "../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec" + RCTDeprecation: + :path: "../node_modules/react-native/ReactApple/Libraries/RCTFoundation/RCTDeprecation" + RCTRequired: + :path: "../node_modules/react-native/Libraries/Required" + RCTTypeSafety: + :path: "../node_modules/react-native/Libraries/TypeSafety" + React: + :path: "../node_modules/react-native/" + React-callinvoker: + :path: "../node_modules/react-native/ReactCommon/callinvoker" + React-Core: + :path: "../node_modules/react-native/" + React-CoreModules: + :path: "../node_modules/react-native/React/CoreModules" + React-cxxreact: + :path: "../node_modules/react-native/ReactCommon/cxxreact" + React-debug: + :path: "../node_modules/react-native/ReactCommon/react/debug" + React-defaultsnativemodule: + :path: "../node_modules/react-native/ReactCommon/react/nativemodule/defaults" + React-domnativemodule: + :path: "../node_modules/react-native/ReactCommon/react/nativemodule/dom" + React-Fabric: + :path: "../node_modules/react-native/ReactCommon" + React-FabricComponents: + :path: "../node_modules/react-native/ReactCommon" + React-FabricImage: + :path: "../node_modules/react-native/ReactCommon" + React-featureflags: + :path: "../node_modules/react-native/ReactCommon/react/featureflags" + React-featureflagsnativemodule: + :path: "../node_modules/react-native/ReactCommon/react/nativemodule/featureflags" + React-graphics: + :path: "../node_modules/react-native/ReactCommon/react/renderer/graphics" + React-hermes: + :path: "../node_modules/react-native/ReactCommon/hermes" + React-idlecallbacksnativemodule: + :path: "../node_modules/react-native/ReactCommon/react/nativemodule/idlecallbacks" + React-ImageManager: + :path: "../node_modules/react-native/ReactCommon/react/renderer/imagemanager/platform/ios" + React-jserrorhandler: + :path: "../node_modules/react-native/ReactCommon/jserrorhandler" + React-jsi: + :path: "../node_modules/react-native/ReactCommon/jsi" + React-jsiexecutor: + :path: "../node_modules/react-native/ReactCommon/jsiexecutor" + React-jsinspector: + :path: "../node_modules/react-native/ReactCommon/jsinspector-modern" + React-jsitracing: + :path: "../node_modules/react-native/ReactCommon/hermes/executor/" + React-logger: + :path: "../node_modules/react-native/ReactCommon/logger" + React-Mapbuffer: + :path: "../node_modules/react-native/ReactCommon" + React-microtasksnativemodule: + :path: "../node_modules/react-native/ReactCommon/react/nativemodule/microtasks" + react-native-blur: + :path: "../node_modules/@react-native-community/blur" + react-native-device-brightness: + :path: "../node_modules/@adrianso/react-native-device-brightness" + react-native-get-random-values: + :path: "../node_modules/react-native-get-random-values" + react-native-netinfo: + :path: "../node_modules/@react-native-community/netinfo" + react-native-safe-area-context: + :path: "../node_modules/react-native-safe-area-context" + react-native-slider: + :path: "../node_modules/@react-native-community/slider" + react-native-video: + :path: "../node_modules/react-native-video" + react-native-vlc-media-player: + :path: "../node_modules/react-native-vlc-media-player" + React-nativeconfig: + :path: "../node_modules/react-native/ReactCommon" + React-NativeModulesApple: + :path: "../node_modules/react-native/ReactCommon/react/nativemodule/core/platform/ios" + React-perflogger: + :path: "../node_modules/react-native/ReactCommon/reactperflogger" + React-performancetimeline: + :path: "../node_modules/react-native/ReactCommon/react/performance/timeline" + React-RCTActionSheet: + :path: "../node_modules/react-native/Libraries/ActionSheetIOS" + React-RCTAnimation: + :path: "../node_modules/react-native/Libraries/NativeAnimation" + React-RCTAppDelegate: + :path: "../node_modules/react-native/Libraries/AppDelegate" + React-RCTBlob: + :path: "../node_modules/react-native/Libraries/Blob" + React-RCTFabric: + :path: "../node_modules/react-native/React" + React-RCTImage: + :path: "../node_modules/react-native/Libraries/Image" + React-RCTLinking: + :path: "../node_modules/react-native/Libraries/LinkingIOS" + React-RCTNetwork: + :path: "../node_modules/react-native/Libraries/Network" + React-RCTSettings: + :path: "../node_modules/react-native/Libraries/Settings" + React-RCTText: + :path: "../node_modules/react-native/Libraries/Text" + React-RCTVibration: + :path: "../node_modules/react-native/Libraries/Vibration" + React-rendererconsistency: + :path: "../node_modules/react-native/ReactCommon/react/renderer/consistency" + React-rendererdebug: + :path: "../node_modules/react-native/ReactCommon/react/renderer/debug" + React-rncore: + :path: "../node_modules/react-native/ReactCommon" + React-RuntimeApple: + :path: "../node_modules/react-native/ReactCommon/react/runtime/platform/ios" + React-RuntimeCore: + :path: "../node_modules/react-native/ReactCommon/react/runtime" + React-runtimeexecutor: + :path: "../node_modules/react-native/ReactCommon/runtimeexecutor" + React-RuntimeHermes: + :path: "../node_modules/react-native/ReactCommon/react/runtime" + React-runtimescheduler: + :path: "../node_modules/react-native/ReactCommon/react/renderer/runtimescheduler" + React-timing: + :path: "../node_modules/react-native/ReactCommon/react/timing" + React-utils: + :path: "../node_modules/react-native/ReactCommon/react/utils" + ReactCodegen: + :path: build/generated/ios + ReactCommon: + :path: "../node_modules/react-native/ReactCommon" + RNCAsyncStorage: + :path: "../node_modules/@react-native-async-storage/async-storage" + RNCPicker: + :path: "../node_modules/@react-native-picker/picker" + RNGestureHandler: + :path: "../node_modules/react-native-gesture-handler" + RNReanimated: + :path: "../node_modules/react-native-reanimated" + RNScreens: + :path: "../node_modules/react-native-screens" + RNSentry: + :path: "../node_modules/@sentry/react-native" + RNSVG: + :path: "../node_modules/react-native-svg" + Yoga: + :path: "../node_modules/react-native/ReactCommon/yoga" + +CHECKOUT OPTIONS: + DisplayCriteria: + :commit: 8fe5feb73ca3ee5092d2ed1dd8fcb692c10e3c11 + :git: https://github.com/kingslay/KSPlayer.git + FFmpegKit: + :commit: d7048037a2eb94a3b08113fbf43aa92bdcb332d9 + :git: https://github.com/kingslay/FFmpegKit.git + KSPlayer: + :commit: 8fe5feb73ca3ee5092d2ed1dd8fcb692c10e3c11 + :git: https://github.com/kingslay/KSPlayer.git + Libass: + :commit: d7048037a2eb94a3b08113fbf43aa92bdcb332d9 + :git: https://github.com/kingslay/FFmpegKit.git + +SPEC CHECKSUMS: + boost: 1dca942403ed9342f98334bf4c3621f011aa7946 + DisplayCriteria: bb0a90faf14b30848bc50ac0516340ce50164187 + DoubleConversion: f16ae600a246532c4020132d54af21d0ddb2a385 + EASClient: 88b5fd19d0787186a0c7e6ba76deb2d4f96395ce + EXApplication: 4c72f6017a14a65e338c5e74fca418f35141e819 + EXConstants: fcfc75800824ac2d5c592b5bc74130bad17b146b + EXJSONUtils: 01fc7492b66c234e395dcffdd5f53439c5c29c93 + EXManifests: a19d50504b8826546a4782770317bc83fffec87d + EXNotifications: 9d3d17e52c95f377750d4a2ae553a716313dd4aa + Expo: 1687edb10c76b0c0f135306d6ae245379f50ed54 + expo-dev-client: db44302cdbe0ec55b0ef1849c9a23a76dec6dbac + expo-dev-launcher: 792cd1c83fbec4a1a66fe91a0c283368dbad851c + expo-dev-menu: dd3197d2b0107ee036ffd85f95e75a950ab52ada + expo-dev-menu-interface: 00dc42302a72722fdecec3fa048de84a9133bcc4 + ExpoAsset: 48386d40d53a8c1738929b3ed509bcad595b5516 + ExpoBlur: 392c1207f71d0ecf22371621c1fbd44ba84d9742 + ExpoBrightness: c0011699a3225c869666e266326774a6fb6a9075 + ExpoCrypto: e97e864c8d7b9ce4a000bca45dddb93544a1b2b4 + ExpoDevice: d36ab4186b6799a28fd449bb9a1c77455f23fd1a + ExpoFileSystem: 42d363d3b96f9afab980dcef60d5657a4443c655 + ExpoFont: f354e926f8feae5e831ec8087f36652b44a0b188 + ExpoHaptics: 8d199b2f33245ea85289ff6c954c7ee7c00a5b5d + ExpoImage: d840b256050f4428d2942bc2b6e9251f9e0d7021 + ExpoKeepAwake: b0171a73665bfcefcfcc311742a72a956e6aa680 + ExpoLinearGradient: 35ebd83b16f80b3add053a2fd68cc328ed927f60 + ExpoLinking: 8d12bee174ba0cdf31239706578e29e74a417402 + ExpoLocalization: 7776ea3bdb112125390745bbaf919b734b2ad1c7 + ExpoModulesCore: c25d77625038b1968ea1afefc719862c0d8dd993 + ExpoRandom: d1444df65007bdd4070009efd5dab18e20bf0f00 + ExpoScreenOrientation: af8b31d3164239a4ef3ea0b32bd63fb65df70d58 + ExpoSystemUI: b82a45cf0f6a4fa18d07c46deba8725dd27688b4 + ExpoWebBrowser: a212e6b480d8857d3e441fba51e0c968333803b3 + EXStructuredHeaders: 09c70347b282e3d2507e25fb4c747b1b885f87f6 + EXUpdates: 4fc73950af0af03388063823e75eb2f7566a48c9 + EXUpdatesInterface: 7c977640bdd8b85833c19e3959ba46145c5719db + fast_float: 06eeec4fe712a76acc9376682e4808b05ce978b6 + FBLazyVector: 7605ea4810e0e10ae4815292433c09bf4324ba45 + FFmpegKit: 3885085fbbc320745838ee4c8a1f9c5e5953dab2 + fmt: 01b82d4ca6470831d1cc0852a1af644be019e8f6 + glog: 08b301085f15bcbb6ff8632a8ebaf239aae04e6a + hermes-engine: 9e868dc7be781364296d6ee2f56d0c1a9ef0bb11 + ImageColors: 51cd79f7a9d2524b7a681c660b0a50574085563b + KSPlayer: f163ac6195f240b6fa5b8225aeb39ec811a70c62 + Libass: e88af2324e1217e3a4c8bdc675f6f23a9dfc7677 + libavif: 84bbb62fb232c3018d6f1bab79beea87e35de7b7 + libdav1d: 23581a4d8ec811ff171ed5e2e05cd27bad64c39f + lottie-ios: a881093fab623c467d3bce374367755c272bdd59 + lottie-react-native: 4ba06e2e4985c53dda6595a880f780e7ff551df1 + MobileVLCKit: 144d5f565512d1147d63b0fa1379231b3fd66535 + RCT-Folly: ea9d9256ba7f9322ef911169a9f696e5857b9e17 + RCTDeprecation: ebe712bb05077934b16c6bf25228bdec34b64f83 + RCTRequired: ca91e5dd26b64f577b528044c962baf171c6b716 + RCTTypeSafety: e7678bd60850ca5a41df9b8dc7154638cb66871f + ReachabilitySwift: 32793e867593cfc1177f5d16491e3a197d2fccda + React: 4641770499c39f45d4e7cde1eba30e081f9d8a3d + React-callinvoker: 4bef67b5c7f3f68db5929ab6a4d44b8a002998ea + React-Core: a68cea3e762814e60ecc3fa521c7f14c36c99245 + React-CoreModules: d81b1eaf8066add66299bab9d23c9f00c9484c7c + React-cxxreact: 984f8b1feeca37181d4e95301fcd6f5f6501c6ab + React-debug: 817160c07dc8d24d020fbd1eac7b3558ffc08964 + React-defaultsnativemodule: 18a684542f82ce1897552a1c4b847be414c9566e + React-domnativemodule: 90bdd4ec3ab38c47cfc3461c1e9283a8507d613f + React-Fabric: f6dade7007533daeb785ba5925039d83f343be4b + React-FabricComponents: b0655cc3e1b5ae12a4a1119aa7d8308f0ad33520 + React-FabricImage: 9b157c4c01ac2bf433f834f0e1e5fe234113a576 + React-featureflags: f2792b067a351d86fdc7bec23db3b9a2f2c8d26c + React-featureflagsnativemodule: 742a8325b3c821d2a1ca13a6d2a0fc72d04555e0 + React-graphics: 68969e4e49d73f89da7abef4116c9b5f466aa121 + React-hermes: ac0bcba26a5d288ebc99b500e1097da2d0297ddf + React-idlecallbacksnativemodule: d61d9c9816131bf70d3d80cd04889fc625ee523f + React-ImageManager: e906eec93a9eb6102a06576b89d48d80a4683020 + React-jserrorhandler: ac5dde01104ff444e043cad8f574ca02756e20d6 + React-jsi: 496fa2b9d63b726aeb07d0ac800064617d71211d + React-jsiexecutor: dd22ab48371b80f37a0a30d0e8915b6d0f43a893 + React-jsinspector: 4629ac376f5765e684d19064f2093e55c97fd086 + React-jsitracing: 7a1c9cd484248870cf660733cd3b8114d54c035f + React-logger: c4052eb941cca9a097ef01b59543a656dc088559 + React-Mapbuffer: 33546a3ebefbccb8770c33a1f8a5554fa96a54de + React-microtasksnativemodule: d80ff86c8902872d397d9622f1a97aadcc12cead + react-native-blur: 535f5810fceb751b25db90c925ffa42ed007def7 + react-native-device-brightness: 1a997350d060c3df9f303b1df84a4f7c5cbeb924 + react-native-get-random-values: d16467cf726c618e9c7a8c3c39c31faa2244bbba + react-native-netinfo: cec9c4e86083cb5b6aba0e0711f563e2fbbff187 + react-native-safe-area-context: cd916088cac5300c3266876218377518987b995e + react-native-slider: d8c35cc0162af73c9448f4b18c34d09e841cc1ab + react-native-video: bc6104529a6fde35127a1625b30d557412fdb70d + react-native-vlc-media-player: da3308dda896d4ff7abfacadb8f981752bf9b425 + React-nativeconfig: 8efdb1ef1e9158c77098a93085438f7e7b463678 + React-NativeModulesApple: cebca2e5320a3d66e123cade23bd90a167ffce5e + React-perflogger: 72e653eb3aba9122f9e57cf012d22d2486f33358 + React-performancetimeline: cd6a9374a72001165995d2ab632f672df04076dc + React-RCTActionSheet: aacf2375084dea6e7c221f4a727e579f732ff342 + React-RCTAnimation: 395ab53fd064dff81507c15efb781c8684d9a585 + React-RCTAppDelegate: 345a6f1b82abc578437df0ce7e9c48740eca827c + React-RCTBlob: 13311e554c1a367de063c10ee7c5e6573b2dd1d6 + React-RCTFabric: 007b1a98201cc49b5bc6e1417d7fe3f6fc6e2b78 + React-RCTImage: 1b1f914bcc12187c49ba5d949dac38c2eb9f5cc8 + React-RCTLinking: 4ac7c42beb65e36fba0376f3498f3cd8dd0be7fa + React-RCTNetwork: 938902773add4381e84426a7aa17a2414f5f94f7 + React-RCTSettings: e848f1ba17a7a18479cf5a31d28145f567da8223 + React-RCTText: 7e98fafdde7d29e888b80f0b35544e0cb07913cf + React-RCTVibration: cd7d80affd97dc7afa62f9acd491419558b64b78 + React-rendererconsistency: b4917053ecbaa91469c67a4319701c9dc0d40be6 + React-rendererdebug: aa181c36dd6cf5b35511d1ed875d6638fd38f0ec + React-rncore: 120d21715c9b4ba8f798bffe986cb769b988dd74 + React-RuntimeApple: d033becbbd1eba6f9f6e3af6f1893030ce203edd + React-RuntimeCore: 38af280bb678e66ba000a3c3d42920b2a138eebb + React-runtimeexecutor: 877596f82f5632d073e121cba2d2084b76a76899 + React-RuntimeHermes: 37aad735ff21ca6de2d8450a96de1afe9f86c385 + React-runtimescheduler: 8ec34cc885281a34696ea16c4fd86892d631f38d + React-timing: 331cbf9f2668c67faddfd2e46bb7f41cbd9320b9 + React-utils: ed818f19ab445000d6b5c4efa9d462449326cc9f + ReactCodegen: f853a20cc9125c5521c8766b4b49375fec20648b + ReactCommon: 300d8d9c5cb1a6cd79a67cf5d8f91e4d477195f9 + RNCAsyncStorage: 66991bb6672ed988a8c56289a08bf4fc3a29d4b3 + RNCPicker: 4995c384c0a33966352c70cc800012a4ee658a37 + RNGestureHandler: fffddeb8af59709c6d8de11b6461a6af63cad532 + RNReanimated: 2e5069649cbab2c946652d3b97589b2ae0526220 + RNScreens: 362f4c861dd155f898908d5035d97b07a3f1a9d1 + RNSentry: ac7beae04304d95491a512b5abf6926d4501c73c + RNSVG: b889dc9c1948eeea0576a16cc405c91c37a12c19 + SDWebImage: 8a6b7b160b4d710e2a22b6900e25301075c34cb3 + SDWebImageAVIFCoder: 00310d246aab3232ce77f1d8f0076f8c4b021d90 + SDWebImageSVGCoder: 15a300a97ec1c8ac958f009c02220ac0402e936c + Sentry: 1ca8405451040482877dcd344dfa3ef80b646631 + SocketRocket: d4aabe649be1e368d1318fdf28a022d714d65748 + Yoga: feb4910aba9742cfedc059e2b2902e22ffe9954a + +PODFILE CHECKSUM: 2743ffad4c68da0945d48cdefa62202d726c27d2 + +COCOAPODS: 1.16.2 diff --git a/ios/Podfile.properties.json b/ios/Podfile.properties.json new file mode 100644 index 0000000..417e2e5 --- /dev/null +++ b/ios/Podfile.properties.json @@ -0,0 +1,5 @@ +{ + "expo.jsEngine": "hermes", + "EX_DEV_CLIENT_NETWORK_INSPECTOR": "true", + "newArchEnabled": "true" +} diff --git a/ios/scripts/add_ksplayer_bridge.rb b/ios/scripts/add_ksplayer_bridge.rb new file mode 100644 index 0000000..96344f8 --- /dev/null +++ b/ios/scripts/add_ksplayer_bridge.rb @@ -0,0 +1,43 @@ +require 'xcodeproj' +require 'fileutils' + +project_path = File.expand_path('../Nuvio.xcodeproj', __dir__) +project = Xcodeproj::Project.open(project_path) + +app_dir = File.expand_path('..', __dir__) + +target_name = 'Nuvio' +bridge_files = [ + File.expand_path('Nuvio/KSPlayerView.swift', app_dir), + File.expand_path('Nuvio/KSPlayerViewManager.swift', app_dir), + File.expand_path('Nuvio/KSPlayerManager.m', app_dir), + File.expand_path('Nuvio/KSPlayerModule.swift', app_dir), +] + +missing = bridge_files.reject { |p| File.exist?(p) } +if missing.any? + abort "Missing files: \n#{missing.join("\n")}" +end + +target = project.targets.find { |t| t.name == target_name } +abort "Target '#{target_name}' not found" unless target + +# Ensure group exists at the correct relative path +root_group = project.main_group +app_group = root_group['Nuvio'] || root_group.new_group('Nuvio', 'Nuvio') + +added_files = [] +bridge_files.each do |file_path| + relative_path = Pathname.new(file_path).relative_path_from(Pathname.new(project_path).dirname).to_s + ref = project.files.find { |f| f.path == relative_path } + unless ref + ref = app_group.new_file(relative_path) + added_files << relative_path + end + unless target.source_build_phase.files_references.include?(ref) + target.add_file_references([ref]) + end +end + +project.save +puts "Ensured bridge files are added to target '#{target_name}':\n - #{(added_files.empty? ? '(no new files)' : added_files.join("\n - "))}" diff --git a/ios/sentry.properties b/ios/sentry.properties new file mode 100644 index 0000000..5581e03 --- /dev/null +++ b/ios/sentry.properties @@ -0,0 +1,4 @@ +defaults.url=https://sentry.io/ +defaults.org=tapframe +defaults.project=react-native +# Using SENTRY_AUTH_TOKEN environment variable \ No newline at end of file diff --git a/ios/vendor/bundle/ruby/2.6.0/bin/xcodeproj b/ios/vendor/bundle/ruby/2.6.0/bin/xcodeproj new file mode 100644 index 0000000..8358e7d --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/bin/xcodeproj @@ -0,0 +1,27 @@ +#!/usr/bin/env ruby +# +# This file was generated by RubyGems. +# +# The application 'xcodeproj' is installed as part of a gem, and +# this file is here to facilitate running it. +# + +require 'rubygems' + +version = ">= 0.a" + +str = ARGV.first +if str + str = str.b[/\A_(.*)_\z/, 1] + if str and Gem::Version.correct?(str) + version = str + ARGV.shift + end +end + +if Gem.respond_to?(:activate_bin_path) +load Gem.activate_bin_path('xcodeproj', 'xcodeproj', version) +else +gem "xcodeproj", version +load Gem.bin_path("xcodeproj", "xcodeproj", version) +end diff --git a/ios/vendor/bundle/ruby/2.6.0/cache/CFPropertyList-3.0.7.gem b/ios/vendor/bundle/ruby/2.6.0/cache/CFPropertyList-3.0.7.gem new file mode 100644 index 0000000000000000000000000000000000000000..de3dd7d4c34be8fb53fd645144d12d8810127b48 GIT binary patch literal 18432 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 literal 0 HcmV?d00001 diff --git a/ios/vendor/bundle/ruby/2.6.0/cache/base64-0.3.0.gem b/ios/vendor/bundle/ruby/2.6.0/cache/base64-0.3.0.gem new file mode 100644 index 0000000000000000000000000000000000000000..12f53f14210d7d2db6dac3697edbd53a32c0254b GIT binary patch literal 11776 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

)%r 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 E0qx;Bpa1{> literal 0 HcmV?d00001 diff --git a/ios/vendor/bundle/ruby/2.6.0/cache/claide-1.1.0.gem b/ios/vendor/bundle/ruby/2.6.0/cache/claide-1.1.0.gem new file mode 100644 index 0000000000000000000000000000000000000000..6b0fb2d28f319e5b8d8c1d8e837d35cb1e4682bc GIT binary patch literal 28160 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 J@c&bR{{?y3$B_U4 literal 0 HcmV?d00001 diff --git a/ios/vendor/bundle/ruby/2.6.0/cache/colored2-3.1.2.gem b/ios/vendor/bundle/ruby/2.6.0/cache/colored2-3.1.2.gem new file mode 100644 index 0000000000000000000000000000000000000000..9757ae322b01983b295cf253b34353b9157d3498 GIT binary patch literal 10240 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 literal 0 HcmV?d00001 diff --git a/ios/vendor/bundle/ruby/2.6.0/cache/nanaimo-0.4.0.gem b/ios/vendor/bundle/ruby/2.6.0/cache/nanaimo-0.4.0.gem new file mode 100644 index 0000000000000000000000000000000000000000..9f5ff7f0f8b02ee9679dfcdd6b586d29dc36c1a0 GIT binary patch literal 20480 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ⅇ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 MXb6mk0KG#10CC_UrvLx| literal 0 HcmV?d00001 diff --git a/ios/vendor/bundle/ruby/2.6.0/cache/nkf-0.2.0.gem b/ios/vendor/bundle/ruby/2.6.0/cache/nkf-0.2.0.gem new file mode 100644 index 0000000000000000000000000000000000000000..4485f2448eda4a7680da2527cde35bfe14205087 GIT binary patch literal 194048 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 S34eq8t-x;uek<@FDeyOnQcxTK literal 0 HcmV?d00001 diff --git a/ios/vendor/bundle/ruby/2.6.0/cache/rexml-3.4.4.gem b/ios/vendor/bundle/ruby/2.6.0/cache/rexml-3.4.4.gem new file mode 100644 index 0000000000000000000000000000000000000000..46cc01a80b46264c5b5de45f97a3fc30bcd076c4 GIT binary patch literal 105984 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 literal 0 HcmV?d00001 diff --git a/ios/vendor/bundle/ruby/2.6.0/cache/xcodeproj-1.27.0.gem b/ios/vendor/bundle/ruby/2.6.0/cache/xcodeproj-1.27.0.gem new file mode 100644 index 0000000000000000000000000000000000000000..29e64e0e1bfa78beac7aa4bbb7f2e6ecfe841b60 GIT binary patch literal 83968 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
FiaD& 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 Z0{y@G75 'John Doe', + 'missing' => true, + 'last_seen' => Time.now, + 'friends' => ['Jane Doe','Julian Doe'], + 'likes' => { + 'me' => false + } +} +``` + +## create CFPropertyList::List object + +```ruby +plist = CFPropertyList::List.new +``` + +## call CFPropertyList.guess() to create corresponding CFType values + +```ruby +plist.value = CFPropertyList.guess(data) +``` + +## write plist to file +```ruby +plist.save("example.plist", CFPropertyList::List::FORMAT_BINARY) +``` + +## … later, read it again +```ruby +plist = CFPropertyList::List.new(:file => "example.plist") +data = CFPropertyList.native_types(plist.value) +``` + +# Author and license + +**Author:** Christian Kruse (mailto:cjk@wwwtech.de) + +**Copyright:** Copyright (c) 2010 + +**License:** MIT License + diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/CFPropertyList-3.0.7/README.rdoc b/ios/vendor/bundle/ruby/2.6.0/gems/CFPropertyList-3.0.7/README.rdoc new file mode 100644 index 0000000..a71005c --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/CFPropertyList-3.0.7/README.rdoc @@ -0,0 +1,43 @@ +CFPropertyList implementation +class to read, manipulate and write both XML and binary property list +files (plist(5)) as defined by Apple. Have a look at CFPropertyList::List +for more documentation. + +== Installation + +You could either use ruby gems and install it via + + gem install CFPropertyList + +or you could clone this repository and place it somewhere in your load path. + +== Example + require 'cfpropertylist' + + # create a arbitrary data structure of basic data types + data = { + 'name' => 'John Doe', + 'missing' => true, + 'last_seen' => Time.now, + 'friends' => ['Jane Doe','Julian Doe'], + 'likes' => { + 'me' => false + } + } + + # create CFPropertyList::List object + plist = CFPropertyList::List.new + + # call CFPropertyList.guess() to create corresponding CFType values + plist.value = CFPropertyList.guess(data) + + # write plist to file + plist.save("example.plist", CFPropertyList::List::FORMAT_BINARY) + + # … later, read it again + plist = CFPropertyList::List.new(:file => "example.plist") + data = CFPropertyList.native_types(plist.value) + +Author:: Christian Kruse (mailto:cjk@wwwtech.de) +Copyright:: Copyright (c) 2010 +License:: MIT License diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/CFPropertyList-3.0.7/THANKS b/ios/vendor/bundle/ruby/2.6.0/gems/CFPropertyList-3.0.7/THANKS new file mode 100644 index 0000000..c981a51 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/CFPropertyList-3.0.7/THANKS @@ -0,0 +1,7 @@ +Special thanks to: + +Steve Madsen for providing a lot of performance patches and bugfixes! +Have a look at his Github account: + + + diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/CFPropertyList-3.0.7/lib/cfpropertylist.rb b/ios/vendor/bundle/ruby/2.6.0/gems/CFPropertyList-3.0.7/lib/cfpropertylist.rb new file mode 100644 index 0000000..f83fef7 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/CFPropertyList-3.0.7/lib/cfpropertylist.rb @@ -0,0 +1,6 @@ +# -*- coding: utf-8 -*- + +require 'cfpropertylist/rbCFPropertyList' + + +# eof diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/CFPropertyList-3.0.7/lib/cfpropertylist/rbBinaryCFPropertyList.rb b/ios/vendor/bundle/ruby/2.6.0/gems/CFPropertyList-3.0.7/lib/cfpropertylist/rbBinaryCFPropertyList.rb new file mode 100644 index 0000000..da84b63 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/CFPropertyList-3.0.7/lib/cfpropertylist/rbBinaryCFPropertyList.rb @@ -0,0 +1,594 @@ +# -*- coding: utf-8 -*- + +require 'stringio' + +module CFPropertyList + # Binary PList parser class + class Binary + # Read a binary plist file + def load(opts) + @unique_table = {} + @count_objects = 0 + @object_refs = 0 + + @written_object_count = 0 + @object_table = [] + @object_ref_size = 0 + + @offsets = [] + + fd = nil + if(opts.has_key?(:file)) + fd = File.open(opts[:file],"rb") + file = opts[:file] + else + fd = StringIO.new(opts[:data],"rb") + file = "" + end + + # first, we read the trailer: 32 byte from the end + fd.seek(-32,IO::SEEK_END) + buff = fd.read(32) + + offset_size, object_ref_size, number_of_objects, top_object, table_offset = buff.unpack "x6CCx4Nx4Nx4N" + + # after that, get the offset table + fd.seek(table_offset, IO::SEEK_SET) + coded_offset_table = fd.read(number_of_objects * offset_size) + raise CFFormatError.new("#{file}: Format error!") unless coded_offset_table.bytesize == number_of_objects * offset_size + + @count_objects = number_of_objects + + # decode offset table + if(offset_size != 3) + formats = ["","C*","n*","","N*"] + @offsets = coded_offset_table.unpack(formats[offset_size]) + else + @offsets = coded_offset_table.unpack("C*").each_slice(3).map { + |x,y,z| (x << 16) | (y << 8) | z + } + end + + @object_ref_size = object_ref_size + val = read_binary_object_at(file,fd,top_object) + + fd.close + val + end + + + # Convert CFPropertyList to binary format; since we have to count our objects we simply unique CFDictionary and CFArray + def to_str(opts={}) + @unique_table = {} + @count_objects = 0 + @object_refs = 0 + + @written_object_count = 0 + @object_table = [] + + @offsets = [] + + binary_str = "bplist00" + + @object_refs = count_object_refs(opts[:root]) + + opts[:root].to_binary(self) + + next_offset = 8 + offsets = @object_table.map do |object| + offset = next_offset + next_offset += object.bytesize + offset + end + binary_str << @object_table.join + + table_offset = next_offset + offset_size = Binary.bytes_needed(table_offset) + + if offset_size < 8 + # Fast path: encode the entire offset array at once. + binary_str << offsets.pack((%w(C n N N)[offset_size - 1]) + '*') + else + # Slow path: host may be little or big endian, must pack each offset + # separately. + offsets.each do |offset| + binary_str << "#{Binary.pack_it_with_size(offset_size,offset)}" + end + end + + binary_str << [offset_size, object_ref_size(@object_refs)].pack("x6CC") + binary_str << [@object_table.size].pack("x4N") + binary_str << [0].pack("x4N") + binary_str << [table_offset].pack("x4N") + + binary_str + end + + def object_ref_size object_refs + Binary.bytes_needed(object_refs) + end + + # read a „null” type (i.e. null byte, marker byte, bool value) + def read_binary_null_type(length) + case length + when 0 then 0 # null byte + when 8 then CFBoolean.new(false) + when 9 then CFBoolean.new(true) + when 15 then 15 # fill type + else + raise CFFormatError.new("unknown null type: #{length}") + end + end + protected :read_binary_null_type + + # read a binary int value + def read_binary_int(fname,fd,length) + if length > 4 + raise CFFormatError.new("Integer greater than 16 bytes: #{length}") + end + + nbytes = 1 << length + + buff = fd.read(nbytes) + + CFInteger.new( + case length + when 0 then buff.unpack("C")[0] + when 1 then buff.unpack("n")[0] + when 2 then buff.unpack("N")[0] + # 8 byte integers are always signed + when 3 then buff.unpack("q>")[0] + # 16 byte integers are used to represent unsigned 8 byte integers + # where the unsigned value is stored in the lower 8 bytes and the + # upper 8 bytes are unused. + when 4 then buff.unpack("Q>Q>")[1] + end + ) + end + protected :read_binary_int + + # read a binary real value + def read_binary_real(fname,fd,length) + raise CFFormatError.new("Real greater than 8 bytes: #{length}") if length > 3 + + nbytes = 1 << length + buff = fd.read(nbytes) + + CFReal.new( + case length + when 0 # 1 byte float? must be an error + raise CFFormatError.new("got #{length+1} byte float, must be an error!") + when 1 # 2 byte float? must be an error + raise CFFormatError.new("got #{length+1} byte float, must be an error!") + when 2 then + buff.reverse.unpack("e")[0] + when 3 then + buff.reverse.unpack("E")[0] + else + fail "unexpected length: #{length}" + end + ) + end + protected :read_binary_real + + # read a binary date value + def read_binary_date(fname,fd,length) + raise CFFormatError.new("Date greater than 8 bytes: #{length}") if length > 3 + + nbytes = 1 << length + buff = fd.read(nbytes) + + CFDate.new( + case length + when 0 then # 1 byte CFDate is an error + raise CFFormatError.new("#{length+1} byte CFDate, error") + when 1 then # 2 byte CFDate is an error + raise CFFormatError.new("#{length+1} byte CFDate, error") + when 2 then + buff.reverse.unpack("e")[0] + when 3 then + buff.reverse.unpack("E")[0] + end, + CFDate::TIMESTAMP_APPLE + ) + end + protected :read_binary_date + + # Read a binary data value + def read_binary_data(fname,fd,length) + CFData.new(read_fd(fd, length), CFData::DATA_RAW) + end + protected :read_binary_data + + def read_fd fd, length + length > 0 ? fd.read(length) : "" + end + + # Read a binary string value + def read_binary_string(fname,fd,length) + buff = read_fd fd, length + @unique_table[buff] = true unless @unique_table.has_key?(buff) + CFString.new(buff) + end + protected :read_binary_string + + # Convert the given string from one charset to another + def Binary.charset_convert(str,from,to="UTF-8") + return str.dup.force_encoding(from).encode(to) if str.respond_to?("encode") + Iconv.conv(to,from,str) + end + + # Count characters considering character set + def Binary.charset_strlen(str,charset="UTF-8") + if str.respond_to?(:encode) + size = str.length + else + utf8_str = Iconv.conv("UTF-8",charset,str) + size = utf8_str.scan(/./mu).size + end + + # UTF-16 code units in the range D800-DBFF are the beginning of + # a surrogate pair, and count as one additional character for + # length calculation. + if charset =~ /^UTF-16/ + if str.respond_to?(:encode) + str.bytes.to_a.each_slice(2) { |pair| size += 1 if (0xd8..0xdb).include?(pair[0]) } + else + str.split('').each_slice(2) { |pair| size += 1 if ("\xd8".."\xdb").include?(pair[0]) } + end + end + + size + end + + # Read a unicode string value, coded as UTF-16BE + def read_binary_unicode_string(fname,fd,length) + # The problem is: we get the length of the string IN CHARACTERS; + # since a char in UTF-16 can be 16 or 32 bit long, we don't really know + # how long the string is in bytes + buff = fd.read(2*length) + + @unique_table[buff] = true unless @unique_table.has_key?(buff) + CFString.new(Binary.charset_convert(buff,"UTF-16BE","UTF-8")) + end + protected :read_binary_unicode_string + + def unpack_with_size(nbytes, buff) + format = ["C*", "n*", "N*", "N*"][nbytes - 1]; + + if nbytes == 3 + buff = "\0" + buff.scan(/.{1,3}/).join("\0") + end + + return buff.unpack(format) + end + + # Read an binary array value, including contained objects + def read_binary_array(fname,fd,length) + ary = [] + + # first: read object refs + if(length != 0) + buff = fd.read(length * @object_ref_size) + objects = unpack_with_size(@object_ref_size, buff) #buff.unpack(@object_ref_size == 1 ? "C*" : "n*") + + # now: read objects + 0.upto(length-1) do |i| + object = read_binary_object_at(fname,fd,objects[i]) + ary.push object + end + end + + CFArray.new(ary) + end + protected :read_binary_array + + # Read a dictionary value, including contained objects + def read_binary_dict(fname,fd,length) + dict = {} + + # first: read keys + if(length != 0) then + buff = fd.read(length * @object_ref_size) + keys = unpack_with_size(@object_ref_size, buff) + + # second: read object refs + buff = fd.read(length * @object_ref_size) + objects = unpack_with_size(@object_ref_size, buff) + + # read real keys and objects + 0.upto(length-1) do |i| + key = read_binary_object_at(fname,fd,keys[i]) + object = read_binary_object_at(fname,fd,objects[i]) + dict[key.value] = object + end + end + + CFDictionary.new(dict) + end + protected :read_binary_dict + + # Read an object type byte, decode it and delegate to the correct + # reader function + def read_binary_object(fname,fd) + # first: read the marker byte + buff = fd.read(1) + + object_length = buff.unpack("C*") + object_length = object_length[0] & 0xF + + buff = buff.unpack("H*") + object_type = buff[0][0].chr + + if(object_type != "0" && object_length == 15) then + object_length = read_binary_object(fname,fd) + object_length = object_length.value + end + + case object_type + when '0' # null, false, true, fillbyte + read_binary_null_type(object_length) + when '1' # integer + read_binary_int(fname,fd,object_length) + when '2' # real + read_binary_real(fname,fd,object_length) + when '3' # date + read_binary_date(fname,fd,object_length) + when '4' # data + read_binary_data(fname,fd,object_length) + when '5' # byte string, usually utf8 encoded + read_binary_string(fname,fd,object_length) + when '6' # unicode string (utf16be) + read_binary_unicode_string(fname,fd,object_length) + when '8' + CFUid.new(read_binary_int(fname, fd, object_length).value) + when 'a' # array + read_binary_array(fname,fd,object_length) + when 'd' # dictionary + read_binary_dict(fname,fd,object_length) + end + end + protected :read_binary_object + + # Read an object type byte at position $pos, decode it and delegate to the correct reader function + def read_binary_object_at(fname,fd,pos) + position = @offsets[pos] + fd.seek(position,IO::SEEK_SET) + read_binary_object(fname,fd) + end + protected :read_binary_object_at + + # pack an +int+ of +nbytes+ with size + def Binary.pack_it_with_size(nbytes,int) + case nbytes + when 1 then [int].pack('c') + when 2 then [int].pack('n') + when 4 then [int].pack('N') + when 8 + [int >> 32, int & 0xFFFFFFFF].pack('NN') + else + raise CFFormatError.new("Don't know how to pack #{nbytes} byte integer") + end + end + + def Binary.pack_int_array_with_size(nbytes, array) + case nbytes + when 1 then array.pack('C*') + when 2 then array.pack('n*') + when 4 then array.pack('N*') + when 8 + array.map { |int| [int >> 32, int & 0xFFFFFFFF].pack('NN') }.join + else + raise CFFormatError.new("Don't know how to pack #{nbytes} byte integer") + end + end + + # calculate how many bytes are needed to save +count+ + def Binary.bytes_needed(count) + case + when count < 2**8 then 1 + when count < 2**16 then 2 + when count < 2**32 then 4 + when count < 2**64 then 8 + else + raise CFFormatError.new("Data size too large: #{count}") + end + end + + # Create a type byte for binary format as defined by apple + def Binary.type_bytes(type, length) + if length < 15 + [(type << 4) | length].pack('C') + else + bytes = [(type << 4) | 0xF] + if length <= 0xFF + bytes.push(0x10, length).pack('CCC') # 1 byte length + elsif length <= 0xFFFF + bytes.push(0x11, length).pack('CCn') # 2 byte length + elsif length <= 0xFFFFFFFF + bytes.push(0x12, length).pack('CCN') # 4 byte length + elsif length <= 0x7FFFFFFFFFFFFFFF + bytes.push(0x13, length >> 32, length & 0xFFFFFFFF).pack('CCNN') # 8 byte length + else + raise CFFormatError.new("Integer too large: #{int}") + end + end + end + + def count_object_refs(object) + case object + when CFArray + contained_refs = 0 + object.value.each do |element| + if CFArray === element || CFDictionary === element + contained_refs += count_object_refs(element) + end + end + return object.value.size + contained_refs + when CFDictionary + contained_refs = 0 + object.value.each_value do |value| + if CFArray === value || CFDictionary === value + contained_refs += count_object_refs(value) + end + end + return object.value.keys.size * 2 + contained_refs + else + return 0 + end + end + + def Binary.ascii_string?(str) + if str.respond_to?(:ascii_only?) + str.ascii_only? + else + str !~ /[\x80-\xFF]/mn + end + end + + # Uniques and transforms a string value to binary format and adds it to the object table + def string_to_binary(val) + val = val.to_s + + @unique_table[val] ||= begin + if !Binary.ascii_string?(val) + val = Binary.charset_convert(val,"UTF-8","UTF-16BE") + bdata = Binary.type_bytes(0b0110, Binary.charset_strlen(val,"UTF-16BE")) + + val.force_encoding("ASCII-8BIT") if val.respond_to?("encode") + @object_table[@written_object_count] = bdata << val + else + bdata = Binary.type_bytes(0b0101,val.bytesize) + @object_table[@written_object_count] = bdata << val + end + + @written_object_count += 1 + @written_object_count - 1 + end + end + + # Codes an integer to binary format + def int_to_binary(value) + # Note: nbytes is actually an exponent. number of bytes = 2**nbytes. + nbytes = 0 + nbytes = 1 if value > 0xFF # 1 byte unsigned integer + nbytes += 1 if value > 0xFFFF # 4 byte unsigned integer + nbytes += 1 if value > 0xFFFFFFFF # 8 byte unsigned integer + nbytes += 1 if value > 0x7FFFFFFFFFFFFFFF # 8 byte unsigned integer, stored in lower half of 16 bytes + nbytes = 3 if value < 0 # signed integers always stored in 8 bytes + + Binary.type_bytes(0b0001, nbytes) << + if nbytes < 4 + [value].pack(["C", "n", "N", "q>"][nbytes]) + else # nbytes == 4 + [0,value].pack("Q>Q>") + end + end + + # Codes a real value to binary format + def real_to_binary(val) + Binary.type_bytes(0b0010,3) << [val].pack("E").reverse + end + + # Converts a numeric value to binary and adds it to the object table + def num_to_binary(value) + @object_table[@written_object_count] = + if value.is_a?(CFInteger) + int_to_binary(value.value) + else + real_to_binary(value.value) + end + + @written_object_count += 1 + @written_object_count - 1 + end + + def uid_to_binary(value) + nbytes = 0 + nbytes = 1 if value > 0xFF # 1 byte integer + nbytes += 1 if value > 0xFFFF # 4 byte integer + nbytes += 1 if value > 0xFFFFFFFF # 8 byte integer + nbytes = 3 if value < 0 # 8 byte integer, since signed + + @object_table[@written_object_count] = Binary.type_bytes(0b1000, nbytes) << + if nbytes < 3 + [value].pack( + if nbytes == 0 then "C" + elsif nbytes == 1 then "n" + else "N" + end + ) + else + # 64 bit signed integer; we need the higher and the lower 32 bit of the value + high_word = value >> 32 + low_word = value & 0xFFFFFFFF + [high_word,low_word].pack("NN") + end + + @written_object_count += 1 + @written_object_count - 1 + end + + # Convert date value (apple format) to binary and adds it to the object table + def date_to_binary(val) + val = val.getutc.to_f - CFDate::DATE_DIFF_APPLE_UNIX # CFDate is a real, number of seconds since 01/01/2001 00:00:00 GMT + + @object_table[@written_object_count] = + (Binary.type_bytes(0b0011, 3) << [val].pack("E").reverse) + + @written_object_count += 1 + @written_object_count - 1 + end + + # Convert a bool value to binary and add it to the object table + def bool_to_binary(val) + + @object_table[@written_object_count] = val ? "\x9" : "\x8" # 0x9 is 1001, type indicator for true; 0x8 is 1000, type indicator for false + @written_object_count += 1 + @written_object_count - 1 + end + + # Convert data value to binary format and add it to the object table + def data_to_binary(val) + @object_table[@written_object_count] = + (Binary.type_bytes(0b0100, val.bytesize) << val) + + @written_object_count += 1 + @written_object_count - 1 + end + + # Convert array to binary format and add it to the object table + def array_to_binary(val) + saved_object_count = @written_object_count + @written_object_count += 1 + #@object_refs += val.value.size + + values = val.value.map { |v| v.to_binary(self) } + bdata = Binary.type_bytes(0b1010, val.value.size) << + Binary.pack_int_array_with_size(object_ref_size(@object_refs), + values) + + @object_table[saved_object_count] = bdata + saved_object_count + end + + # Convert dictionary to binary format and add it to the object table + def dict_to_binary(val) + saved_object_count = @written_object_count + @written_object_count += 1 + + #@object_refs += val.value.keys.size * 2 + + keys_and_values = val.value.keys.map { |k| CFString.new(k).to_binary(self) } + keys_and_values.concat(val.value.values.map { |v| v.to_binary(self) }) + + bdata = Binary.type_bytes(0b1101,val.value.size) << + Binary.pack_int_array_with_size(object_ref_size(@object_refs), keys_and_values) + + @object_table[saved_object_count] = bdata + return saved_object_count + end + end +end + +# eof diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/CFPropertyList-3.0.7/lib/cfpropertylist/rbCFPlistError.rb b/ios/vendor/bundle/ruby/2.6.0/gems/CFPropertyList-3.0.7/lib/cfpropertylist/rbCFPlistError.rb new file mode 100644 index 0000000..e276565 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/CFPropertyList-3.0.7/lib/cfpropertylist/rbCFPlistError.rb @@ -0,0 +1,26 @@ +# -*- coding: utf-8 -*- +# +# Exceptions used: +# CFPlistError:: General base exception +# CFFormatError:: Format error +# CFTypeError:: Type error +# +# Easy and simple :-) +# +# Author:: Christian Kruse (mailto:cjk@wwwtech.de) +# Copyright:: Copyright (c) 2010 +# License:: MIT License + +# general plist error. All exceptions thrown are derived from this class. +class CFPlistError < StandardError +end + +# Exception thrown when format errors occur +class CFFormatError < CFPlistError +end + +# Exception thrown when type errors occur +class CFTypeError < CFPlistError +end + +# eof diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/CFPropertyList-3.0.7/lib/cfpropertylist/rbCFPropertyList.rb b/ios/vendor/bundle/ruby/2.6.0/gems/CFPropertyList-3.0.7/lib/cfpropertylist/rbCFPropertyList.rb new file mode 100644 index 0000000..d31ba51 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/CFPropertyList-3.0.7/lib/cfpropertylist/rbCFPropertyList.rb @@ -0,0 +1,449 @@ +# -*- coding: utf-8 -*- + +require 'kconv' +require 'date' +require 'time' + +# +# CFPropertyList implementation +# +# class to read, manipulate and write both XML and binary property list +# files (plist(5)) as defined by Apple. Have a look at CFPropertyList::List +# for more documentation. +# +# == Example +# require 'cfpropertylist' +# +# # create a arbitrary data structure of basic data types +# data = { +# 'name' => 'John Doe', +# 'missing' => true, +# 'last_seen' => Time.now, +# 'friends' => ['Jane Doe','Julian Doe'], +# 'likes' => { +# 'me' => false +# } +# } +# +# # create CFPropertyList::List object +# plist = CFPropertyList::List.new +# +# # call CFPropertyList.guess() to create corresponding CFType values +# # pass in optional :convert_unknown_to_string => true to convert things like symbols into strings. +# plist.value = CFPropertyList.guess(data) +# +# # write plist to file +# plist.save("example.plist", CFPropertyList::List::FORMAT_BINARY) +# +# # … later, read it again +# plist = CFPropertyList::List.new(:file => "example.plist") +# data = CFPropertyList.native_types(plist.value) +# +# Author:: Christian Kruse (mailto:cjk@wwwtech.de) +# Copyright:: Copyright (c) 2010 +# License:: MIT License +module CFPropertyList + class << self + attr_accessor :xml_parser_interface + end + + # interface class for PList parsers + class ParserInterface + # load a plist + def load(opts={}) + return "" + end + + # convert a plist to string + def to_str(opts={}) + return true + end + end + + class XMLParserInterface < ParserInterface + def new_node(name) + end + + def new_text(val) + end + + def append_node(parent, child) + end + end +end + +dirname = File.dirname(__FILE__) +require dirname + '/rbCFPlistError.rb' +require dirname + '/rbCFTypes.rb' +require dirname + '/rbBinaryCFPropertyList.rb' +require dirname + '/rbPlainCFPropertyList.rb' + +begin + require dirname + '/rbLibXMLParser.rb' + temp = LibXML::XML::Parser::Options::NOBLANKS # check if we have a version with parser options + temp = false # avoid a warning + try_nokogiri = false + CFPropertyList.xml_parser_interface = CFPropertyList::LibXMLParser +rescue LoadError, NameError + try_nokogiri = true +end + +if try_nokogiri then + begin + require dirname + '/rbNokogiriParser.rb' + CFPropertyList.xml_parser_interface = CFPropertyList::NokogiriXMLParser + rescue LoadError + require dirname + '/rbREXMLParser.rb' + CFPropertyList.xml_parser_interface = CFPropertyList::ReXMLParser + end +end + + +module CFPropertyList + # Create CFType hierarchy by guessing the correct CFType, e.g. + # + # x = { + # 'a' => ['b','c','d'] + # } + # cftypes = CFPropertyList.guess(x) + # + # pass optional options hash. Only possible value actually: + # +convert_unknown_to_string+:: Convert unknown objects to string calling to_str() + # +converter_method+:: Convert unknown objects to known objects calling +method_name+ + # + # cftypes = CFPropertyList.guess(x,:convert_unknown_to_string => true,:converter_method => :to_hash, :converter_with_opts => true) + def guess(object, options = {}) + case object + when Integer then CFInteger.new(object) + when UidFixnum then CFUid.new(object) + when Float then CFReal.new(object) + when TrueClass, FalseClass then CFBoolean.new(object) + + when Blob + CFData.new(object, CFData::DATA_RAW) + + when String, Symbol + CFString.new(object.to_s) + + when Time, DateTime, Date + CFDate.new(object) + + when Array, Enumerator + ary = Array.new + object.each do |o| + ary.push CFPropertyList.guess(o, options) + end + CFArray.new(ary) + + when Hash + hsh = Hash.new + object.each_pair do |k,v| + k = k.to_s if k.is_a?(Symbol) + hsh[k] = CFPropertyList.guess(v, options) + end + CFDictionary.new(hsh) + else + case + when Object.const_defined?('BigDecimal') && object.is_a?(BigDecimal) + CFReal.new(object) + when object.respond_to?(:read) + raw_data = object.read + # treat the data as a bytestring (ASCII-8BIT) if Ruby supports it. Do this by forcing + # the encoding, on the assumption that the bytes were read correctly, and just tagged with + # an inappropriate encoding, rather than transcoding. + raw_data.force_encoding(Encoding::ASCII_8BIT) if raw_data.respond_to?(:force_encoding) + CFData.new(raw_data, CFData::DATA_RAW) + when options[:converter_method] && object.respond_to?(options[:converter_method]) + if options[:converter_with_opts] + CFPropertyList.guess(object.send(options[:converter_method],options),options) + else + CFPropertyList.guess(object.send(options[:converter_method]),options) + end + when options[:convert_unknown_to_string] + CFString.new(object.to_s) + else + raise CFTypeError.new("Unknown class #{object.class.to_s}. Try using :convert_unknown_to_string if you want to use unknown object types!") + end + end + end + + # Converts a CFType hiercharchy to native Ruby types + def native_types(object,keys_as_symbols=false) + return if object.nil? + + if(object.is_a?(CFDate) || object.is_a?(CFString) || object.is_a?(CFInteger) || object.is_a?(CFReal) || object.is_a?(CFBoolean)) || object.is_a?(CFUid) then + return object.value + elsif(object.is_a?(CFData)) then + return CFPropertyList::Blob.new(object.decoded_value) + elsif(object.is_a?(CFArray)) then + ary = [] + object.value.each do + |v| + ary.push CFPropertyList.native_types(v) + end + + return ary + elsif(object.is_a?(CFDictionary)) then + hsh = {} + object.value.each_pair do + |k,v| + k = k.to_sym if keys_as_symbols + hsh[k] = CFPropertyList.native_types(v) + end + + return hsh + end + end + + module_function :guess, :native_types + + # Class representing a CFPropertyList. Instantiate with #new + class List + # Format constant for binary format + FORMAT_BINARY = 1 + + # Format constant for XML format + FORMAT_XML = 2 + + # Format constant for the old plain format + FORMAT_PLAIN = 3 + + # Format constant for automatic format recognizing + FORMAT_AUTO = 0 + + @@parsers = [Binary, CFPropertyList.xml_parser_interface, PlainParser] + + # Path of PropertyList + attr_accessor :filename + # the original format of the PropertyList + attr_accessor :format + # the root value in the plist file + attr_accessor :value + # default value for XML generation; if true generate formatted XML + attr_accessor :formatted + + # initialize a new CFPropertyList, arguments are: + # + # :file:: Parse a file + # :format:: Format is one of FORMAT_BINARY or FORMAT_XML. Defaults to FORMAT_AUTO + # :data:: Parse a string + # + # All arguments are optional + def initialize(opts={}) + @filename = opts[:file] + @format = opts[:format] || FORMAT_AUTO + @data = opts[:data] + @formatted = opts[:formatted] + + load(@filename) unless @filename.nil? + load_str(@data) unless @data.nil? + end + + # returns a list of registered parsers + def self.parsers + @@parsers + end + + # set a list of parsers + def self.parsers=(val) + @@parsers = val + end + + # Load an XML PropertyList + # filename = nil:: The filename to read from; if nil, read from the file defined by instance variable +filename+ + def load_xml(filename=nil) + load(filename,List::FORMAT_XML) + end + + # read a binary plist file + # filename = nil:: The filename to read from; if nil, read from the file defined by instance variable +filename+ + def load_binary(filename=nil) + load(filename,List::FORMAT_BINARY) + end + + # read a plain plist file + # filename = nil:: The filename to read from; if nil, read from the file defined by instance variable +filename+ + def load_plain(filename=nil) + load(filename,List::FORMAT_PLAIN) + end + + # load a plist from a XML string + # str:: The string containing the plist + def load_xml_str(str=nil) + load_str(str,List::FORMAT_XML) + end + + # load a plist from a binary string + # str:: The string containing the plist + def load_binary_str(str=nil) + load_str(str,List::FORMAT_BINARY) + end + + # load a plist from a plain string + # str:: The string containing the plist + def load_plain_str(str=nil) + load_str(str,List::FORMAT_PLAIN) + end + + # load a plist from a string + # str = nil:: The string containing the plist + # format = nil:: The format of the plist + def load_str(str=nil,format=nil) + str = @data if str.nil? + format = @format if format.nil? + + @value = {} + case format + when List::FORMAT_BINARY, List::FORMAT_XML, List::FORMAT_PLAIN then + prsr = @@parsers[format-1].new + @value = prsr.load({:data => str}) + + when List::FORMAT_AUTO then # what we now do is ugly, but neccessary to recognize the file format + filetype = str[0..5] + version = str[6..7] + + prsr = nil + + if filetype == "bplist" then + raise CFFormatError.new("Wrong file version #{version}") unless version == "00" + prsr = Binary.new + @format = List::FORMAT_BINARY + else + if str =~ /^<(\?xml|!DOCTYPE|plist)/ + prsr = CFPropertyList.xml_parser_interface.new + @format = List::FORMAT_XML + else + prsr = PlainParser.new + @format = List::FORMAT_PLAIN + end + end + + @value = prsr.load({:data => str}) + end + end + + # Read a plist file + # file = nil:: The filename of the file to read. If nil, use +filename+ instance variable + # format = nil:: The format of the plist file. Auto-detect if nil + def load(file=nil,format=nil) + file = @filename if file.nil? + format = @format if format.nil? + @value = {} + + raise IOError.new("File #{file} not readable!") unless File.readable? file + + case format + when List::FORMAT_BINARY, List::FORMAT_XML, List::FORMAT_PLAIN then + prsr = @@parsers[format-1].new + @value = prsr.load({:file => file}) + + when List::FORMAT_AUTO then # what we now do is ugly, but neccessary to recognize the file format + magic_number = IO.read(file,12) + raise IOError.new("File #{file} is empty.") unless magic_number + filetype = magic_number[0..5] + version = magic_number[6..7] + + prsr = nil + if filetype == "bplist" then + raise CFFormatError.new("Wrong file version #{version}") unless version == "00" + prsr = Binary.new + @format = List::FORMAT_BINARY + else + if magic_number =~ /^<(\?xml|!DOCTYPE|plist)/ + prsr = CFPropertyList.xml_parser_interface.new + @format = List::FORMAT_XML + else + prsr = PlainParser.new + @format = List::FORMAT_PLAIN + end + end + + @value = prsr.load({:file => file}) + end + + raise CFFormatError.new("Invalid format or parser error!") if @value.nil? + end + + # Serialize CFPropertyList object to specified format and write it to file + # file = nil:: The filename of the file to write to. Uses +filename+ instance variable if nil + # format = nil:: The format to save in. Uses +format+ instance variable if nil + def save(file=nil,format=nil,opts={}) + format = @format if format.nil? + file = @filename if file.nil? + + if format != FORMAT_BINARY && format != FORMAT_XML && format != FORMAT_PLAIN + raise CFFormatError.new("Format #{format} not supported, use List::FORMAT_BINARY or List::FORMAT_XML") + end + + if(!File.exist?(file)) then + raise IOError.new("File #{file} not writable!") unless File.writable?(File.dirname(file)) + elsif(!File.writable?(file)) then + raise IOError.new("File #{file} not writable!") + end + + opts[:root] = @value + opts[:formatted] = @formatted unless opts.has_key?(:formatted) + + prsr = @@parsers[format-1].new + + content = prsr.to_str(opts) + + File.open(file, 'wb') { + |fd| + fd.write content + } + end + + # convert plist to string + # format = List::FORMAT_BINARY:: The format to save the plist + # opts={}:: Pass parser options + def to_str(format=List::FORMAT_BINARY,opts={}) + if format != FORMAT_BINARY && format != FORMAT_XML && format != FORMAT_PLAIN + raise CFFormatError.new("Format #{format} not supported, use List::FORMAT_BINARY or List::FORMAT_XML") + end + + prsr = @@parsers[format-1].new + + opts[:root] = @value + opts[:formatted] = @formatted unless opts.has_key?(:formatted) + + return prsr.to_str(opts) + end + end +end + + +class Array + # convert an array to plist format + def to_plist(options={}) + options[:plist_format] ||= CFPropertyList::List::FORMAT_BINARY + + plist = CFPropertyList::List.new + plist.value = CFPropertyList.guess(self, options) + plist.to_str(options[:plist_format], options) + end +end + +class Enumerator + # convert an array to plist format + def to_plist(options={}) + options[:plist_format] ||= CFPropertyList::List::FORMAT_BINARY + + plist = CFPropertyList::List.new + plist.value = CFPropertyList.guess(self, options) + plist.to_str(options[:plist_format], options) + end +end + +class Hash + # convert a hash to plist format + def to_plist(options={}) + options[:plist_format] ||= CFPropertyList::List::FORMAT_BINARY + + plist = CFPropertyList::List.new + plist.value = CFPropertyList.guess(self, options) + plist.to_str(options[:plist_format], options) + end +end + +# eof diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/CFPropertyList-3.0.7/lib/cfpropertylist/rbCFTypes.rb b/ios/vendor/bundle/ruby/2.6.0/gems/CFPropertyList-3.0.7/lib/cfpropertylist/rbCFTypes.rb new file mode 100644 index 0000000..8563721 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/CFPropertyList-3.0.7/lib/cfpropertylist/rbCFTypes.rb @@ -0,0 +1,349 @@ +# -*- coding: utf-8 -*- +# +# CFTypes, e.g. CFString, CFInteger +# needed to create unambiguous plists +# +# Author:: Christian Kruse (mailto:cjk@wwwtech.de) +# Copyright:: Copyright (c) 2009 +# License:: MIT License + +require 'base64' + +module CFPropertyList + ## + # Blob is intended to distinguish between a Ruby String instance that should + # be converted to a CFString type and a Ruby String instance that should be + # converted to a CFData type + class Blob < String + end + + ## + # UidFixnum is intended to distinguish between a Ruby Integer + # instance that should be converted to a CFInteger/CFReal type and a + # Ruby Integer instance that should be converted to a CFUid type. + class UidFixnum < Integer + end + + # This class defines the base class for all CFType classes + # + class CFType + # value of the type + attr_accessor :value + + def initialize(value=nil) + @value = value + end + + def to_xml(parser) + end + + def to_binary(bplist) + end + + def to_plain(plist) + end + end + + # This class holds string values, both, UTF-8 and UTF-16BE + # It will convert the value to UTF-16BE if necessary (i.e. if non-ascii char contained) + class CFString < CFType + # convert to XML + def to_xml(parser) + n = parser.new_node('string') + n = parser.append_node(n, parser.new_text(@value)) unless @value.nil? + n + end + + # convert to binary + def to_binary(bplist) + bplist.string_to_binary(@value); + end + + def to_plain(plist) + if @value =~ /^\w+$/ + @value + else + quoted + end + end + + def quoted + str = '"' + @value.each_char do |c| + str << case c + when '"' + '\\"' + when '\\' + '\\' + when "\a" + "\\a" + when "\b" + "\\b" + when "\f" + "\\f" + when "\n" + "\n" + when "\v" + "\\v" + when "\r" + "\\r" + when "\t" + "\\t" + else + c + end + end + + str << '"' + end + end + + # This class holds integer/fixnum values + class CFInteger < CFType + # convert to XML + def to_xml(parser) + n = parser.new_node('integer') + n = parser.append_node(n, parser.new_text(@value.to_s)) + n + end + + # convert to binary + def to_binary(bplist) + bplist.num_to_binary(self) + end + + def to_plain(plist) + @value.to_s + end + end + + # This class holds float values + class CFReal < CFType + # convert to XML + def to_xml(parser) + n = parser.new_node('real') + n = parser.append_node(n, parser.new_text(@value.to_s)) + n + end + + # convert to binary + def to_binary(bplist) + bplist.num_to_binary(self) + end + + def to_plain(plist) + @value.to_s + end + end + + # This class holds Time values. While Apple uses seconds since 2001, + # the rest of the world uses seconds since 1970. So if you access value + # directly, you get the Time class. If you access via get_value you either + # geht the timestamp or the Apple timestamp + class CFDate < CFType + TIMESTAMP_APPLE = 0 + TIMESTAMP_UNIX = 1 + DATE_DIFF_APPLE_UNIX = 978307200 + + # create a XML date strimg from a time object + def CFDate.date_string(val) + # 2009-05-13T20:23:43Z + val.getutc.strftime("%Y-%m-%dT%H:%M:%SZ") + end + + # parse a XML date string + def CFDate.parse_date(val) + # 2009-05-13T20:23:43Z + val =~ %r{^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})Z$} + year,month,day,hour,min,sec = $1, $2, $3, $4, $5, $6 + return Time.utc(year,month,day,hour,min,sec).getlocal + end + + # set value to defined state + def initialize(value = nil,format=CFDate::TIMESTAMP_UNIX) + if(value.is_a?(Time) || value.nil?) then + @value = value.nil? ? Time.now : value + elsif value.instance_of? Date + @value = Time.utc(value.year, value.month, value.day, 0, 0, 0) + elsif value.instance_of? DateTime + @value = value.to_time.utc + else + set_value(value,format) + end + end + + # set value with timestamp, either Apple or UNIX + def set_value(value,format=CFDate::TIMESTAMP_UNIX) + if(format == CFDate::TIMESTAMP_UNIX) then + @value = Time.at(value) + else + @value = Time.at(value + CFDate::DATE_DIFF_APPLE_UNIX) + end + end + + # get timestamp, either UNIX or Apple timestamp + def get_value(format=CFDate::TIMESTAMP_UNIX) + if(format == CFDate::TIMESTAMP_UNIX) then + @value.to_i + else + @value.to_f - CFDate::DATE_DIFF_APPLE_UNIX + end + end + + # convert to XML + def to_xml(parser) + n = parser.new_node('date') + n = parser.append_node(n, parser.new_text(CFDate::date_string(@value))) + n + end + + # convert to binary + def to_binary(bplist) + bplist.date_to_binary(@value) + end + + def to_plain(plist) + @value.strftime("%Y-%m-%d %H:%M:%S %z") + end + end + + # This class contains a boolean value + class CFBoolean < CFType + # convert to XML + def to_xml(parser) + parser.new_node(@value ? 'true' : 'false') + end + + # convert to binary + def to_binary(bplist) + bplist.bool_to_binary(@value); + end + + def to_plain(plist) + @value ? "true" : "false" + end + end + + # This class contains binary data values + class CFData < CFType + # Base64 encoded data + DATA_BASE64 = 0 + # Raw data + DATA_RAW = 1 + + # set value to defined state, either base64 encoded or raw + def initialize(value=nil,format=DATA_BASE64) + if(format == DATA_RAW) + @raw_value = value + else + @value = value + end + end + + # get base64 encoded value + def encoded_value + @value ||= "\n#{Base64.encode64(@raw_value).gsub("\n", '').scan(/.{1,76}/).join("\n")}\n" + end + + # get base64 decoded value + def decoded_value + @raw_value ||= Blob.new(Base64.decode64(@value)) + end + + # convert to XML + def to_xml(parser) + n = parser.new_node('data') + n = parser.append_node(n, parser.new_text(encoded_value())) + n + end + + # convert to binary + def to_binary(bplist) + bplist.data_to_binary(decoded_value()) + end + + def to_plain(plist) + "<" + decoded_value.unpack("H*").join("") + ">" + end + end + + # This class contains an array of values + class CFArray < CFType + # create a new array CFType + def initialize(val=[]) + @value = val + end + + # convert to XML + def to_xml(parser) + n = parser.new_node('array') + @value.each do |v| + n = parser.append_node(n, v.to_xml(parser)) + end + n + end + + # convert to binary + def to_binary(bplist) + bplist.array_to_binary(self) + end + + def to_plain(plist) + ary = @value.map { |v| v.to_plain(plist) } + "( " + ary.join(", ") + " )" + end + end + + # this class contains a hash of values + class CFDictionary < CFType + # Create new CFDictonary type. + def initialize(value={}) + @value = value + end + + # convert to XML + def to_xml(parser) + n = parser.new_node('dict') + @value.each_pair do |key, value| + k = parser.append_node(parser.new_node('key'), parser.new_text(key.to_s)) + n = parser.append_node(n, k) + n = parser.append_node(n, value.to_xml(parser)) + end + n + end + + # convert to binary + def to_binary(bplist) + bplist.dict_to_binary(self) + end + + def to_plain(plist) + str = "{ " + cfstr = CFString.new() + + @value.each do |k,v| + cfstr.value = k + str << cfstr.to_plain(plist) + " = " + v.to_plain(plist) + "; " + end + + str << "}" + end + end + + class CFUid < CFType + def to_xml(parser) + CFDictionary.new({'CF$UID' => CFInteger.new(@value)}).to_xml(parser) + end + + # convert to binary + def to_binary(bplist) + bplist.uid_to_binary(@value) + end + + def to_plain(plist) + CFDictionary.new({'CF$UID' => CFInteger.new(@value)}).to_plain(plist) + end + end +end + +# eof diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/CFPropertyList-3.0.7/lib/cfpropertylist/rbLibXMLParser.rb b/ios/vendor/bundle/ruby/2.6.0/gems/CFPropertyList-3.0.7/lib/cfpropertylist/rbLibXMLParser.rb new file mode 100644 index 0000000..3642016 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/CFPropertyList-3.0.7/lib/cfpropertylist/rbLibXMLParser.rb @@ -0,0 +1,149 @@ +# -*- coding: utf-8 -*- + +require 'libxml' + +module CFPropertyList + # XML parser + class LibXMLParser < XMLParserInterface + LibXML::XML::Error.set_handler(&LibXML::XML::Error::QUIET_HANDLER) + PARSER_OPTIONS = LibXML::XML::Parser::Options::NOBLANKS|LibXML::XML::Parser::Options::NONET + # read a XML file + # opts:: + # * :file - The filename of the file to load + # * :data - The data to parse + def load(opts) + doc = nil + + if(opts.has_key?(:file)) then + doc = LibXML::XML::Document.file(opts[:file],:options => PARSER_OPTIONS) + else + doc = LibXML::XML::Document.string(opts[:data],:options => PARSER_OPTIONS) + end + + if doc + root = doc.root.first + return import_xml(root) + end + rescue LibXML::XML::Error => e + raise CFFormatError.new('invalid XML: ' + e.message) + end + + # serialize CFPropertyList object to XML + # opts = {}:: Specify options: :formatted - Use indention and line breaks + def to_str(opts={}) + doc = LibXML::XML::Document.new + + doc.root = LibXML::XML::Node.new('plist') + doc.encoding = LibXML::XML::Encoding::UTF_8 + + doc.root['version'] = '1.0' + doc.root << opts[:root].to_xml(self) + + # ugly hack, but there's no other possibility I know + str = doc.to_s(:indent => opts[:formatted]) + str1 = String.new + first = false + str.each_line do |line| + str1 << line + unless(first) then + str1 << "\n" if line =~ /^\s*<\?xml/ + end + + first = true + end + + str1.force_encoding('UTF-8') if str1.respond_to?(:force_encoding) + return str1 + end + + def new_node(name) + LibXML::XML::Node.new(name) + end + + def new_text(val) + LibXML::XML::Node.new_text(val) + end + + def append_node(parent, child) + parent << child + end + + protected + + # get the value of a DOM node + def get_value(n) + content = if n.children? + n.first.content + else + n.content + end + + content.force_encoding('UTF-8') if content.respond_to?(:force_encoding) + content + end + + # import the XML values + def import_xml(node) + ret = nil + + case node.name + when 'dict' + hsh = Hash.new + key = nil + + if node.children? then + node.children.each do |n| + next if n.text? # avoid a bug of libxml + next if n.comment? + + if n.name == "key" then + key = get_value(n) + else + raise CFFormatError.new("Format error!") if key.nil? + hsh[key] = import_xml(n) + key = nil + end + end + end + + if hsh['CF$UID'] and hsh.keys.length == 1 + ret = CFUid.new(hsh['CF$UID'].value) + else + ret = CFDictionary.new(hsh) + end + + when 'array' + ary = Array.new + + if node.children? then + node.children.each do |n| + next if n.text? # avoid a bug of libxml + next if n.comment? + ary.push import_xml(n) + end + end + + ret = CFArray.new(ary) + + when 'true' + ret = CFBoolean.new(true) + when 'false' + ret = CFBoolean.new(false) + when 'real' + ret = CFReal.new(get_value(node).to_f) + when 'integer' + ret = CFInteger.new(get_value(node).to_i) + when 'string' + ret = CFString.new(get_value(node)) + when 'data' + ret = CFData.new(get_value(node)) + when 'date' + ret = CFDate.new(CFDate.parse_date(get_value(node))) + end + + return ret + end + end +end + +# eof diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/CFPropertyList-3.0.7/lib/cfpropertylist/rbNokogiriParser.rb b/ios/vendor/bundle/ruby/2.6.0/gems/CFPropertyList-3.0.7/lib/cfpropertylist/rbNokogiriParser.rb new file mode 100644 index 0000000..e2de688 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/CFPropertyList-3.0.7/lib/cfpropertylist/rbNokogiriParser.rb @@ -0,0 +1,152 @@ +# -*- coding: utf-8 -*- + +require 'nokogiri' + +module CFPropertyList + # XML parser + class NokogiriXMLParser < ParserInterface + PARSER_OPTIONS = Nokogiri::XML::ParseOptions::NOBLANKS|Nokogiri::XML::ParseOptions::NONET + # read a XML file + # opts:: + # * :file - The filename of the file to load + # * :data - The data to parse + def load(opts) + doc = nil + if(opts.has_key?(:file)) then + File.open(opts[:file], "rb") { |fd| doc = Nokogiri::XML::Document.parse(fd, nil, nil, PARSER_OPTIONS) } + else + doc = Nokogiri::XML::Document.parse(opts[:data], nil, nil, PARSER_OPTIONS) + end + + if doc + root = doc.root.children.first + return import_xml(root) + end + rescue Nokogiri::XML::SyntaxError => e + raise CFFormatError.new('invalid XML: ' + e.message) + end + + # serialize CFPropertyList object to XML + # opts = {}:: Specify options: :formatted - Use indention and line breaks + def to_str(opts={}) + doc = Nokogiri::XML::Document.new + @doc = doc + + doc.root = doc.create_element 'plist', :version => '1.0' + doc.encoding = 'UTF-8' + + doc.root << opts[:root].to_xml(self) + + # ugly hack, but there's no other possibility I know + s_opts = Nokogiri::XML::Node::SaveOptions::AS_XML + s_opts |= Nokogiri::XML::Node::SaveOptions::FORMAT if opts[:formatted] + + str = doc.serialize(:save_with => s_opts) + str1 = String.new + first = false + str.each_line do |line| + str1 << line + unless(first) then + str1 << "\n" if line =~ /^\s*<\?xml/ + end + + first = true + end + + str1.force_encoding('UTF-8') if str1.respond_to?(:force_encoding) + return str1 + end + + def new_node(name) + @doc.create_element name + end + + def new_text(val) + @doc.create_text_node val + end + + def append_node(parent, child) + parent << child + end + + protected + + # get the value of a DOM node + def get_value(n) + content = if n.children.empty? + n.content + else + n.children.first.content + end + + content.force_encoding('UTF-8') if content.respond_to?(:force_encoding) + content + end + + # import the XML values + def import_xml(node) + ret = nil + + case node.name + when 'dict' + hsh = Hash.new + key = nil + children = node.children + + unless children.empty? then + children.each do |n| + next if n.text? # avoid a bug of libxml + next if n.comment? + + if n.name == "key" then + key = get_value(n) + else + raise CFFormatError.new("Format error!") if key.nil? + hsh[key] = import_xml(n) + key = nil + end + end + end + + if hsh['CF$UID'] and hsh.keys.length == 1 + ret = CFUid.new(hsh['CF$UID'].value) + else + ret = CFDictionary.new(hsh) + end + + when 'array' + ary = Array.new + children = node.children + + unless children.empty? then + children.each do |n| + next if n.text? # avoid a bug of libxml + next if n.comment? + ary.push import_xml(n) + end + end + + ret = CFArray.new(ary) + + when 'true' + ret = CFBoolean.new(true) + when 'false' + ret = CFBoolean.new(false) + when 'real' + ret = CFReal.new(get_value(node).to_f) + when 'integer' + ret = CFInteger.new(get_value(node).to_i) + when 'string' + ret = CFString.new(get_value(node)) + when 'data' + ret = CFData.new(get_value(node)) + when 'date' + ret = CFDate.new(CFDate.parse_date(get_value(node))) + end + + return ret + end + end +end + +# eof diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/CFPropertyList-3.0.7/lib/cfpropertylist/rbPlainCFPropertyList.rb b/ios/vendor/bundle/ruby/2.6.0/gems/CFPropertyList-3.0.7/lib/cfpropertylist/rbPlainCFPropertyList.rb new file mode 100644 index 0000000..fa698ce --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/CFPropertyList-3.0.7/lib/cfpropertylist/rbPlainCFPropertyList.rb @@ -0,0 +1,199 @@ +# -*- coding: utf-8 -*- + +require 'strscan' + +module CFPropertyList + # XML parser + class PlainParser < XMLParserInterface + # read a XML file + # opts:: + # * :file - The filename of the file to load + # * :data - The data to parse + def load(opts) + @doc = nil + + if(opts.has_key?(:file)) then + File.open(opts[:file], :external_encoding => "ASCII") do |fd| + @doc = StringScanner.new(fd.read) + end + else + @doc = StringScanner.new(opts[:data]) + end + + if @doc + root = import_plain + raise CFFormatError.new('content after root object') unless @doc.eos? + + return root + end + + raise CFFormatError.new('invalid plist string or file not found') + end + + SPACES_AND_COMMENTS = %r{((?:/\*.*?\*/)|(?://.*?$\n?)|(?:\s*))+}x + + # serialize CFPropertyList object to XML + # opts = {}:: Specify options: :formatted - Use indention and line breaks + def to_str(opts={}) + opts[:root].to_plain(self) + end + + protected + def skip_whitespaces + @doc.skip SPACES_AND_COMMENTS + end + + def read_dict + skip_whitespaces + hsh = {} + + while not @doc.scan(/\}/) + key = import_plain + raise CFFormatError.new("invalid dictionary format") if !key + + if key.is_a?(CFString) + key = key.value + elsif key.is_a?(CFInteger) or key.is_a?(CFReal) + key = key.value.to_s + else + raise CFFormatError.new("invalid key format") + end + + skip_whitespaces + + raise CFFormatError.new("invalid dictionary format") unless @doc.scan(/=/) + + skip_whitespaces + val = import_plain + + skip_whitespaces + raise CFFormatError.new("invalid dictionary format") unless @doc.scan(/;/) + skip_whitespaces + + hsh[key] = val + raise CFFormatError.new("invalid dictionary format") if @doc.eos? + end + + CFDictionary.new(hsh) + end + + def read_array + skip_whitespaces + ary = [] + + while not @doc.scan(/\)/) + val = import_plain + + return nil if not val or not val.value + skip_whitespaces + + if not @doc.skip(/,\s*/) + if @doc.scan(/\)/) + ary << val + return CFArray.new(ary) + end + + raise CFFormatError.new("invalid array format") + end + + ary << val + raise CFFormatError.new("invalid array format") if @doc.eos? + end + + CFArray.new(ary) + end + + def escape_char + case @doc.matched + when '"' + '"' + when '\\' + '\\' + when 'a' + "\a" + when 'b' + "\b" + when 'f' + "\f" + when 'n' + "\n" + when 'v' + "\v" + when 'r' + "\r" + when 't' + "\t" + when 'U' + @doc.scan(/.{4}/).hex.chr('utf-8') + end + end + + def read_quoted + str = '' + + while not @doc.scan(/"/) + if @doc.scan(/\\/) + @doc.scan(/./) + str << escape_char + + elsif @doc.eos? + raise CFFormatError.new("unterminated string") + + else @doc.scan(/./) + str << @doc.matched + end + end + + CFString.new(str) + end + + def read_unquoted + raise CFFormatError.new("unexpected end of file") if @doc.eos? + + if @doc.scan(/(\d\d\d\d)-(\d\d)-(\d\d)\s+(\d\d):(\d\d):(\d\d)(?:\s+(\+|-)(\d\d)(\d\d))?/) + year,month,day,hour,min,sec,pl_min,tz_hour, tz_min = @doc[1], @doc[2], @doc[3], @doc[4], @doc[5], @doc[6], @doc[7], @doc[8], @doc[9] + CFDate.new(Time.new(year, month, day, hour, min, sec, pl_min ? sprintf("%s%s:%s", pl_min, tz_hour, tz_min) : nil)) + + elsif @doc.scan(/-?\d+?\.\d+\b/) + CFReal.new(@doc.matched.to_f) + + elsif @doc.scan(/-?\d+\b/) + CFInteger.new(@doc.matched.to_i) + + elsif @doc.scan(/\b(true|false)\b/) + CFBoolean.new(@doc.matched == 'true') + else + CFString.new(@doc.scan(/\w+/)) + end + end + + def read_binary + @doc.scan(/(.*?)>/) + + hex_str = @doc[1].gsub(/ /, '') + CFData.new([hex_str].pack("H*"), CFData::DATA_RAW) + end + + # import the XML values + def import_plain + skip_whitespaces + ret = nil + + if @doc.scan(/\{/) # dict + ret = read_dict + elsif @doc.scan(/\(/) # array + ret = read_array + elsif @doc.scan(/"/) # string + ret = read_quoted + elsif @doc.scan(/ e + raise CFFormatError.new('invalid XML: ' + e.message) + end + + # serialize CFPropertyList object to XML + # opts = {}:: Specify options: :formatted - Use indention and line breaks + def to_str(opts={}) + doc = REXML::Document.new + @doc = doc + + doc.context[:attribute_quote] = :quote + + doc.add_element 'plist', {'version' => '1.0'} + doc.root << opts[:root].to_xml(self) + + formatter = if opts[:formatted] then + f = REXML::Formatters::Pretty.new(2) + f.compact = true + f.width = Float::INFINITY + f + else + REXML::Formatters::Default.new + end + + str = formatter.write(doc.root, "") + str1 = "\n\n" + str + "\n" + str1.force_encoding('UTF-8') if str1.respond_to?(:force_encoding) + + return str1 + end + + def new_node(name) + REXML::Element.new(name) + end + + def new_text(val) + val + end + + def append_node(parent, child) + if child.is_a?(String) then + parent.add_text child + else + parent.elements << child + end + parent + end + + protected + + # get the value of a DOM node + def get_value(n) + content = n.text + + content.force_encoding('UTF-8') if content.respond_to?(:force_encoding) + content + end + + # import the XML values + def import_xml(node) + ret = nil + + case node.name + when 'dict' + hsh = Hash.new + key = nil + + if node.has_elements? then + node.elements.each do |n| + next if n.name == '#text' # avoid a bug of libxml + next if n.name == '#comment' + + if n.name == "key" then + key = get_value(n) + key = '' if key.nil? # REXML returns nil if key is empty + else + raise CFFormatError.new("Format error!") if key.nil? + hsh[key] = import_xml(n) + key = nil + end + end + end + + if hsh['CF$UID'] and hsh.keys.length == 1 + ret = CFUid.new(hsh['CF$UID'].value) + else + ret = CFDictionary.new(hsh) + end + + when 'array' + ary = Array.new + + if node.has_elements? then + node.elements.each do |n| + next if n.name == '#text' # avoid a bug of libxml + ary.push import_xml(n) + end + end + + ret = CFArray.new(ary) + + when 'true' + ret = CFBoolean.new(true) + when 'false' + ret = CFBoolean.new(false) + when 'real' + ret = CFReal.new(get_value(node).to_f) + when 'integer' + ret = CFInteger.new(get_value(node).to_i) + when 'string' + ret = CFString.new(get_value(node)) + ret.value = '' if ret.value.nil? # REXML returns nil for empty elements' .text attribute + when 'data' + ret = CFData.new(get_value(node)) + when 'date' + ret = CFDate.new(CFDate.parse_date(get_value(node))) + end + + return ret + end + end +end + +# eof diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/atomos-0.1.3/.gitignore b/ios/vendor/bundle/ruby/2.6.0/gems/atomos-0.1.3/.gitignore new file mode 100644 index 0000000..b04a8c8 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/atomos-0.1.3/.gitignore @@ -0,0 +1,11 @@ +/.bundle/ +/.yardoc +/_yardoc/ +/coverage/ +/doc/ +/pkg/ +/spec/reports/ +/tmp/ + +# rspec failure tracking +.rspec_status diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/atomos-0.1.3/.rspec b/ios/vendor/bundle/ruby/2.6.0/gems/atomos-0.1.3/.rspec new file mode 100644 index 0000000..34c5164 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/atomos-0.1.3/.rspec @@ -0,0 +1,3 @@ +--format documentation +--color +--require spec_helper diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/atomos-0.1.3/.rubocop.yml b/ios/vendor/bundle/ruby/2.6.0/gems/atomos-0.1.3/.rubocop.yml new file mode 100644 index 0000000..3ffe2b0 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/atomos-0.1.3/.rubocop.yml @@ -0,0 +1,2 @@ +inherit_from: .rubocop_todo.yml + diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/atomos-0.1.3/.rubocop_todo.yml b/ios/vendor/bundle/ruby/2.6.0/gems/atomos-0.1.3/.rubocop_todo.yml new file mode 100644 index 0000000..826a7a2 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/atomos-0.1.3/.rubocop_todo.yml @@ -0,0 +1,32 @@ +# This configuration was generated by +# `rubocop --auto-gen-config` +# on 2018-02-02 08:32:23 -0800 using RuboCop version 0.52.1. +# The point is for the user to remove these configuration records +# one by one as the offenses are removed from the code base. +# Note that changes in the inspected code, or installation of new +# versions of RuboCop, may require this file to be generated again. + +# Offense count: 1 +# Configuration parameters: Include. +# Include: **/*.gemspec +Gemspec/RequiredRubyVersion: + Exclude: + - 'atomos.gemspec' + +# Offense count: 1 +# Configuration parameters: CountComments. +Metrics/MethodLength: + Max: 14 + +# Offense count: 1 +Style/Documentation: + Exclude: + - 'spec/**/*' + - 'test/**/*' + - 'lib/atomos.rb' + +# Offense count: 7 +# Configuration parameters: AllowHeredoc, AllowURI, URISchemes, IgnoreCopDirectives, IgnoredPatterns. +# URISchemes: http, https +Metrics/LineLength: + Max: 97 diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/atomos-0.1.3/.travis.yml b/ios/vendor/bundle/ruby/2.6.0/gems/atomos-0.1.3/.travis.yml new file mode 100644 index 0000000..6a8e36f --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/atomos-0.1.3/.travis.yml @@ -0,0 +1,5 @@ +sudo: false +language: ruby +rvm: + - 2.5.0 +before_install: gem install bundler -v 1.16.1 diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/atomos-0.1.3/CODE_OF_CONDUCT.md b/ios/vendor/bundle/ruby/2.6.0/gems/atomos-0.1.3/CODE_OF_CONDUCT.md new file mode 100644 index 0000000..3399e24 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/atomos-0.1.3/CODE_OF_CONDUCT.md @@ -0,0 +1,74 @@ +# Contributor Covenant Code of Conduct + +## Our Pledge + +In the interest of fostering an open and welcoming environment, we as +contributors and maintainers pledge to making participation in our project and +our community a harassment-free experience for everyone, regardless of age, body +size, disability, ethnicity, gender identity and expression, level of experience, +nationality, personal appearance, race, religion, or sexual identity and +orientation. + +## Our Standards + +Examples of behavior that contributes to creating a positive environment +include: + +* Using welcoming and inclusive language +* Being respectful of differing viewpoints and experiences +* Gracefully accepting constructive criticism +* Focusing on what is best for the community +* Showing empathy towards other community members + +Examples of unacceptable behavior by participants include: + +* The use of sexualized language or imagery and unwelcome sexual attention or +advances +* Trolling, insulting/derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or electronic + address, without explicit permission +* Other conduct which could reasonably be considered inappropriate in a + professional setting + +## Our Responsibilities + +Project maintainers are responsible for clarifying the standards of acceptable +behavior and are expected to take appropriate and fair corrective action in +response to any instances of unacceptable behavior. + +Project maintainers have the right and responsibility to remove, edit, or +reject comments, commits, code, wiki edits, issues, and other contributions +that are not aligned to this Code of Conduct, or to ban temporarily or +permanently any contributor for other behaviors that they deem inappropriate, +threatening, offensive, or harmful. + +## Scope + +This Code of Conduct applies both within project spaces and in public spaces +when an individual is representing the project or its community. Examples of +representing a project or community include using an official project e-mail +address, posting via an official social media account, or acting as an appointed +representative at an online or offline event. Representation of a project may be +further defined and clarified by project maintainers. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be +reported by contacting the project team at segiddins@squareup.com. All +complaints will be reviewed and investigated and will result in a response that +is deemed necessary and appropriate to the circumstances. The project team is +obligated to maintain confidentiality with regard to the reporter of an incident. +Further details of specific enforcement policies may be posted separately. + +Project maintainers who do not follow or enforce the Code of Conduct in good +faith may face temporary or permanent repercussions as determined by other +members of the project's leadership. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, +available at [http://contributor-covenant.org/version/1/4][version] + +[homepage]: http://contributor-covenant.org +[version]: http://contributor-covenant.org/version/1/4/ diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/atomos-0.1.3/Gemfile b/ios/vendor/bundle/ruby/2.6.0/gems/atomos-0.1.3/Gemfile new file mode 100644 index 0000000..2d1d7e6 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/atomos-0.1.3/Gemfile @@ -0,0 +1,8 @@ +# frozen_string_literal: true + +source 'https://rubygems.org' + +git_source(:github) { |repo_name| "https://github.com/#{repo_name}" } + +# Specify your gem's dependencies in atomos.gemspec +gemspec diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/atomos-0.1.3/Gemfile.lock b/ios/vendor/bundle/ruby/2.6.0/gems/atomos-0.1.3/Gemfile.lock new file mode 100644 index 0000000..edfb2e5 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/atomos-0.1.3/Gemfile.lock @@ -0,0 +1,51 @@ +PATH + remote: . + specs: + atomos (0.1.3) + +GEM + remote: https://rubygems.org/ + specs: + ast (2.3.0) + diff-lcs (1.3) + parallel (1.12.1) + parser (2.4.0.2) + ast (~> 2.3) + powerpack (0.1.1) + rainbow (3.0.0) + rake (10.5.0) + rspec (3.7.0) + rspec-core (~> 3.7.0) + rspec-expectations (~> 3.7.0) + rspec-mocks (~> 3.7.0) + rspec-core (3.7.1) + rspec-support (~> 3.7.0) + rspec-expectations (3.7.0) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.7.0) + rspec-mocks (3.7.0) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.7.0) + rspec-support (3.7.0) + rubocop (0.52.1) + parallel (~> 1.10) + parser (>= 2.4.0.2, < 3.0) + powerpack (~> 0.1) + rainbow (>= 2.2.2, < 4.0) + ruby-progressbar (~> 1.7) + unicode-display_width (~> 1.0, >= 1.0.1) + ruby-progressbar (1.9.0) + unicode-display_width (1.3.0) + +PLATFORMS + ruby + +DEPENDENCIES + atomos! + bundler (~> 1.16) + rake (~> 10.0) + rspec (~> 3.0) + rubocop + +BUNDLED WITH + 1.16.3 diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/atomos-0.1.3/LICENSE.txt b/ios/vendor/bundle/ruby/2.6.0/gems/atomos-0.1.3/LICENSE.txt new file mode 100644 index 0000000..7a54c62 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/atomos-0.1.3/LICENSE.txt @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2018 Samuel Giddins + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/atomos-0.1.3/README.md b/ios/vendor/bundle/ruby/2.6.0/gems/atomos-0.1.3/README.md new file mode 100644 index 0000000..de832a5 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/atomos-0.1.3/README.md @@ -0,0 +1,43 @@ +# Atomos + +Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/atomos`. To experiment with that code, run `bin/console` for an interactive prompt. + +TODO: Delete this and the text above, and describe your gem + +## Installation + +Add this line to your application's Gemfile: + +```ruby +gem 'atomos' +``` + +And then execute: + + $ bundle + +Or install it yourself as: + + $ gem install atomos + +## Usage + +TODO: Write usage instructions here + +## Development + +After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment. + +To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org). + +## Contributing + +Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/atomos. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct. + +## License + +The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT). + +## Code of Conduct + +Everyone interacting in the Atomos project’s codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/[USERNAME]/atomos/blob/master/CODE_OF_CONDUCT.md). diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/atomos-0.1.3/Rakefile b/ios/vendor/bundle/ruby/2.6.0/gems/atomos-0.1.3/Rakefile new file mode 100644 index 0000000..8ce173e --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/atomos-0.1.3/Rakefile @@ -0,0 +1,11 @@ +# frozen_string_literal: true + +require 'bundler/gem_tasks' + +require 'rspec/core/rake_task' +require 'rubocop/rake_task' + +RSpec::Core::RakeTask.new +RuboCop::RakeTask.new + +task default: %i[rubocop spec] diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/atomos-0.1.3/VERSION b/ios/vendor/bundle/ruby/2.6.0/gems/atomos-0.1.3/VERSION new file mode 100644 index 0000000..b1e80bb --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/atomos-0.1.3/VERSION @@ -0,0 +1 @@ +0.1.3 diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/atomos-0.1.3/atomos.gemspec b/ios/vendor/bundle/ruby/2.6.0/gems/atomos-0.1.3/atomos.gemspec new file mode 100644 index 0000000..7ad4922 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/atomos-0.1.3/atomos.gemspec @@ -0,0 +1,26 @@ +# frozen_string_literal: true + +Gem::Specification.new do |spec| + spec.name = 'atomos' + spec.version = File.read(File.expand_path('../VERSION', __FILE__)) + spec.authors = ['Samuel Giddins'] + spec.email = ['segiddins@segiddins.me'] + + spec.summary = 'A simple gem to atomically write files' + spec.homepage = 'https://github.com/segiddins/atomos' + spec.license = 'MIT' + + spec.files = `git ls-files -z`.split("\x0").reject do |f| + f.match(%r{^(test|spec|features)/}) + end + spec.bindir = 'exe' + spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) } + spec.require_paths = ['lib'] + + spec.required_ruby_version = '>= 2.0' + + spec.add_development_dependency 'bundler', '~> 1.16' + spec.add_development_dependency 'rake', '~> 10.0' + spec.add_development_dependency 'rspec', '~> 3.0' + spec.add_development_dependency 'rubocop' +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/atomos-0.1.3/bin/console b/ios/vendor/bundle/ruby/2.6.0/gems/atomos-0.1.3/bin/console new file mode 100644 index 0000000..535613d --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/atomos-0.1.3/bin/console @@ -0,0 +1,15 @@ +#!/usr/bin/env ruby +# frozen_string_literal: true + +require 'bundler/setup' +require 'atomos' + +# You can add fixtures and/or initialization code here to make experimenting +# with your gem easier. You can also use a different console, if you like. + +# (If you use this, don't forget to add pry to your Gemfile!) +# require "pry" +# Pry.start + +require 'irb' +IRB.start(__FILE__) diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/atomos-0.1.3/bin/rake b/ios/vendor/bundle/ruby/2.6.0/gems/atomos-0.1.3/bin/rake new file mode 100644 index 0000000..8226b57 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/atomos-0.1.3/bin/rake @@ -0,0 +1,29 @@ +#!/usr/bin/env ruby +# frozen_string_literal: true + +# +# This file was generated by Bundler. +# +# The application 'rake' is installed as part of a gem, and +# this file is here to facilitate running it. +# + +require 'pathname' +ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', + Pathname.new(__FILE__).realpath) + +bundle_binstub = File.expand_path('../bundle', __FILE__) + +if File.file?(bundle_binstub) + if File.read(bundle_binstub, 150).match?(/This file was generated by Bundler/) + load(bundle_binstub) + else + abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run. +Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.") + end +end + +require 'rubygems' +require 'bundler/setup' + +load Gem.bin_path('rake', 'rake') diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/atomos-0.1.3/bin/rspec b/ios/vendor/bundle/ruby/2.6.0/gems/atomos-0.1.3/bin/rspec new file mode 100644 index 0000000..d086973 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/atomos-0.1.3/bin/rspec @@ -0,0 +1,29 @@ +#!/usr/bin/env ruby +# frozen_string_literal: true + +# +# This file was generated by Bundler. +# +# The application 'rspec' is installed as part of a gem, and +# this file is here to facilitate running it. +# + +require 'pathname' +ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', + Pathname.new(__FILE__).realpath) + +bundle_binstub = File.expand_path('../bundle', __FILE__) + +if File.file?(bundle_binstub) + if File.read(bundle_binstub, 150).match?(/This file was generated by Bundler/) + load(bundle_binstub) + else + abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run. +Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.") + end +end + +require 'rubygems' +require 'bundler/setup' + +load Gem.bin_path('rspec-core', 'rspec') diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/atomos-0.1.3/bin/rubocop b/ios/vendor/bundle/ruby/2.6.0/gems/atomos-0.1.3/bin/rubocop new file mode 100644 index 0000000..8424d87 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/atomos-0.1.3/bin/rubocop @@ -0,0 +1,29 @@ +#!/usr/bin/env ruby +# frozen_string_literal: true + +# +# This file was generated by Bundler. +# +# The application 'rubocop' is installed as part of a gem, and +# this file is here to facilitate running it. +# + +require 'pathname' +ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', + Pathname.new(__FILE__).realpath) + +bundle_binstub = File.expand_path('../bundle', __FILE__) + +if File.file?(bundle_binstub) + if File.read(bundle_binstub, 150).match?(/This file was generated by Bundler/) + load(bundle_binstub) + else + abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run. +Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.") + end +end + +require 'rubygems' +require 'bundler/setup' + +load Gem.bin_path('rubocop', 'rubocop') diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/atomos-0.1.3/bin/setup b/ios/vendor/bundle/ruby/2.6.0/gems/atomos-0.1.3/bin/setup new file mode 100644 index 0000000..dce67d8 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/atomos-0.1.3/bin/setup @@ -0,0 +1,8 @@ +#!/usr/bin/env bash +set -euo pipefail +IFS=$'\n\t' +set -vx + +bundle install + +# Do any other automated setup that you need to do here diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/atomos-0.1.3/lib/atomos.rb b/ios/vendor/bundle/ruby/2.6.0/gems/atomos-0.1.3/lib/atomos.rb new file mode 100644 index 0000000..4b56d05 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/atomos-0.1.3/lib/atomos.rb @@ -0,0 +1,47 @@ +# frozen_string_literal: true + +require 'atomos/version' + +module Atomos + module_function + + # rubocop:disable Metrics/MethodLength + def atomic_write(dest, contents = nil, tmpdir: nil, &block) + unless contents.nil? ^ block.nil? + raise ArgumentError, 'must provide either contents or a block' + end + + tmpdir = Atomos.default_tmpdir_for_file(dest, tmpdir) + + require 'tempfile' + Tempfile.open(".atomos.#{File.basename(dest)}", tmpdir) do |tmpfile| + if contents + tmpfile << contents + else + retval = yield tmpfile + end + + tmpfile.close + + File.rename(tmpfile.path, dest) + + retval + end + end + # rubocop:enable Metrics/MethodLength + + def self.default_tmpdir_for_file(dest, tmpdir) + tmpdir ||= begin + require 'tmpdir' + Dir.tmpdir + end + + # Ensure the destination is on the same device as tmpdir + if File.stat(tmpdir).dev != File.stat(File.dirname(dest)).dev + # If not, use the directory of the destination as the tmpdir. + tmpdir = File.dirname(dest) + end + + tmpdir + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/atomos-0.1.3/lib/atomos/version.rb b/ios/vendor/bundle/ruby/2.6.0/gems/atomos-0.1.3/lib/atomos/version.rb new file mode 100644 index 0000000..f52f703 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/atomos-0.1.3/lib/atomos/version.rb @@ -0,0 +1,5 @@ +# frozen_string_literal: true + +module Atomos + VERSION = File.read(File.expand_path('../../../VERSION', __FILE__)) +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/base64-0.3.0/BSDL b/ios/vendor/bundle/ruby/2.6.0/gems/base64-0.3.0/BSDL new file mode 100644 index 0000000..66d9359 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/base64-0.3.0/BSDL @@ -0,0 +1,22 @@ +Copyright (C) 1993-2013 Yukihiro Matsumoto. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/base64-0.3.0/COPYING b/ios/vendor/bundle/ruby/2.6.0/gems/base64-0.3.0/COPYING new file mode 100644 index 0000000..48e5a96 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/base64-0.3.0/COPYING @@ -0,0 +1,56 @@ +Ruby is copyrighted free software by Yukihiro Matsumoto . +You can redistribute it and/or modify it under either the terms of the +2-clause BSDL (see the file BSDL), or the conditions below: + +1. You may make and give away verbatim copies of the source form of the + software without restriction, provided that you duplicate all of the + original copyright notices and associated disclaimers. + +2. You may modify your copy of the software in any way, provided that + you do at least ONE of the following: + + a. place your modifications in the Public Domain or otherwise + make them Freely Available, such as by posting said + modifications to Usenet or an equivalent medium, or by allowing + the author to include your modifications in the software. + + b. use the modified software only within your corporation or + organization. + + c. give non-standard binaries non-standard names, with + instructions on where to get the original software distribution. + + d. make other distribution arrangements with the author. + +3. You may distribute the software in object code or binary form, + provided that you do at least ONE of the following: + + a. distribute the binaries and library files of the software, + together with instructions (in the manual page or equivalent) + on where to get the original distribution. + + b. accompany the distribution with the machine-readable source of + the software. + + c. give non-standard binaries non-standard names, with + instructions on where to get the original software distribution. + + d. make other distribution arrangements with the author. + +4. You may modify and include the part of the software into any other + software (possibly commercial). But some files in the distribution + are not written by the author, so that they are not under these terms. + + For the list of those files and their copying conditions, see the + file LEGAL. + +5. The scripts and library files supplied as input to or produced as + output from the software do not automatically fall under the + copyright of the software, but belong to whomever generated them, + and may be sold commercially, and may be aggregated with this + software. + +6. THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE. diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/base64-0.3.0/LEGAL b/ios/vendor/bundle/ruby/2.6.0/gems/base64-0.3.0/LEGAL new file mode 100644 index 0000000..f2d8014 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/base64-0.3.0/LEGAL @@ -0,0 +1,60 @@ +# -*- rdoc -*- + += LEGAL NOTICE INFORMATION +-------------------------- + +All the files in this distribution are covered under either the Ruby's +license (see the file COPYING) or public-domain except some files +mentioned below. + +== MIT License +>>> + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be + included in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +== Old-style BSD license +>>> + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. Neither the name of the University nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + SUCH DAMAGE. + + IMPORTANT NOTE:: + + From ftp://ftp.cs.berkeley.edu/pub/4bsd/README.Impt.License.Change + paragraph 3 above is now null and void. diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/base64-0.3.0/README.md b/ios/vendor/bundle/ruby/2.6.0/gems/base64-0.3.0/README.md new file mode 100644 index 0000000..a29c58e --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/base64-0.3.0/README.md @@ -0,0 +1,48 @@ +# Base64 + +The Base64 module provides for the encoding (`#encode64`, `#strict_encode64`, +`#urlsafe_encode64`) and decoding (`#decode64`, `#strict_decode64`, +`#urlsafe_decode64`) of binary data using a Base64 representation. + +## Installation + +Add this line to your application's Gemfile: + +```ruby +gem 'base64' +``` + +And then execute: + + $ bundle install + +Or install it yourself as: + + $ gem install base64 + +## Usage + +A simple encoding and decoding. + +```ruby +require "base64" + +enc = Base64.encode64('Send reinforcements') + # -> "U2VuZCByZWluZm9yY2VtZW50cw==\n" +plain = Base64.decode64(enc) + # -> "Send reinforcements" +``` + +The purpose of using base64 to encode data is that it translates any +binary data into purely printable characters. + +## Development + +After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake test` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment. + +To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org). + +## Contributing + +Bug reports and pull requests are welcome on GitHub at https://github.com/ruby/base64. + diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/base64-0.3.0/lib/base64.rb b/ios/vendor/bundle/ruby/2.6.0/gems/base64-0.3.0/lib/base64.rb new file mode 100644 index 0000000..8c0145d --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/base64-0.3.0/lib/base64.rb @@ -0,0 +1,381 @@ +# frozen_string_literal: true +# +# \Module \Base64 provides methods for: +# +# - \Encoding a binary string (containing non-ASCII characters) +# as a string of printable ASCII characters. +# - Decoding such an encoded string. +# +# \Base64 is commonly used in contexts where binary data +# is not allowed or supported: +# +# - Images in HTML or CSS files, or in URLs. +# - Email attachments. +# +# A \Base64-encoded string is about one-third larger that its source. +# See the {Wikipedia article}[https://en.wikipedia.org/wiki/Base64] +# for more information. +# +# This module provides three pairs of encode/decode methods. +# Your choices among these methods should depend on: +# +# - Which character set is to be used for encoding and decoding. +# - Whether "padding" is to be used. +# - Whether encoded strings are to contain newlines. +# +# Note: Examples on this page assume that the including program has executed: +# +# require 'base64' +# +# == \Encoding Character Sets +# +# A \Base64-encoded string consists only of characters from a 64-character set: +# +# - ('A'..'Z'). +# - ('a'..'z'). +# - ('0'..'9'). +# - =, the 'padding' character. +# - Either: +# - %w[+ /]: +# {RFC-2045-compliant}[https://datatracker.ietf.org/doc/html/rfc2045]; +# _not_ safe for URLs. +# - %w[- _]: +# {RFC-4648-compliant}[https://datatracker.ietf.org/doc/html/rfc4648]; +# safe for URLs. +# +# If you are working with \Base64-encoded strings that will come from +# or be put into URLs, you should choose this encoder-decoder pair +# of RFC-4648-compliant methods: +# +# - Base64.urlsafe_encode64 and Base64.urlsafe_decode64. +# +# Otherwise, you may choose any of the pairs in this module, +# including the pair above, or the RFC-2045-compliant pairs: +# +# - Base64.encode64 and Base64.decode64. +# - Base64.strict_encode64 and Base64.strict_decode64. +# +# == Padding +# +# \Base64-encoding changes a triplet of input bytes +# into a quartet of output characters. +# +# Padding in Encode Methods +# +# Padding -- extending an encoded string with zero, one, or two trailing +# = characters -- is performed by methods Base64.encode64, +# Base64.strict_encode64, and, by default, Base64.urlsafe_encode64: +# +# Base64.encode64('s') # => "cw==\n" +# Base64.strict_encode64('s') # => "cw==" +# Base64.urlsafe_encode64('s') # => "cw==" +# Base64.urlsafe_encode64('s', padding: false) # => "cw" +# +# When padding is performed, the encoded string is always of length 4n, +# where +n+ is a non-negative integer: +# +# - Input bytes of length 3n generate unpadded output characters +# of length 4n: +# +# # n = 1: 3 bytes => 4 characters. +# Base64.strict_encode64('123') # => "MDEy" +# # n = 2: 6 bytes => 8 characters. +# Base64.strict_encode64('123456') # => "MDEyMzQ1" +# +# - Input bytes of length 3n+1 generate padded output characters +# of length 4(n+1), with two padding characters at the end: +# +# # n = 1: 4 bytes => 8 characters. +# Base64.strict_encode64('1234') # => "MDEyMw==" +# # n = 2: 7 bytes => 12 characters. +# Base64.strict_encode64('1234567') # => "MDEyMzQ1Ng==" +# +# - Input bytes of length 3n+2 generate padded output characters +# of length 4(n+1), with one padding character at the end: +# +# # n = 1: 5 bytes => 8 characters. +# Base64.strict_encode64('12345') # => "MDEyMzQ=" +# # n = 2: 8 bytes => 12 characters. +# Base64.strict_encode64('12345678') # => "MDEyMzQ1Njc=" +# +# When padding is suppressed, for a positive integer n: +# +# - Input bytes of length 3n generate unpadded output characters +# of length 4n: +# +# # n = 1: 3 bytes => 4 characters. +# Base64.urlsafe_encode64('123', padding: false) # => "MDEy" +# # n = 2: 6 bytes => 8 characters. +# Base64.urlsafe_encode64('123456', padding: false) # => "MDEyMzQ1" +# +# - Input bytes of length 3n+1 generate unpadded output characters +# of length 4n+2, with two padding characters at the end: +# +# # n = 1: 4 bytes => 6 characters. +# Base64.urlsafe_encode64('1234', padding: false) # => "MDEyMw" +# # n = 2: 7 bytes => 10 characters. +# Base64.urlsafe_encode64('1234567', padding: false) # => "MDEyMzQ1Ng" +# +# - Input bytes of length 3n+2 generate unpadded output characters +# of length 4n+3, with one padding character at the end: +# +# # n = 1: 5 bytes => 7 characters. +# Base64.urlsafe_encode64('12345', padding: false) # => "MDEyMzQ" +# # m = 2: 8 bytes => 11 characters. +# Base64.urlsafe_encode64('12345678', padding: false) # => "MDEyMzQ1Njc" +# +# Padding in Decode Methods +# +# All of the \Base64 decode methods support (but do not require) padding. +# +# \Method Base64.decode64 does not check the size of the padding: +# +# Base64.decode64("MDEyMzQ1Njc") # => "01234567" +# Base64.decode64("MDEyMzQ1Njc=") # => "01234567" +# Base64.decode64("MDEyMzQ1Njc==") # => "01234567" +# +# \Method Base64.strict_decode64 strictly enforces padding size: +# +# Base64.strict_decode64("MDEyMzQ1Njc") # Raises ArgumentError +# Base64.strict_decode64("MDEyMzQ1Njc=") # => "01234567" +# Base64.strict_decode64("MDEyMzQ1Njc==") # Raises ArgumentError +# +# \Method Base64.urlsafe_decode64 allows padding in the encoded string, +# which if present, must be correct: +# see {Padding}[Base64.html#module-Base64-label-Padding], above: +# +# Base64.urlsafe_decode64("MDEyMzQ1Njc") # => "01234567" +# Base64.urlsafe_decode64("MDEyMzQ1Njc=") # => "01234567" +# Base64.urlsafe_decode64("MDEyMzQ1Njc==") # Raises ArgumentError. +# +# == Newlines +# +# An encoded string returned by Base64.encode64 or Base64.urlsafe_encode64 +# has an embedded newline character +# after each 60-character sequence, and, if non-empty, at the end: +# +# # No newline if empty. +# encoded = Base64.encode64("\x00" * 0) +# encoded.index("\n") # => nil +# +# # Newline at end of short output. +# encoded = Base64.encode64("\x00" * 1) +# encoded.size # => 4 +# encoded.index("\n") # => 4 +# +# # Newline at end of longer output. +# encoded = Base64.encode64("\x00" * 45) +# encoded.size # => 60 +# encoded.index("\n") # => 60 +# +# # Newlines embedded and at end of still longer output. +# encoded = Base64.encode64("\x00" * 46) +# encoded.size # => 65 +# encoded.rindex("\n") # => 65 +# encoded.split("\n").map {|s| s.size } # => [60, 4] +# +# The string to be encoded may itself contain newlines, +# which are encoded as \Base64: +# +# # Base64.encode64("\n\n\n") # => "CgoK\n" +# s = "This is line 1\nThis is line 2\n" +# Base64.encode64(s) # => "VGhpcyBpcyBsaW5lIDEKVGhpcyBpcyBsaW5lIDIK\n" +# +module Base64 + + VERSION = "0.3.0" + + module_function + + # :call-seq: + # Base64.encode64(string) -> encoded_string + # + # Returns a string containing the RFC-2045-compliant \Base64-encoding of +string+. + # + # Per RFC 2045, the returned string may contain the URL-unsafe characters + # + or /; + # see {Encoding Character Set}[Base64.html#module-Base64-label-Encoding+Character+Sets] above: + # + # Base64.encode64("\xFB\xEF\xBE") # => "++++\n" + # Base64.encode64("\xFF\xFF\xFF") # => "////\n" + # + # The returned string may include padding; + # see {Padding}[Base64.html#module-Base64-label-Padding] above. + # + # Base64.encode64('*') # => "Kg==\n" + # + # The returned string ends with a newline character, and if sufficiently long + # will have one or more embedded newline characters; + # see {Newlines}[Base64.html#module-Base64-label-Newlines] above: + # + # Base64.encode64('*') # => "Kg==\n" + # Base64.encode64('*' * 46) + # # => "KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq\nKg==\n" + # + # The string to be encoded may itself contain newlines, + # which will be encoded as ordinary \Base64: + # + # Base64.encode64("\n\n\n") # => "CgoK\n" + # s = "This is line 1\nThis is line 2\n" + # Base64.encode64(s) # => "VGhpcyBpcyBsaW5lIDEKVGhpcyBpcyBsaW5lIDIK\n" + # + def encode64(bin) + [bin].pack("m") + end + + # :call-seq: + # Base64.decode(encoded_string) -> decoded_string + # + # Returns a string containing the decoding of an RFC-2045-compliant + # \Base64-encoded string +encoded_string+: + # + # s = "VGhpcyBpcyBsaW5lIDEKVGhpcyBpcyBsaW5lIDIK\n" + # Base64.decode64(s) # => "This is line 1\nThis is line 2\n" + # + # Non-\Base64 characters in +encoded_string+ are ignored; + # see {Encoding Character Set}[Base64.html#module-Base64-label-Encoding+Character+Sets] above: + # these include newline characters and characters - and /: + # + # Base64.decode64("\x00\n-_") # => "" + # + # Padding in +encoded_string+ (even if incorrect) is ignored: + # + # Base64.decode64("MDEyMzQ1Njc") # => "01234567" + # Base64.decode64("MDEyMzQ1Njc=") # => "01234567" + # Base64.decode64("MDEyMzQ1Njc==") # => "01234567" + # + def decode64(str) + str.unpack1("m") + end + + # :call-seq: + # Base64.strict_encode64(string) -> encoded_string + # + # Returns a string containing the RFC-2045-compliant \Base64-encoding of +string+. + # + # Per RFC 2045, the returned string may contain the URL-unsafe characters + # + or /; + # see {Encoding Character Set}[Base64.html#module-Base64-label-Encoding+Character+Sets] above: + # + # Base64.strict_encode64("\xFB\xEF\xBE") # => "++++\n" + # Base64.strict_encode64("\xFF\xFF\xFF") # => "////\n" + # + # The returned string may include padding; + # see {Padding}[Base64.html#module-Base64-label-Padding] above. + # + # Base64.strict_encode64('*') # => "Kg==\n" + # + # The returned string will have no newline characters, regardless of its length; + # see {Newlines}[Base64.html#module-Base64-label-Newlines] above: + # + # Base64.strict_encode64('*') # => "Kg==" + # Base64.strict_encode64('*' * 46) + # # => "KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg==" + # + # The string to be encoded may itself contain newlines, + # which will be encoded as ordinary \Base64: + # + # Base64.strict_encode64("\n\n\n") # => "CgoK" + # s = "This is line 1\nThis is line 2\n" + # Base64.strict_encode64(s) # => "VGhpcyBpcyBsaW5lIDEKVGhpcyBpcyBsaW5lIDIK" + # + def strict_encode64(bin) + [bin].pack("m0") + end + + # :call-seq: + # Base64.strict_decode64(encoded_string) -> decoded_string + # + # Returns a string containing the decoding of an RFC-2045-compliant + # \Base64-encoded string +encoded_string+: + # + # s = "VGhpcyBpcyBsaW5lIDEKVGhpcyBpcyBsaW5lIDIK" + # Base64.strict_decode64(s) # => "This is line 1\nThis is line 2\n" + # + # Non-\Base64 characters in +encoded_string+ are not allowed; + # see {Encoding Character Set}[Base64.html#module-Base64-label-Encoding+Character+Sets] above: + # these include newline characters and characters - and /: + # + # Base64.strict_decode64("\n") # Raises ArgumentError + # Base64.strict_decode64('-') # Raises ArgumentError + # Base64.strict_decode64('_') # Raises ArgumentError + # + # Padding in +encoded_string+, if present, must be correct: + # + # Base64.strict_decode64("MDEyMzQ1Njc") # Raises ArgumentError + # Base64.strict_decode64("MDEyMzQ1Njc=") # => "01234567" + # Base64.strict_decode64("MDEyMzQ1Njc==") # Raises ArgumentError + # + def strict_decode64(str) + str.unpack1("m0") + end + + # :call-seq: + # Base64.urlsafe_encode64(string) -> encoded_string + # + # Returns the RFC-4648-compliant \Base64-encoding of +string+. + # + # Per RFC 4648, the returned string will not contain the URL-unsafe characters + # + or /, + # but instead may contain the URL-safe characters + # - and _; + # see {Encoding Character Set}[Base64.html#module-Base64-label-Encoding+Character+Sets] above: + # + # Base64.urlsafe_encode64("\xFB\xEF\xBE") # => "----" + # Base64.urlsafe_encode64("\xFF\xFF\xFF") # => "____" + # + # By default, the returned string may have padding; + # see {Padding}[Base64.html#module-Base64-label-Padding], above: + # + # Base64.urlsafe_encode64('*') # => "Kg==" + # + # Optionally, you can suppress padding: + # + # Base64.urlsafe_encode64('*', padding: false) # => "Kg" + # + # The returned string will have no newline characters, regardless of its length; + # see {Newlines}[Base64.html#module-Base64-label-Newlines] above: + # + # Base64.urlsafe_encode64('*') # => "Kg==" + # Base64.urlsafe_encode64('*' * 46) + # # => "KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg==" + # + def urlsafe_encode64(bin, padding: true) + str = strict_encode64(bin) + str.chomp!("==") or str.chomp!("=") unless padding + str.tr!("+/", "-_") + str + end + + # :call-seq: + # Base64.urlsafe_decode64(encoded_string) -> decoded_string + # + # Returns the decoding of an RFC-4648-compliant \Base64-encoded string +encoded_string+: + # + # +encoded_string+ may not contain non-Base64 characters; + # see {Encoding Character Set}[Base64.html#module-Base64-label-Encoding+Character+Sets] above: + # + # Base64.urlsafe_decode64('+') # Raises ArgumentError. + # Base64.urlsafe_decode64('/') # Raises ArgumentError. + # Base64.urlsafe_decode64("\n") # Raises ArgumentError. + # + # Padding in +encoded_string+, if present, must be correct: + # see {Padding}[Base64.html#module-Base64-label-Padding], above: + # + # Base64.urlsafe_decode64("MDEyMzQ1Njc") # => "01234567" + # Base64.urlsafe_decode64("MDEyMzQ1Njc=") # => "01234567" + # Base64.urlsafe_decode64("MDEyMzQ1Njc==") # Raises ArgumentError. + # + def urlsafe_decode64(str) + # NOTE: RFC 4648 does say nothing about unpadded input, but says that + # "the excess pad characters MAY also be ignored", so it is inferred that + # unpadded input is also acceptable. + if !str.end_with?("=") && str.length % 4 != 0 + str = str.ljust((str.length + 3) & ~3, "=") + str.tr!("-_", "+/") + else + str = str.tr("-_", "+/") + end + strict_decode64(str) + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/base64-0.3.0/sig/base64.rbs b/ios/vendor/bundle/ruby/2.6.0/gems/base64-0.3.0/sig/base64.rbs new file mode 100644 index 0000000..147e874 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/base64-0.3.0/sig/base64.rbs @@ -0,0 +1,355 @@ +# +# Module Base64 provides methods for: +# +# * Encoding a binary string (containing non-ASCII characters) as a string of +# printable ASCII characters. +# * Decoding such an encoded string. +# +# Base64 is commonly used in contexts where binary data is not allowed or +# supported: +# +# * Images in HTML or CSS files, or in URLs. +# * Email attachments. +# +# A Base64-encoded string is about one-third larger that its source. See the +# [Wikipedia article](https://en.wikipedia.org/wiki/Base64) for more +# information. +# +# This module provides three pairs of encode/decode methods. Your choices among +# these methods should depend on: +# +# * Which character set is to be used for encoding and decoding. +# * Whether "padding" is to be used. +# * Whether encoded strings are to contain newlines. +# +# Note: Examples on this page assume that the including program has executed: +# +# require 'base64' +# +# ## Encoding Character Sets +# +# A Base64-encoded string consists only of characters from a 64-character set: +# +# * `('A'..'Z')`. +# * `('a'..'z')`. +# * `('0'..'9')`. +# * `=`, the 'padding' character. +# * Either: +# * `%w[+ /]`: +# [RFC-2045-compliant](https://datatracker.ietf.org/doc/html/rfc2045); +# *not* safe for URLs. +# * `%w[- _]`: +# [RFC-4648-compliant](https://datatracker.ietf.org/doc/html/rfc4648); +# safe for URLs. +# +# If you are working with Base64-encoded strings that will come from or be put +# into URLs, you should choose this encoder-decoder pair of RFC-4648-compliant +# methods: +# +# * Base64.urlsafe_encode64 and Base64.urlsafe_decode64. +# +# Otherwise, you may choose any of the pairs in this module, including the pair +# above, or the RFC-2045-compliant pairs: +# +# * Base64.encode64 and Base64.decode64. +# * Base64.strict_encode64 and Base64.strict_decode64. +# +# ## Padding +# +# Base64-encoding changes a triplet of input bytes into a quartet of output +# characters. +# +# **Padding in Encode Methods** +# +# Padding -- extending an encoded string with zero, one, or two trailing `=` +# characters -- is performed by methods Base64.encode64, Base64.strict_encode64, +# and, by default, Base64.urlsafe_encode64: +# +# Base64.encode64('s') # => "cw==\n" +# Base64.strict_encode64('s') # => "cw==" +# Base64.urlsafe_encode64('s') # => "cw==" +# Base64.urlsafe_encode64('s', padding: false) # => "cw" +# +# When padding is performed, the encoded string is always of length *4n*, where +# `n` is a non-negative integer: +# +# * Input bytes of length *3n* generate unpadded output characters of length +# *4n*: +# +# # n = 1: 3 bytes => 4 characters. +# Base64.strict_encode64('123') # => "MDEy" +# # n = 2: 6 bytes => 8 characters. +# Base64.strict_encode64('123456') # => "MDEyMzQ1" +# +# * Input bytes of length *3n+1* generate padded output characters of length +# *4(n+1)*, with two padding characters at the end: +# +# # n = 1: 4 bytes => 8 characters. +# Base64.strict_encode64('1234') # => "MDEyMw==" +# # n = 2: 7 bytes => 12 characters. +# Base64.strict_encode64('1234567') # => "MDEyMzQ1Ng==" +# +# * Input bytes of length *3n+2* generate padded output characters of length +# *4(n+1)*, with one padding character at the end: +# +# # n = 1: 5 bytes => 8 characters. +# Base64.strict_encode64('12345') # => "MDEyMzQ=" +# # n = 2: 8 bytes => 12 characters. +# Base64.strict_encode64('12345678') # => "MDEyMzQ1Njc=" +# +# When padding is suppressed, for a positive integer *n*: +# +# * Input bytes of length *3n* generate unpadded output characters of length +# *4n*: +# +# # n = 1: 3 bytes => 4 characters. +# Base64.urlsafe_encode64('123', padding: false) # => "MDEy" +# # n = 2: 6 bytes => 8 characters. +# Base64.urlsafe_encode64('123456', padding: false) # => "MDEyMzQ1" +# +# * Input bytes of length *3n+1* generate unpadded output characters of length +# *4n+2*, with two padding characters at the end: +# +# # n = 1: 4 bytes => 6 characters. +# Base64.urlsafe_encode64('1234', padding: false) # => "MDEyMw" +# # n = 2: 7 bytes => 10 characters. +# Base64.urlsafe_encode64('1234567', padding: false) # => "MDEyMzQ1Ng" +# +# * Input bytes of length *3n+2* generate unpadded output characters of length +# *4n+3*, with one padding character at the end: +# +# # n = 1: 5 bytes => 7 characters. +# Base64.urlsafe_encode64('12345', padding: false) # => "MDEyMzQ" +# # m = 2: 8 bytes => 11 characters. +# Base64.urlsafe_encode64('12345678', padding: false) # => "MDEyMzQ1Njc" +# +# **Padding in Decode Methods** +# +# All of the Base64 decode methods support (but do not require) padding. +# +# Method Base64.decode64 does not check the size of the padding: +# +# Base64.decode64("MDEyMzQ1Njc") # => "01234567" +# Base64.decode64("MDEyMzQ1Njc=") # => "01234567" +# Base64.decode64("MDEyMzQ1Njc==") # => "01234567" +# +# Method Base64.strict_decode64 strictly enforces padding size: +# +# Base64.strict_decode64("MDEyMzQ1Njc") # Raises ArgumentError +# Base64.strict_decode64("MDEyMzQ1Njc=") # => "01234567" +# Base64.strict_decode64("MDEyMzQ1Njc==") # Raises ArgumentError +# +# Method Base64.urlsafe_decode64 allows padding in `str`, which if present, must +# be correct: see [Padding](Base64.html#module-Base64-label-Padding), above: +# +# Base64.urlsafe_decode64("MDEyMzQ1Njc") # => "01234567" +# Base64.urlsafe_decode64("MDEyMzQ1Njc=") # => "01234567" +# Base64.urlsafe_decode64("MDEyMzQ1Njc==") # Raises ArgumentError. +# +# ## Newlines +# +# An encoded string returned by Base64.encode64 or Base64.urlsafe_encode64 has +# an embedded newline character after each 60-character sequence, and, if +# non-empty, at the end: +# +# # No newline if empty. +# encoded = Base64.encode64("\x00" * 0) +# encoded.index("\n") # => nil +# +# # Newline at end of short output. +# encoded = Base64.encode64("\x00" * 1) +# encoded.size # => 4 +# encoded.index("\n") # => 4 +# +# # Newline at end of longer output. +# encoded = Base64.encode64("\x00" * 45) +# encoded.size # => 60 +# encoded.index("\n") # => 60 +# +# # Newlines embedded and at end of still longer output. +# encoded = Base64.encode64("\x00" * 46) +# encoded.size # => 65 +# encoded.rindex("\n") # => 65 +# encoded.split("\n").map {|s| s.size } # => [60, 4] +# +# The string to be encoded may itself contain newlines, which are encoded as +# Base64: +# +# # Base64.encode64("\n\n\n") # => "CgoK\n" +# s = "This is line 1\nThis is line 2\n" +# Base64.encode64(s) # => "VGhpcyBpcyBsaW5lIDEKVGhpcyBpcyBsaW5lIDIK\n" +# +module Base64 + # + # Returns a string containing the decoding of an RFC-2045-compliant + # Base64-encoded string `str`: + # + # s = "VGhpcyBpcyBsaW5lIDEKVGhpcyBpcyBsaW5lIDIK\n" + # Base64.decode64(s) # => "This is line 1\nThis is line 2\n" + # + # Non-Base64 characters in `str` are ignored; see [Encoding Character + # Set](Base64.html#module-Base64-label-Encoding+Character+Sets) above: these + # include newline characters and characters `-` and `/`: + # + # Base64.decode64("\x00\n-_") # => "" + # + # Padding in `str` (even if incorrect) is ignored: + # + # Base64.decode64("MDEyMzQ1Njc") # => "01234567" + # Base64.decode64("MDEyMzQ1Njc=") # => "01234567" + # Base64.decode64("MDEyMzQ1Njc==") # => "01234567" + # + def self?.decode64: (String str) -> String + + # + # Returns a string containing the RFC-2045-compliant Base64-encoding of `bin`. + # + # Per RFC 2045, the returned string may contain the URL-unsafe characters `+` or + # `/`; see [Encoding Character + # Set](Base64.html#module-Base64-label-Encoding+Character+Sets) above: + # + # Base64.encode64("\xFB\xEF\xBE") # => "++++\n" + # Base64.encode64("\xFF\xFF\xFF") # => "////\n" + # + # The returned string may include padding; see + # [Padding](Base64.html#module-Base64-label-Padding) above. + # + # Base64.encode64('*') # => "Kg==\n" + # + # The returned string ends with a newline character, and if sufficiently long + # will have one or more embedded newline characters; see + # [Newlines](Base64.html#module-Base64-label-Newlines) above: + # + # Base64.encode64('*') # => "Kg==\n" + # Base64.encode64('*' * 46) + # # => "KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq\nKg==\n" + # + # The string to be encoded may itself contain newlines, which will be encoded as + # ordinary Base64: + # + # Base64.encode64("\n\n\n") # => "CgoK\n" + # s = "This is line 1\nThis is line 2\n" + # Base64.encode64(s) # => "VGhpcyBpcyBsaW5lIDEKVGhpcyBpcyBsaW5lIDIK\n" + # + def self?.encode64: (String bin) -> String + + # + # Returns a string containing the decoding of an RFC-2045-compliant + # Base64-encoded string `str`: + # + # s = "VGhpcyBpcyBsaW5lIDEKVGhpcyBpcyBsaW5lIDIK" + # Base64.strict_decode64(s) # => "This is line 1\nThis is line 2\n" + # + # Non-Base64 characters in `str` not allowed; see [Encoding Character + # Set](Base64.html#module-Base64-label-Encoding+Character+Sets) above: these + # include newline characters and characters `-` and `/`: + # + # Base64.strict_decode64("\n") # Raises ArgumentError + # Base64.strict_decode64('-') # Raises ArgumentError + # Base64.strict_decode64('_') # Raises ArgumentError + # + # Padding in `str`, if present, must be correct: + # + # Base64.strict_decode64("MDEyMzQ1Njc") # Raises ArgumentError + # Base64.strict_decode64("MDEyMzQ1Njc=") # => "01234567" + # Base64.strict_decode64("MDEyMzQ1Njc==") # Raises ArgumentError + # + def self?.strict_decode64: (String str) -> String + + # + # Returns a string containing the RFC-2045-compliant Base64-encoding of `bin`. + # + # Per RFC 2045, the returned string may contain the URL-unsafe characters `+` or + # `/`; see [Encoding Character + # Set](Base64.html#module-Base64-label-Encoding+Character+Sets) above: + # + # Base64.strict_encode64("\xFB\xEF\xBE") # => "++++\n" + # Base64.strict_encode64("\xFF\xFF\xFF") # => "////\n" + # + # The returned string may include padding; see + # [Padding](Base64.html#module-Base64-label-Padding) above. + # + # Base64.strict_encode64('*') # => "Kg==\n" + # + # The returned string will have no newline characters, regardless of its length; + # see [Newlines](Base64.html#module-Base64-label-Newlines) above: + # + # Base64.strict_encode64('*') # => "Kg==" + # Base64.strict_encode64('*' * 46) + # # => "KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg==" + # + # The string to be encoded may itself contain newlines, which will be encoded as + # ordinary Base64: + # + # Base64.strict_encode64("\n\n\n") # => "CgoK" + # s = "This is line 1\nThis is line 2\n" + # Base64.strict_encode64(s) # => "VGhpcyBpcyBsaW5lIDEKVGhpcyBpcyBsaW5lIDIK" + # + def self?.strict_encode64: (String bin) -> String + + # + # Returns the decoding of an RFC-4648-compliant Base64-encoded string `str`: + # + # `str` may not contain non-Base64 characters; see [Encoding Character + # Set](Base64.html#module-Base64-label-Encoding+Character+Sets) above: + # + # Base64.urlsafe_decode64('+') # Raises ArgumentError. + # Base64.urlsafe_decode64('/') # Raises ArgumentError. + # Base64.urlsafe_decode64("\n") # Raises ArgumentError. + # + # Padding in `str`, if present, must be correct: see + # [Padding](Base64.html#module-Base64-label-Padding), above: + # + # Base64.urlsafe_decode64("MDEyMzQ1Njc") # => "01234567" + # Base64.urlsafe_decode64("MDEyMzQ1Njc=") # => "01234567" + # Base64.urlsafe_decode64("MDEyMzQ1Njc==") # Raises ArgumentError. + # + def self?.urlsafe_decode64: (String str) -> String + + # + # Returns the RFC-4648-compliant Base64-encoding of `bin`. + # + # Per RFC 4648, the returned string will not contain the URL-unsafe characters + # `+` or `/`, but instead may contain the URL-safe characters `-` and `_`; see + # [Encoding Character + # Set](Base64.html#module-Base64-label-Encoding+Character+Sets) above: + # + # Base64.urlsafe_encode64("\xFB\xEF\xBE") # => "----" + # Base64.urlsafe_encode64("\xFF\xFF\xFF") # => "____" + # + # By default, the returned string may have padding; see + # [Padding](Base64.html#module-Base64-label-Padding), above: + # + # Base64.urlsafe_encode64('*') # => "Kg==" + # + # Optionally, you can suppress padding: + # + # Base64.urlsafe_encode64('*', padding: false) # => "Kg" + # + # The returned string will have no newline characters, regardless of its length; + # see [Newlines](Base64.html#module-Base64-label-Newlines) above: + # + # Base64.urlsafe_encode64('*') # => "Kg==" + # Base64.urlsafe_encode64('*' * 46) + # # => "KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg==" + # + def self?.urlsafe_encode64: (String bin, ?padding: boolish) -> String +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/claide-1.1.0/.github/workflows/ci.yml b/ios/vendor/bundle/ruby/2.6.0/gems/claide-1.1.0/.github/workflows/ci.yml new file mode 100644 index 0000000..54e1f05 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/claide-1.1.0/.github/workflows/ci.yml @@ -0,0 +1,45 @@ +name: ci + +on: + pull_request: + + push: + branches: + - master + - '*-stable' + +jobs: + ci: + name: Ruby ${{ matrix.ruby.name }} + + runs-on: ubuntu-20.04 + + strategy: + fail-fast: false + + matrix: + ruby: + - { name: "2.3", value: 2.3.8 } + - { name: "2.4", value: 2.4.10 } + - { name: "2.5", value: 2.5.9 } + - { name: "2.6", value: 2.6.9 } + - { name: "2.7", value: 2.7.5 } + - { name: "3.0", value: 3.0.3 } + - { name: "3.1", value: 3.1.0 } + + steps: + - uses: actions/checkout@v2 + + - name: Setup ruby + uses: ruby/setup-ruby@v1 + with: + ruby-version: ${{ matrix.ruby.value }} + bundler-cache: true + + - name: Run Test + run: bundle exec rake spec + + - name: Test & publish code coverage + uses: paambaati/codeclimate-action@v3.0.0 + env: + CC_TEST_REPORTER_ID: 46c8b29dd6711f35704e7c5a541486cbbf2cff8b2df8ce755bfc09917d3c1cbb diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/claide-1.1.0/.gitignore b/ios/vendor/bundle/ruby/2.6.0/gems/claide-1.1.0/.gitignore new file mode 100644 index 0000000..001d28f --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/claide-1.1.0/.gitignore @@ -0,0 +1,17 @@ +*.gem +*.rbc +.bundle +.config +.yardoc +InstalledFiles +_yardoc +coverage +doc/ +lib/bundler/man +pkg +rdoc +spec/reports +test/tmp +test/version_tmp +tmp +.idea diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/claide-1.1.0/.kick b/ios/vendor/bundle/ruby/2.6.0/gems/claide-1.1.0/.kick new file mode 100644 index 0000000..0686cce --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/claide-1.1.0/.kick @@ -0,0 +1,30 @@ +recipe :ruby + +Kicker::Recipes::Ruby.runner_bin = 'bundle exec bacon --quiet' + +process do |files| + specs = files.take_and_map do |file| + if file =~ %r{lib/[^/]*/(.+?)\.rb$} + s = Dir.glob("spec/**/#{File.basename(file, '.rb')}_spec.rb") + s.uniq unless s.empty? + end + end + Kicker::Recipes::Ruby.run_tests(specs) +end + +# Have written this so many times, probably should make a recipe out of it. +process do |files| + files.each do |file| + case file + when 'Gemfile' + files.delete(file) + execute 'bundle install' + end + end +end + +recipe :ignore +ignore(/.*\/?tags/) +ignore(/.*\/?\.git/) +ignore(/^tmp/) + diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/claide-1.1.0/.rubocop.yml b/ios/vendor/bundle/ruby/2.6.0/gems/claide-1.1.0/.rubocop.yml new file mode 100644 index 0000000..3ef9f69 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/claide-1.1.0/.rubocop.yml @@ -0,0 +1,6 @@ +require: + - rubocop-performance + +inherit_from: + - .rubocop_todo.yml + - .rubocop_cocoapods.yml diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/claide-1.1.0/.rubocop_cocoapods.yml b/ios/vendor/bundle/ruby/2.6.0/gems/claide-1.1.0/.rubocop_cocoapods.yml new file mode 100644 index 0000000..4702a3e --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/claide-1.1.0/.rubocop_cocoapods.yml @@ -0,0 +1,151 @@ +AllCops: + Include: + - ./Rakefile + - ./Gemfile + - ./*.gemspec + Exclude: + - ./spec/fixtures/**/* + - ./vendor/bundle/**/* + +# At the moment not ready to be used +# https://github.com/bbatsov/rubocop/issues/947 +Style/Documentation: + Enabled: false + +#- CocoaPods -----------------------------------------------------------------# + +# We adopted raise instead of fail. +Style/SignalException: + EnforcedStyle: only_raise + +# They are idiomatic +Lint/AssignmentInCondition: + Enabled: false + +# Allow backticks +Style/AsciiComments: + Enabled: false + +# Indentation clarifies logic branches in implementations +Style/IfUnlessModifier: + Enabled: false + +# No enforced convention here. +Style/SingleLineBlockParams: + Enabled: false + +# We only add the comment when needed. +Style/Encoding: + Enabled: false + +# Having these make it easier to *not* forget to add one when adding a new +# value and you can simply copy the previous line. +Style/TrailingCommaInArguments: + EnforcedStyleForMultiline: comma + +Style/TrailingCommaInArrayLiteral: + EnforcedStyleForMultiline: comma + +Style/TrailingCommaInHashLiteral: + EnforcedStyleForMultiline: comma + +Layout/MultilineOperationIndentation: + EnforcedStyle: indented + +# Clashes with CLAide Command#validate! +Style/GuardClause: + Enabled: false + +# Not always desirable: lib/claide/command/plugins_helper.rb:12:15 +Style/Next: + Enabled: false + +# Arbitrary max lengths for classes simply do not work and enabling this will +# lead to a never ending stream of annoyance and changes. +Metrics/ClassLength: + Enabled: false + +# Arbitrary max lengths for modules simply do not work and enabling this will +# lead to a never ending stream of annoyance and changes. +Metrics/ModuleLength: + Enabled: false + +# Arbitrary max lengths for methods simply do not work and enabling this will +# lead to a never ending stream of annoyance and changes. +Metrics/MethodLength: + Enabled: false + +# No enforced convention here. +Metrics/BlockNesting: + Enabled: false + +# It will be obvious which code is complex, Rubocop should only lint simple +# rules for us. +Metrics/AbcSize: + Enabled: false + +# It will be obvious which code is complex, Rubocop should only lint simple +# rules for us. +Metrics/CyclomaticComplexity: + Enabled: false + +# It will be obvious which code is complex, Rubocop should only lint simple +# rules for us. +Metrics/PerceivedComplexity: + Enabled: false + +#- CocoaPods support for Ruby 1.8.7 ------------------------------------------# + +Style/HashSyntax: + EnforcedStyle: hash_rockets + +Style/Lambda: + Enabled: false + +Layout/DotPosition: + EnforcedStyle: trailing + +Style/EachWithObject: + Enabled: false + +Style/SpecialGlobalVars: + Enabled: false + +#- CocoaPods specs -----------------------------------------------------------# + +# Allow for `should.match /regexp/`. +Lint/AmbiguousRegexpLiteral: + Exclude: + - spec/**/* + +Performance/RedundantMatch: + Exclude: + - spec/**/* + +# Allow `object.should == object` syntax. +Lint/Void: + Exclude: + - spec/**/* + +Style/ClassAndModuleChildren: + Exclude: + - spec/**/* + +Lint/UselessComparison: + Exclude: + - spec/**/* + +Lint/RaiseException: + Enabled: false + +Lint/StructNewOverride: + Enabled: false + +Style/HashEachMethods: + Enabled: false + +Style/HashTransformKeys: + Enabled: false + +Style/HashTransformValues: + Enabled: false diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/claide-1.1.0/.rubocop_todo.yml b/ios/vendor/bundle/ruby/2.6.0/gems/claide-1.1.0/.rubocop_todo.yml new file mode 100644 index 0000000..926b32c --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/claide-1.1.0/.rubocop_todo.yml @@ -0,0 +1,70 @@ +# This configuration was generated by +# `rubocop --auto-gen-config` +# on 2016-03-09 18:40:14 -0600 using RuboCop version 0.38.0. +# The point is for the user to remove these configuration records +# one by one as the offenses are removed from the code base. +# Note that changes in the inspected code, or installation of new +# versions of RuboCop, may require this file to be generated again. + +# Offense count: 3 +Lint/IneffectiveAccessModifier: + Exclude: + - 'lib/claide/command.rb' + +# Offense count: 1 +# Cop supports --auto-correct. +Lint/RedundantCopDisableDirective: + Exclude: + - 'spec/command/banner_spec.rb' + +# Offense count: 1 +Performance/FixedSize: + Exclude: + - 'lib/claide/command/banner.rb' + +# Offense count: 1 +# Cop supports --auto-correct. +Performance/StringReplacement: + Exclude: + - 'lib/claide/command/banner.rb' + +# Offense count: 8 +# Cop supports --auto-correct. +# Configuration parameters: EnforcedStyle, SupportedStyles. +# SupportedStyles: prefer_alias, prefer_alias_method +Style/Alias: + Exclude: + - 'lib/claide/argument.rb' + - 'lib/claide/command.rb' + +# Offense count: 1 +# Cop supports --auto-correct. +# Configuration parameters: SingleLineConditionsOnly. +Style/ConditionalAssignment: + Exclude: + - 'lib/claide/command/banner.rb' + +# Offense count: 1 +Style/IfInsideElse: + Exclude: + - 'lib/claide/command.rb' + +# Offense count: 9 +# Cop supports --auto-correct. +Style/MutableConstant: + Exclude: + - 'lib/claide/ansi.rb' + - 'lib/claide/argument.rb' + - 'lib/claide/command.rb' + +# Offense count: 1 +# Cop supports --auto-correct. +Style/ParallelAssignment: + Exclude: + - 'lib/claide/command/argument_suggester.rb' + +# Offense count: 1 +# Cop supports --auto-correct. +Style/RedundantInterpolation: + Exclude: + - 'lib/claide/command/argument_suggester.rb' diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/claide-1.1.0/.yardopts b/ios/vendor/bundle/ruby/2.6.0/gems/claide-1.1.0/.yardopts new file mode 100644 index 0000000..a647564 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/claide-1.1.0/.yardopts @@ -0,0 +1 @@ +--markup markdown --protected --charset=utf-8 lib diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/claide-1.1.0/Gemfile b/ios/vendor/bundle/ruby/2.6.0/gems/claide-1.1.0/Gemfile new file mode 100644 index 0000000..c33e9bc --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/claide-1.1.0/Gemfile @@ -0,0 +1,22 @@ +source 'https://rubygems.org' + +gemspec + +gem 'rake' + +group :development do + gem 'kicker' + gem 'colored' # for examples +end + +group :spec do + gem 'bacon' + gem 'json', '< 3' + gem 'mocha-on-bacon' + gem 'prettybacon' + + gem 'parallel', '<= 1.19.2' + gem 'rubocop', '<= 0.81.0' + gem 'rubocop-performance', '<= 1.5.2', :require => nil + gem 'simplecov' +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/claide-1.1.0/Gemfile.lock b/ios/vendor/bundle/ruby/2.6.0/gems/claide-1.1.0/Gemfile.lock new file mode 100644 index 0000000..22fe1a9 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/claide-1.1.0/Gemfile.lock @@ -0,0 +1,79 @@ +PATH + remote: . + specs: + claide (1.1.0) + +GEM + remote: https://rubygems.org/ + specs: + ast (2.4.2) + bacon (1.2.0) + colored (1.2) + docile (1.1.5) + ffi (1.14.2) + jaro_winkler (1.5.4) + json (2.5.1) + kicker (3.0.0) + listen (~> 1.3.0) + notify (~> 0.5.2) + listen (1.3.1) + rb-fsevent (>= 0.9.3) + rb-inotify (>= 0.9) + rb-kqueue (>= 0.2) + metaclass (0.0.4) + mocha (1.1.0) + metaclass (~> 0.0.1) + mocha-on-bacon (0.2.2) + mocha (>= 0.13.0) + multi_json (1.10.1) + notify (0.5.2) + parallel (1.19.2) + parser (3.1.0.0) + ast (~> 2.4.1) + prettybacon (0.0.2) + bacon (~> 1.2) + rainbow (3.0.0) + rake (10.3.2) + rb-fsevent (0.9.4) + rb-inotify (0.9.5) + ffi (>= 0.5.0) + rb-kqueue (0.2.3) + ffi (>= 0.5.0) + rexml (3.2.5) + rubocop (0.81.0) + jaro_winkler (~> 1.5.1) + parallel (~> 1.10) + parser (>= 2.7.0.1) + rainbow (>= 2.2.2, < 4.0) + rexml + ruby-progressbar (~> 1.7) + unicode-display_width (>= 1.4.0, < 2.0) + rubocop-performance (1.5.2) + rubocop (>= 0.71.0) + ruby-progressbar (1.11.0) + simplecov (0.9.1) + docile (~> 1.1.0) + multi_json (~> 1.0) + simplecov-html (~> 0.8.0) + simplecov-html (0.8.0) + unicode-display_width (1.8.0) + +PLATFORMS + ruby + +DEPENDENCIES + bacon + claide! + colored + json (< 3) + kicker + mocha-on-bacon + parallel (<= 1.19.2) + prettybacon + rake + rubocop (<= 0.81.0) + rubocop-performance (<= 1.5.2) + simplecov + +BUNDLED WITH + 2.3.4 diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/claide-1.1.0/LICENSE b/ios/vendor/bundle/ruby/2.6.0/gems/claide-1.1.0/LICENSE new file mode 100644 index 0000000..7c1df53 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/claide-1.1.0/LICENSE @@ -0,0 +1,21 @@ +Copyright (c) 2011 - 2012 Eloy Durán +Copyright (c) 2012 Fabio Pelosin + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/claide-1.1.0/README.md b/ios/vendor/bundle/ruby/2.6.0/gems/claide-1.1.0/README.md new file mode 100644 index 0000000..f4ed63d --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/claide-1.1.0/README.md @@ -0,0 +1,115 @@ +# Hi, I’m Claide, your command-line tool aide. + +[![Build Status](https://img.shields.io/github/workflow/status/CocoaPods/claide/ci)](https://github.com/CocoaPods/claide/actions) +[![Gem Version](https://img.shields.io/gem/v/claide)](https://rubygems.org/gems/claide) + +I was born out of a need for a _simple_ option and command parser, while still +providing an API that allows you to quickly create a full featured command-line +interface. + +## Install + +``` +$ [sudo] gem install claide +``` + + +## Usage + +For full documentation, on the API of CLAide, visit [rubydoc.info][docs]. + + +### Argument handling + +At its core, a library, such as myself, needs to parse the parameters specified +by the user. + +Working with parameters is done through the `CLAide::ARGV` class. It takes an +array of parameters and parses them as either flags, options, or arguments. + +| Parameter | Description | +| :---: | :---: | +| `--milk`, `--no-milk` | A boolean ‘flag’, which may be negated. | +| `--sweetener=honey` | An ‘option’ consists of a key, a ‘=’, and a value. | +| `tea` | An ‘argument’ is just a value. | + + +Accessing flags, options, and arguments, with the following methods, will also +remove the parameter from the remaining unprocessed parameters. + +```ruby +argv = CLAide::ARGV.new(['tea', '--no-milk', '--sweetener=honey']) +argv.shift_argument # => 'tea' +argv.shift_argument # => nil +argv.flag?('milk') # => false +argv.flag?('milk') # => nil +argv.option('sweetener') # => 'honey' +argv.option('sweetener') # => nil +``` + + +In case the requested flag or option is not present, `nil` is returned. You can +specify a default value to be used as the optional second method parameter: + +```ruby +argv = CLAide::ARGV.new(['tea']) +argv.flag?('milk', true) # => true +argv.option('sweetener', 'sugar') # => 'sugar' +``` + + +Unlike flags and options, accessing all of the arguments can be done in either +a preserving or mutating way: + +```ruby +argv = CLAide::ARGV.new(['tea', 'coffee']) +argv.arguments # => ['tea', 'coffee'] +argv.arguments! # => ['tea', 'coffee'] +argv.arguments # => [] +``` + + +### Command handling + +Commands are actions that a tool can perform. Every command is represented by +its own command class. + +Commands may be nested, in which case they inherit from the ‘super command’ +class. Some of these nested commands may not actually perform any work +themselves, but are rather used as ‘super commands’ _only_, in which case they +are ‘abtract commands’. + +Running commands is typically done through the `CLAide::Command.run(argv)` +method, which performs the following three steps: + +1. Parses the given parameters, finds the command class matching the parameters, + and instantiates it with the remaining parameters. It’s each nested command + class’ responsibility to remove the parameters it handles from the remaining + parameters, _before_ calling the `super` implementation. + +2. Asks the command instance to validate its parameters, but only _after_ + calling the `super` implementation. The `super` implementation will show a + help banner in case the `--help` flag is specified, not all parameters were + removed from the parameter list, or the command is an abstract command. + +3. Calls the `run` method on the command instance, where it may do its work. + +4. Catches _any_ uncaught exception and shows it to user in a meaningful way. + * A `Help` exception triggers a help banner to be shown for the command. + * A exception that includes the `InformativeError` module will show _only_ + the message, unless disabled with the `--verbose` flag; and in red, + depending on the color configuration. + * Any other type of exception will be passed to `Command.report_error(error)` + for custom error reporting (such as the one in [CocoaPods][report-error]). + +In case you want to call commands from _inside_ other commands, you should use +the `CLAide::Command.parse(argv)` method to retrieve an instance of the command +and call `run` on it. Unless you are using user-supplied parameters, there +should not be a need to validate the parameters. + +See the [example][example] for a illustration of how to define commands. + + +[docs]: http://www.rubydoc.info/github/CocoaPods/CLAide/index +[example]: https://github.com/CocoaPods/CLAide/blob/master/examples/make.rb +[report-error]: https://github.com/CocoaPods/CocoaPods/blob/054fe5c861d932219ec40a91c0439a7cfc3a420c/lib/cocoapods/command.rb#L36 diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/claide-1.1.0/Rakefile b/ios/vendor/bundle/ruby/2.6.0/gems/claide-1.1.0/Rakefile new file mode 100644 index 0000000..dc22070 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/claide-1.1.0/Rakefile @@ -0,0 +1,57 @@ +# encoding: utf-8 + +#-- Bootstrap --------------------------------------------------------------# + +desc 'Initializes your working copy to run the specs' +task :bootstrap do + if system('which bundle') + title 'Installing gems' + sh 'bundle install' + else + $stderr.puts "\033[0;31m" \ + "[!] Please install the bundler gem manually:\n" \ + ' $ [sudo] gem install bundler' \ + "\e[0m" + exit 1 + end +end + +begin + require 'bundler/gem_tasks' + task :default => :spec + + #-- Specs ------------------------------------------------------------------# + + desc 'Run specs' + task :spec do + title 'Running Unit Tests' + files = FileList['spec/**/*_spec.rb'].shuffle.join(' ') + sh "bundle exec bacon #{files}" + + Rake::Task['rubocop'].invoke + end + + #-- Rubocop ----------------------------------------------------------------# + + desc 'Check code against RuboCop rules' + task :rubocop do + sh 'bundle exec rubocop' + end + +rescue LoadError + $stderr.puts "\033[0;31m" \ + '[!] Some Rake tasks haven been disabled because the environment' \ + ' couldn’t be loaded. Be sure to run `rake bootstrap` first.' \ + "\e[0m" +end + +#-- Helpers ------------------------------------------------------------------# + +def title(title) + cyan_title = "\033[0;36m#{title}\033[0m" + puts + puts '-' * 80 + puts cyan_title + puts '-' * 80 + puts +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/claide-1.1.0/claide.gemspec b/ios/vendor/bundle/ruby/2.6.0/gems/claide-1.1.0/claide.gemspec new file mode 100644 index 0000000..1f298d3 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/claide-1.1.0/claide.gemspec @@ -0,0 +1,23 @@ +# -*- encoding: utf-8 -*- +$:.unshift File.expand_path('../lib', __FILE__) +require File.expand_path('../lib/claide/gem_version', __FILE__) + +Gem::Specification.new do |s| + s.name = "claide" + s.version = CLAide::VERSION + s.license = "MIT" + s.email = ["eloy.de.enige@gmail.com", "fabiopelosin@gmail.com"] + s.homepage = "https://github.com/CocoaPods/CLAide" + s.authors = ["Eloy Duran", "Fabio Pelosin"] + + s.summary = "A small command-line interface framework." + + s.files = `git ls-files -z`.split("\0").reject { |f| f =~ /\A(spec|examples)/i } + + ## Make sure you can build the gem on older versions of RubyGems too: + s.rubygems_version = "1.6.2" + s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version= + s.specification_version = 3 if s.respond_to? :specification_version + + s.required_ruby_version = ">= 2.3.0" +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/claide-1.1.0/lib/claide.rb b/ios/vendor/bundle/ruby/2.6.0/gems/claide-1.1.0/lib/claide.rb new file mode 100644 index 0000000..25d2c75 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/claide-1.1.0/lib/claide.rb @@ -0,0 +1,13 @@ +# encoding: utf-8 + +# The mods of interest are {CLAide::ARGV}, {CLAide::Command}, and +# {CLAide::InformativeError} +# +module CLAide + require 'claide/ansi' + require 'claide/argument' + require 'claide/argv' + require 'claide/command' + require 'claide/help' + require 'claide/informative_error' +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/claide-1.1.0/lib/claide/ansi.rb b/ios/vendor/bundle/ruby/2.6.0/gems/claide-1.1.0/lib/claide/ansi.rb new file mode 100644 index 0000000..0839ed6 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/claide-1.1.0/lib/claide/ansi.rb @@ -0,0 +1,126 @@ +# encoding: utf-8 + +require 'claide/ansi/cursor' +require 'claide/ansi/graphics' + +module CLAide + # Provides support for ANSI Escape sequences + # + # For more information see: + # + # - http://ascii-table.com/ansi-escape-sequences.php + # - http://en.wikipedia.org/wiki/ANSI_escape_code + # + # This functionality has been inspired and derived from the following gems: + # + # - colored + # - colorize + # + class ANSI + extend Cursor + extend Graphics + + class << self + # @return [Bool] Wether the string mixin should be disabled to return the + # original string. This method is intended to offer a central location + # where to disable ANSI logic without needed to implement conditionals + # across the code base of clients. + # + # @example + # + # "example".ansi.yellow #=> "\e[33mexample\e[39m" + # ANSI.disabled = true + # "example".ansi.yellow #=> "example" + # + attr_accessor :disabled + end + + # @return [Hash{Symbol => Fixnum}] The text attributes codes by their + # English name. + # + TEXT_ATTRIBUTES = { + :bold => 1, + :underline => 4, + :blink => 5, + :reverse => 7, + :hidden => 8, + } + + # @return [Hash{Symbol => Fixnum}] The codes to disable a text attribute by + # their name. + # + TEXT_DISABLE_ATTRIBUTES = { + :bold => 21, + :underline => 24, + :blink => 25, + :reverse => 27, + :hidden => 28, + } + + # Return [String] The escape sequence to reset the graphics. + # + RESET_SEQUENCE = "\e[0m" + + # @return [Hash{Symbol => Fixnum}] The colors codes by their English name. + # + COLORS = { + :black => 0, + :red => 1, + :green => 2, + :yellow => 3, + :blue => 4, + :magenta => 5, + :cyan => 6, + :white => 7, + } + + # Return [String] The escape sequence for the default foreground color. + # + DEFAULT_FOREGROUND_COLOR = "\e[39m" + + # Return [String] The escape sequence for the default background color. + # + DEFAULT_BACKGROUND_COLOR = "\e[49m" + + # @return [Fixnum] The code of a key given the map. + # + # @param [Symbol] key + # The key for which the code is needed. + # + # @param [Hash{Symbol => Fixnum}] map + # A hash which associates each code to each key. + # + # @raise If the key is not provided. + # @raise If the key is not present in the map. + # + def self.code_for_key(key, map) + unless key + raise ArgumentError, 'A key must be provided' + end + code = map[key] + unless code + raise ArgumentError, "Unsupported key: `#{key}`" + end + code + end + end +end + +#-- String mixin -------------------------------------------------------------# + +require 'claide/ansi/string_escaper' + +class String + # @return [StringEscaper] An object which provides convenience methods to + # wrap the receiver in ANSI sequences. + # + # @example + # + # "example".ansi.yellow #=> "\e[33mexample\e[39m" + # "example".ansi.on_red #=> "\e[41mexample\e[49m" + # "example".ansi.bold #=> "\e[1mexample\e[21m" + # + def ansi + CLAide::ANSI::StringEscaper.new(self) + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/claide-1.1.0/lib/claide/ansi/cursor.rb b/ios/vendor/bundle/ruby/2.6.0/gems/claide-1.1.0/lib/claide/ansi/cursor.rb new file mode 100644 index 0000000..acfd5b6 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/claide-1.1.0/lib/claide/ansi/cursor.rb @@ -0,0 +1,69 @@ +# encoding: utf-8 + +module CLAide + class ANSI + # Provides support for generating escape sequences relative to the position + # of the cursor and to erase parts of text. + # + module Cursor + # @return [String] The escape sequence to set the cursor at the + # given line. + # + # @param [Fixnum] line + # The line where to place the cursor. + # + # @param [Fixnum] column + # The column where to place the cursor. + # + def self.set_cursor_position(line = 0, column = 0) + "\e[#{line};#{column}H" + end + + # @return [String] The escape sequence to set the cursor at the + # given line. + # + # @param [Fixnum] lines + # The amount of lines the cursor should be moved to. + # Negative values indicate up direction and positive ones + # down direction. + # + # @param [Fixnum] columns + # The amount of columns the cursor should be moved to. + # Negative values indicate left direction and positive ones + # right direction. + # + def self.move_cursor(lines, columns = 0) + lines_code = lines < 0 ? 'A' : 'B' + columns_code = columns > 0 ? 'C' : 'D' + "\e[#{lines.abs}#{lines_code};#{columns.abs}#{columns_code}" + end + + # @return [String] The escape sequence to save the cursor position. + # + def self.save_cursor_position + "\e[s" + end + + # @return [String] The escape sequence to restore the cursor to the + # previously saved position. This sequence also clears all the + # output after the position. + # + def self.restore_cursor_position + "\e[u" + end + + # @return [String] The escape sequence to erase the display. + # + def self.erase_display + "\e[2J" + end + + # @return [String] The escape sequence to erase a line form the + # cursor position to then end. + # + def self.erase_line + "\e[K" + end + end + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/claide-1.1.0/lib/claide/ansi/graphics.rb b/ios/vendor/bundle/ruby/2.6.0/gems/claide-1.1.0/lib/claide/ansi/graphics.rb new file mode 100644 index 0000000..e5c2d15 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/claide-1.1.0/lib/claide/ansi/graphics.rb @@ -0,0 +1,72 @@ +# encoding: utf-8 + +module CLAide + class ANSI + # Provides support for generating escape sequences relative to the graphic + # mode. + # + module Graphics + # @return [String] The escape sequence for a text attribute. + # + # @param [Symbol] key + # The name of the text attribute. + # + def self.text_attribute(key) + code = ANSI.code_for_key(key, TEXT_ATTRIBUTES) + graphics_mode(code) + end + + # @return [String] The escape sequence for a foreground color. + # + # @param [Symbol] key + # The name of the color. + # + def self.foreground_color(key) + code = ANSI.code_for_key(key, COLORS) + 30 + graphics_mode(code) + end + + # @return [String] The escape sequence for a background color. + # + # @param [Symbol] key + # The name of the color. + # + def self.background_color(key) + code = ANSI.code_for_key(key, COLORS) + 40 + graphics_mode(code) + end + + # @return [String] The escape sequence for a foreground color using the + # xterm-256 format. + # + # @param [Fixnum] color + # The value of the color. + # + def self.foreground_color_256(color) + code = [38, 5, color] + graphics_mode(code) + end + + # @return [String] The escape sequence for a background color using the + # xterm-256 format. + # + # @param [Fixnum] color + # The value of the color. + # + def self.background_color_256(color) + code = [48, 5, color] + graphics_mode(code) + end + + # @return [String] The escape sequence for a single or a list of codes. + # + # @param [Fixnum, Array] codes + # The code(s). + # + def self.graphics_mode(codes) + codes = Array(codes) + "\e[#{codes.join(';')}m" + end + end + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/claide-1.1.0/lib/claide/ansi/string_escaper.rb b/ios/vendor/bundle/ruby/2.6.0/gems/claide-1.1.0/lib/claide/ansi/string_escaper.rb new file mode 100644 index 0000000..b6f461c --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/claide-1.1.0/lib/claide/ansi/string_escaper.rb @@ -0,0 +1,79 @@ +module CLAide + class ANSI + # Provides support to wrap strings in ANSI sequences according to the + # `ANSI.disabled` setting. + # + class StringEscaper < String + # @param [String] string The string to wrap. + # + def initialize(string) + super + end + + # @return [StringEscaper] Wraps a string in the given ANSI sequences, + # taking care of handling existing sequences for the same + # family of attributes (i.e. attributes terminated by the + # same sequence). + # + def wrap_in_ansi_sequence(open, close) + if ANSI.disabled + self + else + gsub!(close, open) + insert(0, open).insert(-1, close) + end + end + + # @return [StringEscaper] + # + # @param [Array] keys + # One or more keys corresponding to ANSI codes to apply to the + # string. + # + def apply(*keys) + keys.flatten.each do |key| + send(key) + end + self + end + + ANSI::COLORS.each_key do |key| + # Defines a method returns a copy of the receiver wrapped in an ANSI + # sequence for each foreground color (e.g. #blue). + # + # The methods handle nesting of ANSI sequences. + # + define_method key do + open = Graphics.foreground_color(key) + close = ANSI::DEFAULT_FOREGROUND_COLOR + wrap_in_ansi_sequence(open, close) + end + + # Defines a method returns a copy of the receiver wrapped in an ANSI + # sequence for each background color (e.g. #on_blue). + # + # The methods handle nesting of ANSI sequences. + # + define_method "on_#{key}" do + open = Graphics.background_color(key) + close = ANSI::DEFAULT_BACKGROUND_COLOR + wrap_in_ansi_sequence(open, close) + end + end + + ANSI::TEXT_ATTRIBUTES.each_key do |key| + # Defines a method returns a copy of the receiver wrapped in an ANSI + # sequence for each text attribute (e.g. #bold). + # + # The methods handle nesting of ANSI sequences. + # + define_method key do + open = Graphics.text_attribute(key) + close_code = TEXT_DISABLE_ATTRIBUTES[key] + close = Graphics.graphics_mode(close_code) + wrap_in_ansi_sequence(open, close) + end + end + end + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/claide-1.1.0/lib/claide/argument.rb b/ios/vendor/bundle/ruby/2.6.0/gems/claide-1.1.0/lib/claide/argument.rb new file mode 100644 index 0000000..4d54f29 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/claide-1.1.0/lib/claide/argument.rb @@ -0,0 +1,62 @@ +# encoding: utf-8 + +module CLAide + # This class is used to represent individual arguments to present to + # the command help banner + # + class Argument + # The string used for ellipsis / repeatable arguments in the banner + # + ELLIPSIS = '...' + + # @return [Array] + # List of alternate names for the parameters + attr_reader :names + + # @return [Boolean] + # Indicates if the argument is required (not optional) + # + attr_accessor :required + alias_method :required?, :required + + # @return [Boolean] + # Indicates if the argument is repeatable (= can appear multiple + # times in the command, which is indicated by '...' in the banner) + # + attr_accessor :repeatable + alias_method :repeatable?, :repeatable + + # @param [String,Array] names + # List of the names of each parameter alternatives. + # For convenience, if there is only one alternative for that + # parameter, we can use a String instead of a 1-item Array + # + # @param [Boolean] required + # true if the parameter is required, false if it is optional + # + # @param [Boolean] repeatable + # If true, the argument can appear multiple times in the command. + # In that case, an ellipsis will be appended after the argument + # in the help banner. + # + # @example + # + # # A required parameter that can be either a NAME or URL + # Argument.new(%(NAME URL), true) + # + def initialize(names, required, repeatable = false) + @names = Array(names) + @required = required + @repeatable = repeatable + end + + # @return [Boolean] true on equality + # + # @param [Argument] other the Argument compared against + # + def ==(other) + other.is_a?(Argument) && + names == other.names && required == other.required + end + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/claide-1.1.0/lib/claide/argv.rb b/ios/vendor/bundle/ruby/2.6.0/gems/claide-1.1.0/lib/claide/argv.rb new file mode 100644 index 0000000..ecadfaf --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/claide-1.1.0/lib/claide/argv.rb @@ -0,0 +1,329 @@ +# encoding: utf-8 + +module CLAide + # This class is responsible for parsing the parameters specified by the user, + # accessing individual parameters, and keep state by removing handled + # parameters. + # + class ARGV + # @return [ARGV] Coerces an object to the ARGV class if needed. + # + # @param [Object] argv + # The object which should be converted to the ARGV class. + # + def self.coerce(argv) + if argv.is_a?(ARGV) + argv + else + ARGV.new(argv) + end + end + + # @param [Array<#to_s>] argv + # A list of parameters. + # + def initialize(argv) + @entries = Parser.parse(argv) + end + + # @return [Boolean] Whether or not there are any remaining unhandled + # parameters. + # + def empty? + @entries.empty? + end + + # @return [Array] A list of the remaining unhandled parameters, in + # the same format a user specifies it in. + # + # @example + # + # argv = CLAide::ARGV.new(['tea', '--no-milk', '--sweetener=honey']) + # argv.shift_argument # => 'tea' + # argv.remainder # => ['--no-milk', '--sweetener=honey'] + # + def remainder + @entries.map do |type, (key, value)| + case type + when :arg + key + when :flag + "--#{'no-' if value == false}#{key}" + when :option + "--#{key}=#{value}" + end + end + end + + # @return [Array] A list of the remaining unhandled parameters, in + # the same format the user specified them. + # + # @example + # + # argv = CLAide::ARGV.new(['tea', '--no-milk', '--sweetener=honey']) + # argv.shift_argument # => 'tea' + # argv.remainder! # => ['--no-milk', '--sweetener=honey'] + # argv.remainder # => [] + # + def remainder! + remainder.tap { @entries.clear } + end + + # @return [Hash] A hash that consists of the remaining flags and options + # and their values. + # + # @example + # + # argv = CLAide::ARGV.new(['tea', '--no-milk', '--sweetener=honey']) + # argv.options # => { 'milk' => false, 'sweetener' => 'honey' } + # + def options + options = {} + @entries.each do |type, (key, value)| + options[key] = value unless type == :arg + end + options + end + + # @return [Array] A list of the remaining arguments. + # + # @example + # + # argv = CLAide::ARGV.new(['tea', 'white', '--no-milk', 'biscuit']) + # argv.shift_argument # => 'tea' + # argv.arguments # => ['white', 'biscuit'] + # + def arguments + @entries.map { |type, value| value if type == :arg }.compact + end + + # @return [Array] A list of the remaining arguments. + # + # @note This version also removes the arguments from the remaining + # parameters. + # + # @example + # + # argv = CLAide::ARGV.new(['tea', 'white', '--no-milk', 'biscuit']) + # argv.arguments # => ['tea', 'white', 'biscuit'] + # argv.arguments! # => ['tea', 'white', 'biscuit'] + # argv.arguments # => [] + # + def arguments! + arguments = [] + while arg = shift_argument + arguments << arg + end + arguments + end + + # @return [String] The first argument in the remaining parameters. + # + # @note This will remove the argument from the remaining parameters. + # + # @example + # + # argv = CLAide::ARGV.new(['tea', 'white']) + # argv.shift_argument # => 'tea' + # argv.arguments # => ['white'] + # + def shift_argument + if index = @entries.find_index { |type, _| type == :arg } + entry = @entries[index] + @entries.delete_at(index) + entry.last + end + end + + # @return [Boolean, nil] Returns `true` if the flag by the specified `name` + # is among the remaining parameters and is not negated. + # + # @param [String] name + # The name of the flag to look for among the remaining parameters. + # + # @param [Boolean] default + # The value that is returned in case the flag is not among the + # remaining parameters. + # + # @note This will remove the flag from the remaining parameters. + # + # @example + # + # argv = CLAide::ARGV.new(['tea', '--no-milk', '--sweetener=honey']) + # argv.flag?('milk') # => false + # argv.flag?('milk') # => nil + # argv.flag?('milk', true) # => true + # argv.remainder # => ['tea', '--sweetener=honey'] + # + def flag?(name, default = nil) + delete_entry(:flag, name, default, true) + end + + # @return [String, nil] Returns the value of the option by the specified + # `name` is among the remaining parameters. + # + # @param [String] name + # The name of the option to look for among the remaining + # parameters. + # + # @param [String] default + # The value that is returned in case the option is not among the + # remaining parameters. + # + # @note This will remove the option from the remaining parameters. + # + # @example + # + # argv = CLAide::ARGV.new(['tea', '--no-milk', '--sweetener=honey']) + # argv.option('sweetener') # => 'honey' + # argv.option('sweetener') # => nil + # argv.option('sweetener', 'sugar') # => 'sugar' + # argv.remainder # => ['tea', '--no-milk'] + # + def option(name, default = nil) + delete_entry(:option, name, default) + end + + # @return [Array] Returns an array of all the values of the option + # with the specified `name` among the remaining + # parameters. + # + # @param [String] name + # The name of the option to look for among the remaining + # parameters. + # + # @note This will remove the option from the remaining parameters. + # + # @example + # + # argv = CLAide::ARGV.new(['--ignore=foo', '--ignore=bar']) + # argv.all_options('include') # => [] + # argv.all_options('ignore') # => ['bar', 'foo'] + # argv.remainder # => [] + # + def all_options(name) + options = [] + while entry = option(name) + options << entry + end + options + end + + private + + # @return [Array>] A list of tuples for each + # non consumed parameter, where the first entry is the `type` and + # the second entry the actual parsed parameter. + # + attr_reader :entries + + # @return [Bool, String, Nil] Removes an entry from the entries list and + # returns its value or the default value if the entry was not + # present. + # + # @param [Symbol] requested_type + # The type of the entry. + # + # @param [String] requested_key + # The key of the entry. + # + # @param [Bool, String, Nil] default + # The value which should be returned if the entry is not present. + # + # @param [Bool] delete_all + # Whether all values matching `requested_type` and `requested_key` + # should be deleted. + # + def delete_entry(requested_type, requested_key, default, delete_all = false) + pred = proc do |type, (key, _value)| + requested_key == key && requested_type == type + end + entry = entries.reverse_each.find(&pred) + delete_all ? entries.delete_if(&pred) : entries.delete(entry) + + entry.nil? ? default : entry.last.last + end + + module Parser + # @return [Array>] A list of tuples for each + # parameter, where the first entry is the `type` and the second + # entry the actual parsed parameter. + # + # @example + # + # list = parse(['tea', '--no-milk', '--sweetener=honey']) + # list # => [[:arg, "tea"], + # [:flag, ["milk", false]], + # [:option, ["sweetener", "honey"]]] + # + def self.parse(argv) + entries = [] + copy = argv.map(&:to_s) + double_dash = false + while argument = copy.shift + next if !double_dash && double_dash = (argument == '--') + type = double_dash ? :arg : argument_type(argument) + parsed_argument = parse_argument(type, argument) + entries << [type, parsed_argument] + end + entries + end + + # @return [Symbol] Returns the type of an argument. The types can be + # either: `:arg`, `:flag`, `:option`. + # + # @param [String] argument + # The argument to check. + # + def self.argument_type(argument) + if argument.start_with?('--') + if argument.include?('=') + :option + else + :flag + end + else + :arg + end + end + + # @return [String, Array] Returns the argument itself for + # normal arguments (like commands) and a tuple with the key and + # the value for options and flags. + # + # @param [Symbol] type + # The type of the argument. + # + # @param [String] argument + # The argument to check. + # + def self.parse_argument(type, argument) + case type + when :arg + return argument + when :flag + return parse_flag(argument) + when :option + return argument[2..-1].split('=', 2) + end + end + + # @return [String, Array] Returns the parameter + # describing a flag arguments. + # + # @param [String] argument + # The flag argument to check. + # + def self.parse_flag(argument) + if argument.start_with?('--no-') + key = argument[5..-1] + value = false + else + key = argument[2..-1] + value = true + end + [key, value] + end + end + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/claide-1.1.0/lib/claide/command.rb b/ios/vendor/bundle/ruby/2.6.0/gems/claide-1.1.0/lib/claide/command.rb new file mode 100644 index 0000000..6414b5c --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/claide-1.1.0/lib/claide/command.rb @@ -0,0 +1,669 @@ +# encoding: utf-8 + +require 'claide/command/banner' +require 'claide/command/plugin_manager' +require 'claide/command/argument_suggester' + +module CLAide + # This class is used to build a command-line interface + # + # Each command is represented by a subclass of this class, which may be + # nested to create more granular commands. + # + # Following is an overview of the types of commands and what they should do. + # + # ### Any command type + # + # * Inherit from the command class under which the command should be nested. + # * Set {Command.summary} to a brief description of the command. + # * Override {Command.options} to return the options it handles and their + # descriptions and prepending them to the results of calling `super`. + # * Override {Command#initialize} if it handles any parameters. + # * Override {Command#validate!} to check if the required parameters the + # command handles are valid, or call {Command#help!} in case they’re not. + # + # ### Abstract command + # + # The following is needed for an abstract command: + # + # * Set {Command.abstract_command} to `true`. + # * Subclass the command. + # + # When the optional {Command.description} is specified, it will be shown at + # the top of the command’s help banner. + # + # ### Normal command + # + # The following is needed for a normal command: + # + # * Set {Command.arguments} to the description of the arguments this command + # handles. + # * Override {Command#run} to perform the actual work. + # + # When the optional {Command.description} is specified, it will be shown + # underneath the usage section of the command’s help banner. Otherwise this + # defaults to {Command.summary}. + # + class Command + class << self + # @return [Boolean] Indicates whether or not this command can actually + # perform work of itself, or that it only contains subcommands. + # + attr_accessor :abstract_command + alias_method :abstract_command?, :abstract_command + + # @return [Boolean] Indicates whether or not this command is used during + # command parsing and whether or not it should be shown in the + # help banner or to show its subcommands instead. + # + # Setting this to `true` implies it’s an abstract command. + # + attr_reader :ignore_in_command_lookup + alias_method :ignore_in_command_lookup?, :ignore_in_command_lookup + def ignore_in_command_lookup=(flag) + @ignore_in_command_lookup = self.abstract_command = flag + end + + # @return [String] The subcommand which an abstract command should invoke + # by default. + # + attr_accessor :default_subcommand + + # @return [String] A brief description of the command, which is shown + # next to the command in the help banner of a parent command. + # + attr_accessor :summary + + # @return [String] A longer description of the command, which is shown + # underneath the usage section of the command’s help banner. Any + # indentation in this value will be ignored. + # + attr_accessor :description + + # @return [Array] The prefixes used to search for CLAide plugins. + # Plugins are loaded via their `_plugin.rb` file. + # Defaults to search for `claide` plugins. + # + def plugin_prefixes + @plugin_prefixes ||= ['claide'] + end + attr_writer :plugin_prefixes + + # @return [Array] + # A list of arguments the command handles. This is shown + # in the usage section of the command’s help banner. + # Each Argument in the array represents an argument by its name + # (or list of alternatives) and whether it's required or optional + # + def arguments + @arguments ||= [] + end + + # @param [Array] arguments + # An array listing the command arguments. + # Each Argument object describe the argument by its name + # (or list of alternatives) and whether it's required or optional + # + # @todo Remove deprecation + # + def arguments=(arguments) + if arguments.is_a?(Array) + if arguments.empty? || arguments[0].is_a?(Argument) + @arguments = arguments + else + self.arguments_array = arguments + end + else + self.arguments_string = arguments + end + end + + # @return [Boolean] The default value for {Command#ansi_output}. This + # defaults to `true` if `STDOUT` is connected to a TTY and + # `String` has the instance methods `#red`, `#green`, and + # `#yellow` (which are defined by, for instance, the + # [colored](https://github.com/defunkt/colored) gem). + # + def ansi_output + if @ansi_output.nil? + @ansi_output = STDOUT.tty? + end + @ansi_output + end + attr_writer :ansi_output + alias_method :ansi_output?, :ansi_output + + # @return [String] The name of the command. Defaults to a snake-cased + # version of the class’ name. + # + def command + @command ||= name.split('::').last.gsub(/[A-Z]+[a-z]*/) do |part| + part.downcase << '-' + end[0..-2] + end + attr_writer :command + + # @return [String] The version of the command. This value will be printed + # by the `--version` flag if used for the root command. + # + attr_accessor :version + end + + #-------------------------------------------------------------------------# + + # @return [String] The full command up-to this command, as it would be + # looked up during parsing. + # + # @note (see #ignore_in_command_lookup) + # + # @example + # + # BevarageMaker::Tea.full_command # => "beverage-maker tea" + # + def self.full_command + if superclass == Command + ignore_in_command_lookup? ? '' : command + else + if ignore_in_command_lookup? + superclass.full_command + else + "#{superclass.full_command} #{command}" + end + end + end + + # @return [Bool] Whether this is the root command class + # + def self.root_command? + superclass == CLAide::Command + end + + # @return [Array] A list of all command classes that are nested + # under this command. + # + def self.subcommands + @subcommands ||= [] + end + + # @return [Array] A list of command classes that are nested under + # this command _or_ the subcommands of those command classes in + # case the command class should be ignored in command lookup. + # + def self.subcommands_for_command_lookup + subcommands.map do |subcommand| + if subcommand.ignore_in_command_lookup? + subcommand.subcommands_for_command_lookup + else + subcommand + end + end.flatten + end + + # Searches the list of subcommands that should not be ignored for command + # lookup for a subcommand with the given `name`. + # + # @param [String] name + # The name of the subcommand to be found. + # + # @return [CLAide::Command, nil] The subcommand, if found. + # + def self.find_subcommand(name) + subcommands_for_command_lookup.find { |sc| sc.command == name } + end + + # @visibility private + # + # Automatically registers a subclass as a subcommand. + # + def self.inherited(subcommand) + subcommands << subcommand + end + + DEFAULT_ROOT_OPTIONS = [ + ['--version', 'Show the version of the tool'], + ] + + DEFAULT_OPTIONS = [ + ['--verbose', 'Show more debugging information'], + ['--no-ansi', 'Show output without ANSI codes'], + ['--help', 'Show help banner of specified command'], + ] + + # Should be overridden by a subclass if it handles any options. + # + # The subclass has to combine the result of calling `super` and its own + # list of options. The recommended way of doing this is by concatenating + # to this classes’ own options. + # + # @return [Array] + # + # A list of option name and description tuples. + # + # @example + # + # def self.options + # [ + # ['--verbose', 'Print more info'], + # ['--help', 'Print help banner'], + # ].concat(super) + # end + # + def self.options + if root_command? + DEFAULT_ROOT_OPTIONS + DEFAULT_OPTIONS + else + DEFAULT_OPTIONS + end + end + + # Adds a new option for the current command. + # + # This method can be used in conjunction with overriding `options`. + # + # @return [void] + # + # @example + # + # option '--help', 'Print help banner ' + # + def self.option(name, description) + mod = Module.new do + define_method(:options) do + [ + [name, description], + ].concat(super()) + end + end + extend(mod) + end + private_class_method :option + + # Handles root commands options if appropriate. + # + # @param [ARGV] argv + # The parameters of the command. + # + # @return [Bool] Whether any root command option was handled. + # + def handle_root_options(argv) + return false unless self.class.root_command? + if argv.flag?('version') + print_version + return true + end + false + end + + # Prints the version of the command optionally including plugins. + # + def print_version + puts self.class.version + if verbose? + PluginManager.specifications.each do |spec| + puts "#{spec.name}: #{spec.version}" + end + end + end + + # Instantiates the command class matching the parameters through + # {Command.parse}, validates it through {Command#validate!}, and runs it + # through {Command#run}. + # + # @note The ANSI support is configured before running a command to allow + # the same process to run multiple commands with different + # settings. For example a process with ANSI output enabled might + # want to programmatically invoke another command with the output + # enabled. + # + # @param [Array, ARGV] argv + # A list of parameters. For instance, the standard `ARGV` constant, + # which contains the parameters passed to the program. + # + # @return [void] + # + def self.run(argv = []) + plugin_prefixes.each do |plugin_prefix| + PluginManager.load_plugins(plugin_prefix) + end + + argv = ARGV.coerce(argv) + command = parse(argv) + ANSI.disabled = !command.ansi_output? + unless command.handle_root_options(argv) + command.validate! + command.run + end + rescue Object => exception + handle_exception(command, exception) + end + + # @param [Array, ARGV] argv + # A list of (remaining) parameters. + # + # @return [Command] An instance of the command class that was matched by + # going through the arguments in the parameters and drilling down + # command classes. + # + def self.parse(argv) + argv = ARGV.coerce(argv) + cmd = argv.arguments.first + if cmd && subcommand = find_subcommand(cmd) + argv.shift_argument + subcommand.parse(argv) + elsif abstract_command? && default_subcommand + load_default_subcommand(argv) + else + new(argv) + end + end + + # @param [Array, ARGV] argv + # A list of (remaining) parameters. + # + # @return [Command] Returns the default subcommand initialized with the + # given arguments. + # + def self.load_default_subcommand(argv) + unless subcommand = find_subcommand(default_subcommand) + raise 'Unable to find the default subcommand ' \ + "`#{default_subcommand}` for command `#{self}`." + end + result = subcommand.parse(argv) + result.invoked_as_default = true + result + end + + # Presents an exception to the user in a short manner in case of an + # `InformativeError` or in long form in other cases, + # + # @param [Command, nil] command + # The command from where the exception originated. + # + # @param [Object] exception + # The exception to present. + # + # @return [void] + # + def self.handle_exception(command, exception) + if exception.is_a?(InformativeError) + puts exception.message + if command.nil? || command.verbose? + puts + puts(*exception.backtrace) + end + exit exception.exit_status + else + report_error(exception) + end + end + + # Allows the application to perform custom error reporting, by overriding + # this method. + # + # @param [Exception] exception + # + # An exception that occurred while running a command through + # {Command.run}. + # + # @raise + # + # By default re-raises the specified exception. + # + # @return [void] + # + def self.report_error(exception) + plugins = PluginManager.plugins_involved_in_exception(exception) + unless plugins.empty? + puts '[!] The exception involves the following plugins:' \ + "\n - #{plugins.join("\n - ")}\n".ansi.yellow + end + raise exception + end + + # @visibility private + # + # @param [String] error_message + # The error message to show to the user. + # + # @param [Class] help_class + # The class to use to raise a ‘help’ error. + # + # @raise [Help] + # + # Signals CLAide that a help banner for this command should be shown, + # with an optional error message. + # + # @return [void] + # + def self.help!(error_message = nil, help_class = Help) + raise help_class.new(banner, error_message) + end + + # @visibility private + # + # Returns the banner for the command. + # + # @param [Class] banner_class + # The class to use to format help banners. + # + # @return [String] The banner for the command. + # + def self.banner(banner_class = Banner) + banner_class.new(self).formatted_banner + end + + # @visibility private + # + # Print banner and exit + # + # @note Calling this method exits the current process. + # + # @return [void] + # + def self.banner! + puts banner + exit 0 + end + + #-------------------------------------------------------------------------# + + # Set to `true` if the user specifies the `--verbose` option. + # + # @note + # + # If you want to make use of this value for your own configuration, you + # should check the value _after_ calling the `super` {Command#initialize} + # implementation. + # + # @return [Boolean] + # + # Wether or not backtraces should be included when presenting the user an + # exception that includes the {InformativeError} module. + # + attr_accessor :verbose + alias_method :verbose?, :verbose + + # Set to `true` if {Command.ansi_output} returns `true` and the user + # did **not** specify the `--no-ansi` option. + # + # @note (see #verbose) + # + # @return [Boolean] + # + # Whether or not to use ANSI codes to prettify output. For instance, by + # default {InformativeError} exception messages will be colored red and + # subcommands in help banners green. + # + attr_accessor :ansi_output + alias_method :ansi_output?, :ansi_output + + # Set to `true` if initialized with a `--help` flag + # + # @return [Boolean] + # + # Whether the command was initialized with argv containing --help + # + attr_accessor :help_arg + alias_method :help?, :help_arg + + # Subclasses should override this method to remove the arguments/options + # they support from `argv` _before_ calling `super`. + # + # The `super` implementation sets the {#verbose} attribute based on whether + # or not the `--verbose` option is specified; and the {#ansi_output} + # attribute to `false` if {Command.ansi_output} returns `true`, but the + # user specified the `--no-ansi` option. + # + # @param [ARGV, Array] argv + # + # A list of (user-supplied) params that should be handled. + # + def initialize(argv) + argv = ARGV.coerce(argv) + @verbose = argv.flag?('verbose') + @ansi_output = argv.flag?('ansi', Command.ansi_output?) + @argv = argv + @help_arg = argv.flag?('help') + end + + # Convenience method. + # Instantiate the command and run it with the provided arguments at once. + # + # @note This method validate! the command before running it, but contrary to + # CLAide::Command::run, it does not load plugins nor exit on failure. + # It is up to the caller to rescue any possible exception raised. + # + # @param [String..., Array] args + # The arguments to initialize the command with + # + # @raise [Help] If validate! fails + # + def self.invoke(*args) + command = new(ARGV.new(args.flatten)) + command.validate! + command.run + end + + # @return [Bool] Whether the command was invoked by an abstract command by + # default. + # + attr_accessor :invoked_as_default + alias_method :invoked_as_default?, :invoked_as_default + + # Raises a Help exception if the `--help` option is specified, if `argv` + # still contains remaining arguments/options by the time it reaches this + # implementation, or when called on an ‘abstract command’. + # + # Subclasses should call `super` _before_ doing their own validation. This + # way when the user specifies the `--help` flag a help banner is shown, + # instead of possible actual validation errors. + # + # @raise [Help] + # + # @return [void] + # + def validate! + banner! if help? + unless @argv.empty? + argument = @argv.remainder.first + help! ArgumentSuggester.new(argument, self.class).suggestion + end + help! if self.class.abstract_command? + end + + # This method should be overridden by the command class to perform its + # work. + # + # @return [void] + # + def run + raise 'A subclass should override the `CLAide::Command#run` method to ' \ + 'actually perform some work.' + end + + protected + + # Returns the class of the invoked command + # + # @return [Command] + # + def invoked_command_class + if invoked_as_default? + self.class.superclass + else + self.class + end + end + + # @param [String] error_message + # A custom optional error message + # + # @raise [Help] + # + # Signals CLAide that a help banner for this command should be shown, + # with an optional error message. + # + # @return [void] + # + def help!(error_message = nil) + invoked_command_class.help!(error_message) + end + + # Print banner and exit + # + # @note Calling this method exits the current process. + # + # @return [void] + # + def banner! + invoked_command_class.banner! + end + + #-------------------------------------------------------------------------# + + # Handle deprecated form of self.arguments as an + # Array> like in: + # + # self.arguments = [ ['NAME', :required], ['QUERY', :optional] ] + # + # @todo Remove deprecated format support + # + def self.arguments_array=(arguments) + warn '[!] The signature of CLAide#arguments has changed. ' \ + "Use CLAide::Argument (#{self}: `#{arguments}`)".ansi.yellow + @arguments = arguments.map do |(name_str, type)| + names = name_str.split('|') + required = (type == :required) + Argument.new(names, required) + end + end + + # Handle deprecated form of self.arguments as a String, like in: + # + # self.arguments = 'NAME [QUERY]' + # + # @todo Remove deprecated format support + # + def self.arguments_string=(arguments) + warn '[!] The specification of arguments as a string has been' \ + " deprecated #{self}: `#{arguments}`".ansi.yellow + @arguments = arguments.split(' ').map do |argument| + if argument.start_with?('[') + Argument.new(argument.sub(/\[(.*)\]/, '\1').split('|'), false) + else + Argument.new(argument.split('|'), true) + end + end + end + + # Handle depracted form of assigning a plugin prefix. + # + # @todo Remove deprecated form. + # + def self.plugin_prefix=(prefix) + warn '[!] The specification of a singular plugin prefix has been ' \ + "deprecated. Use `#{self}::plugin_prefixes` instead." + plugin_prefixes << prefix + end + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/claide-1.1.0/lib/claide/command/argument_suggester.rb b/ios/vendor/bundle/ruby/2.6.0/gems/claide-1.1.0/lib/claide/command/argument_suggester.rb new file mode 100644 index 0000000..a13575c --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/claide-1.1.0/lib/claide/command/argument_suggester.rb @@ -0,0 +1,99 @@ +# encoding: utf-8 + +module CLAide + class Command + class ArgumentSuggester + # @param [String] argument + # The unrecognized argument for which to make a suggestion. + # + # @param [Class] command_class + # The class of the command which encountered the unrecognized + # arguments. + # + def initialize(argument, command_class) + @argument, @command_class = argument, command_class + @argument_type = ARGV::Parser.argument_type(@argument) + end + + # @return [Array] The list of the valid arguments for a command + # according to the type of the argument. + # + def possibilities + case @argument_type + when :option, :flag + @command_class.options.map(&:first) + when :arg + @command_class.subcommands_for_command_lookup.map(&:command) + end + end + + # @return [String] Returns a suggested argument from `possibilities` based + # on the `levenshtein_distance` score. + # + def suggested_argument + possibilities.sort_by do |element| + self.class.levenshtein_distance(@argument, element) + end.first + end + + # @return [String] Returns a message including a suggestion for the given + # suggestion. + # + def suggestion + argument_description = @argument_type == :arg ? 'command' : 'option' + if suggestion = suggested_argument + pretty_suggestion = self.class.prettify_suggestion(suggestion, + @argument_type) + "Unknown #{argument_description}: `#{@argument}`\n" \ + "Did you mean: #{pretty_suggestion}?" + else + "Unknown #{argument_description}: `#{@argument}`" + end + end + + # Prettifies the given validation suggestion according to the type. + # + # @param [String] suggestion + # The suggestion to prettify. + # + # @param [Type] argument_type + # The type of the suggestion: either `:command` or `:option`. + # + # @return [String] A handsome suggestion. + # + def self.prettify_suggestion(suggestion, argument_type) + case argument_type + when :option, :flag + suggestion = suggestion.to_s + suggestion.ansi.blue + when :arg + suggestion.ansi.green + end + end + + # Returns the Levenshtein distance between the given strings. + # From: http://rosettacode.org/wiki/Levenshtein_distance#Ruby + # + # @param [String] a + # The first string to compare. + # + # @param [String] b + # The second string to compare. + # + # @return [Fixnum] The distance between the strings. + def self.levenshtein_distance(a, b) + a, b = a.downcase, b.downcase + costs = Array(0..b.length) + (1..a.length).each do |i| + costs[0], nw = i, i - 1 + (1..b.length).each do |j| + costs[j], nw = [ + costs[j] + 1, costs[j - 1] + 1, a[i - 1] == b[j - 1] ? nw : nw + 1 + ].min, costs[j] + end + end + costs[b.length] + end + end + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/claide-1.1.0/lib/claide/command/banner.rb b/ios/vendor/bundle/ruby/2.6.0/gems/claide-1.1.0/lib/claide/command/banner.rb new file mode 100644 index 0000000..d87c699 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/claide-1.1.0/lib/claide/command/banner.rb @@ -0,0 +1,307 @@ +# encoding: utf-8 + +module CLAide + class Command + # Creates the formatted banner to present as help of the provided command + # class. + # + class Banner + # @return [Class] The command for which the banner should be created. + # + attr_accessor :command + + # @param [Class] command @see command + # + def initialize(command) + @command = command + end + + # @return [String] The banner for the command. + # + def formatted_banner + sections = [ + ['Usage', formatted_usage_description], + ['Commands', formatted_subcommand_summaries], + ['Options', formatted_options_description], + ] + banner = sections.map do |(title, body)| + [prettify_title("#{title}:"), body] unless body.empty? + end.compact.join("\n\n") + banner + end + + private + + # @!group Banner sections + #-----------------------------------------------------------------------# + + # @return [String] The indentation of the text. + # + TEXT_INDENT = 6 + + # @return [Fixnum] The maximum width of the text. + # + MAX_WIDTH = TEXT_INDENT + 80 + + # @return [Fixnum] The minimum between a name and its description. + # + DESCRIPTION_SPACES = 3 + + # @return [Fixnum] The minimum between a name and its description. + # + SUBCOMMAND_BULLET_SIZE = 2 + + # @return [String] The section describing the usage of the command. + # + def formatted_usage_description + message = command.description || command.summary || '' + message = TextWrapper.wrap_formatted_text(message, + TEXT_INDENT, + MAX_WIDTH) + message = prettify_message(command, message) + "#{signature}\n\n#{message}" + end + + # @return [String] The signature of the command. + # + def signature + full_command = command.full_command + sub_command = signature_sub_command + arguments = signature_arguments + result = prettify_signature(full_command, sub_command, arguments) + result.insert(0, '$ ') + result.insert(0, ' ' * (TEXT_INDENT - '$ '.size)) + end + + # @return [String] The subcommand indicator of the signature. + # + def signature_sub_command + return '[COMMAND]' if command.default_subcommand + return 'COMMAND' if command.subcommands.any? + end + + # @return [String] The arguments of the signature. + # + def signature_arguments + command.arguments.map do |arg| + names = arg.names.join('|') + names.concat(' ' + Argument::ELLIPSIS) if arg.repeatable? + arg.required? ? names : "[#{names}]" + end.join(' ') + end + + # @return [String] The section describing the subcommands of the command. + # + # @note The plus sign emphasizes the that the subcommands are added to + # the command. The square brackets conveys a sense of direction + # and indicates the gravitational force towards the default + # command. + # + def formatted_subcommand_summaries + subcommands = subcommands_for_banner + subcommands.map do |subcommand| + name = subcommand.command + bullet = (name == command.default_subcommand) ? '>' : '+' + name = "#{bullet} #{name}" + pretty_name = prettify_subcommand(name) + entry_description(pretty_name, subcommand.summary, name.size) + end.join("\n") + end + + # @return [String] The section describing the options of the command. + # + def formatted_options_description + options = command.options + options.map do |name, description| + pretty_name = prettify_option_name(name) + entry_description(pretty_name, description, name.size) + end.join("\n") + end + + # @return [String] The line describing a single entry (subcommand or + # option). + # + def entry_description(name, description, name_width) + max_name_width = compute_max_name_width + desc_start = max_name_width + (TEXT_INDENT - 2) + DESCRIPTION_SPACES + result = ' ' * (TEXT_INDENT - 2) + result << name + result << ' ' * DESCRIPTION_SPACES + result << ' ' * (max_name_width - name_width) + result << TextWrapper.wrap_with_indent(description, + desc_start, + MAX_WIDTH) + end + + # @!group Overrides + #-----------------------------------------------------------------------# + + # @return [String] A decorated title. + # + def prettify_title(title) + title.ansi.underline + end + + # @return [String] A decorated textual representation of the subcommand + # name. + # + def prettify_subcommand(name) + name.chomp.ansi.green + end + + # @return [String] A decorated textual representation of the option name. + # + # + def prettify_option_name(name) + name.chomp.ansi.blue + end + + # @return [String] A decorated textual representation of the command. + # + def prettify_signature(command, subcommand, argument) + components = [ + [command, :green], + [subcommand, :green], + [argument, :magenta], + ] + components.reduce('') do |memo, (string, ansi_key)| + next memo if !string || string.empty? + memo << ' ' << string.ansi.apply(ansi_key) + end.lstrip + end + + # @return [String] A decorated command description. + # + def prettify_message(command, message) + message = message.dup + command.arguments.each do |arg| + arg.names.each do |name| + message.gsub!("`#{name.gsub(/\.{3}$/, '')}`", '\0'.ansi.magenta) + end + end + command.options.each do |(name, _description)| + message.gsub!("`#{name}`", '\0'.ansi.blue) + end + message + end + + # @!group Private helpers + #-----------------------------------------------------------------------# + + # @return [Array] The list of the subcommands to use in the + # banner. + # + def subcommands_for_banner + command.subcommands_for_command_lookup.reject do |subcommand| + subcommand.summary.nil? + end.sort_by(&:command) + end + + # @return [Fixnum] The width of the largest command name or of the + # largest option name. Used to align all the descriptions. + # + def compute_max_name_width + widths = [] + widths << command.options.map { |option| option.first.size } + widths << subcommands_for_banner.map do |cmd| + cmd.command.size + SUBCOMMAND_BULLET_SIZE + end.max + widths.flatten.compact.max || 1 + end + + module TextWrapper + # @return [String] Wraps a formatted string (e.g. markdown) by stripping + # heredoc indentation and wrapping by word to the terminal width + # taking into account a maximum one, and indenting the string. + # Code lines (i.e. indented by four spaces) are not wrapped. + # + # @param [String] string + # The string to format. + # + # @param [Fixnum] indent + # The number of spaces to insert before the string. + # + # @param [Fixnum] max_width + # The maximum width to use to format the string if the terminal + # is too wide. + # + def self.wrap_formatted_text(string, indent = 0, max_width = 80) + paragraphs = strip_heredoc(string).split("\n\n") + paragraphs = paragraphs.map do |paragraph| + if paragraph.start_with?(' ' * 4) + paragraph.gsub!(/\n/, "\n#{' ' * indent}") + else + paragraph = wrap_with_indent(paragraph, indent, max_width) + end + paragraph.insert(0, ' ' * indent).rstrip + end + paragraphs.join("\n\n") + end + + # @return [String] Wraps a string to the terminal width taking into + # account the given indentation. + # + # @param [String] string + # The string to indent. + # + # @param [Fixnum] indent + # The number of spaces to insert before the string. + # + # @param [Fixnum] max_width + # The maximum width to use to format the string if the terminal + # is too wide. + # + def self.wrap_with_indent(string, indent = 0, max_width = 80) + if terminal_width == 0 + width = max_width + else + width = [terminal_width, max_width].min + end + + full_line = string.gsub("\n", ' ') + available_width = width - indent + space = ' ' * indent + word_wrap(full_line, available_width).split("\n").join("\n#{space}") + end + + # @return [String] Lifted straight from ActionView. Thanks guys! + # + def self.word_wrap(line, line_width) + line.gsub(/(.{1,#{line_width}})(\s+|$)/, "\\1\n").strip + end + + # @return [String] Lifted straight from ActiveSupport. Thanks guys! + # + def self.strip_heredoc(string) + if min = string.scan(/^[ \t]*(?=\S)/).min + string.gsub(/^[ \t]{#{min.size}}/, '') + else + string + end + end + + # @!group Private helpers + #---------------------------------------------------------------------# + + # @return [Fixnum] The width of the current terminal unless being piped. + # + def self.terminal_width + @terminal_width ||= + (!ENV['CLAIDE_DISABLE_AUTO_WRAP'] && + STDOUT.tty? && + calculate_terminal_width) || 0 + end + + def self.calculate_terminal_width + require 'io/console' + STDOUT.winsize.last + rescue LoadError + (system('which tput > /dev/null 2>&1') && `tput cols`.to_i) || 0 + rescue + 0 + end + private_class_method :calculate_terminal_width + end + end + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/claide-1.1.0/lib/claide/command/plugin_manager.rb b/ios/vendor/bundle/ruby/2.6.0/gems/claide-1.1.0/lib/claide/command/plugin_manager.rb new file mode 100644 index 0000000..184a5ea --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/claide-1.1.0/lib/claide/command/plugin_manager.rb @@ -0,0 +1,124 @@ +# encoding: utf-8 + +module CLAide + class Command + # Handles plugin related logic logic for the `Command` class. + # + # Plugins are loaded the first time a command run and are identified by the + # prefix specified in the command class. Plugins must adopt the following + # conventions: + # + # - Support being loaded by a file located under the + # `lib/#{plugin_prefix}_plugin` relative path. + # - Be stored in a folder named after the plugin. + # + class PluginManager + # @return [Hash] The loaded plugins, + # grouped by plugin prefix. + # + def self.loaded_plugins + @loaded_plugins ||= {} + end + + # @return [Array] Loads plugins via RubyGems looking + # for files named after the `PLUGIN_PREFIX_plugin` and returns the + # specifications of the gems loaded successfully. + # Plugins are required safely. + # + def self.load_plugins(plugin_prefix) + loaded_plugins[plugin_prefix] ||= + plugin_gems_for_prefix(plugin_prefix).map do |spec, paths| + spec if safe_require(paths) + end.compact + end + + # @return [Array] The RubyGems specifications for the + # loaded plugins. + # + def self.specifications + loaded_plugins.values.flatten.uniq + end + + # @return [Array] The RubyGems specifications for the + # installed plugins that match the given `plugin_prefix`. + # + def self.installed_specifications_for_prefix(plugin_prefix) + loaded_plugins[plugin_prefix] || + plugin_gems_for_prefix(plugin_prefix).map(&:first) + end + + # @return [Array] The list of the plugins whose root path appears + # in the backtrace of an exception. + # + # @param [Exception] exception + # The exception to analyze. + # + def self.plugins_involved_in_exception(exception) + specifications.select do |gemspec| + exception.backtrace.any? do |line| + full_require_paths_for(gemspec).any? do |plugin_path| + line.include?(plugin_path) + end + end + end.map(&:name) + end + + # @group Helper Methods + + # @return [Array<[Gem::Specification, Array]>] + # Returns an array of tuples containing the specifications and + # plugin files to require for a given plugin prefix. + # + def self.plugin_gems_for_prefix(prefix) + glob = "#{prefix}_plugin#{Gem.suffix_pattern}" + Gem::Specification.latest_specs(true).map do |spec| + matches = spec.matches_for_glob(glob) + [spec, matches] unless matches.empty? + end.compact + end + + # Requires the given paths. + # If any exception occurs it is caught and an + # informative message is printed. + # + # @param [String] paths + # The paths to require. + # + # @return [Bool] Whether requiring succeeded. + # + def self.safe_require(paths) + paths.each do |path| + begin + require(path) + rescue Exception => exception # rubocop:disable RescueException + message = "\n---------------------------------------------" + message << "\nError loading plugin file `#{path}`.\n" + message << "\n#{exception.class} - #{exception.message}" + message << "\n#{exception.backtrace.join("\n")}" + message << "\n---------------------------------------------\n" + warn message.ansi.yellow + return false + end + end + + true + end + + def self.full_require_paths_for(gemspec) + if gemspec.respond_to?(:full_require_paths) + return gemspec.full_require_paths + end + + # RubyGems < 2.2 + gemspec.require_paths.map do |require_path| + if require_path.include?(gemspec.full_gem_path) + require_path + else + File.join(gemspec.full_gem_path, require_path) + end + end + end + private_class_method :full_require_paths_for + end + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/claide-1.1.0/lib/claide/gem_version.rb b/ios/vendor/bundle/ruby/2.6.0/gems/claide-1.1.0/lib/claide/gem_version.rb new file mode 100644 index 0000000..cdb020c --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/claide-1.1.0/lib/claide/gem_version.rb @@ -0,0 +1,7 @@ +module CLAide + # @return [String] + # + # CLAide’s version, following [semver](http://semver.org). + # + VERSION = '1.1.0'.freeze +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/claide-1.1.0/lib/claide/help.rb b/ios/vendor/bundle/ruby/2.6.0/gems/claide-1.1.0/lib/claide/help.rb new file mode 100644 index 0000000..7d3b183 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/claide-1.1.0/lib/claide/help.rb @@ -0,0 +1,58 @@ +# encoding: utf-8 + +module CLAide + require 'claide/informative_error' + + # The exception class that is raised to indicate a help banner should be + # shown while running {Command.run}. + # + class Help < StandardError + include InformativeError + + # @return [String] The banner containing the usage instructions of the + # command to show in the help. + # + attr_reader :banner + + # @return [String] An optional error message that will be shown before the + # help banner. + # + attr_reader :error_message + + # @param [String] banner @see banner + # @param [String] error_message @see error_message + # + # @note If an error message is provided, the exit status, used to + # terminate the program with, will be set to `1`, otherwise a {Help} + # exception is treated as not being a real error and exits with `0`. + # + def initialize(banner, error_message = nil) + @banner = banner + @error_message = error_message + @exit_status = @error_message.nil? ? 0 : 1 + end + + # @return [String] The optional error message, colored in red if + # {Command.ansi_output} is set to `true`. + # + def formatted_error_message + if error_message + message = "[!] #{error_message}" + prettify_error_message(message) + end + end + + # @return [String] + # + def prettify_error_message(message) + message.ansi.red + end + + # @return [String] The optional error message, combined with the help + # banner of the command. + # + def message + [formatted_error_message, banner].compact.join("\n\n") + end + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/claide-1.1.0/lib/claide/informative_error.rb b/ios/vendor/bundle/ruby/2.6.0/gems/claide-1.1.0/lib/claide/informative_error.rb new file mode 100644 index 0000000..8a92bd0 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/claide-1.1.0/lib/claide/informative_error.rb @@ -0,0 +1,21 @@ +# encoding: utf-8 + +module CLAide + # Including this module into an exception class will ensure that when raised, + # while running {Command.run}, only the message of the exception will be + # shown to the user. Unless disabled with the `--verbose` flag. + # + # In addition, the message will be colored red, if {Command.ansi_output} + # is set to `true`. + # + module InformativeError + # @return [Numeric] The exist status code that should be used to terminate + # the program with. Defaults to `1`. + # + attr_writer :exit_status + + def exit_status + @exit_status ||= 1 + end + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/colored2-3.1.2/LICENSE b/ios/vendor/bundle/ruby/2.6.0/gems/colored2-3.1.2/LICENSE new file mode 100644 index 0000000..e543acb --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/colored2-3.1.2/LICENSE @@ -0,0 +1,23 @@ +Copyright (c) 2010 Chris Wanstrath +Copyright (c) 2016 Konstantin Gredeskoul + +MIT License + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/colored2-3.1.2/README.md b/ios/vendor/bundle/ruby/2.6.0/gems/colored2-3.1.2/README.md new file mode 100644 index 0000000..f2da87b --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/colored2-3.1.2/README.md @@ -0,0 +1,93 @@ +[![Gem Version](https://badge.fury.io/rb/colored2.svg)](https://badge.fury.io/rb/colored2) +[![Downloads](http://ruby-gem-downloads-badge.herokuapp.com/colored2?type=total)](https://rubygems.org/gems/colored2) +[![Gitter](https://img.shields.io/gitter/room/gitterHQ/gitter.svg)](https://gitter.im/colored2) + +[![Build Status](https://travis-ci.org/kigster/colored2.svg?branch=master)](https://travis-ci.org/kigster/colored2) +[![Test Coverage](https://codeclimate.com/github/kigster/colored2/badges/coverage.svg)](https://codeclimate.com/github/kigster/colored2/coverage) +[![Code Climate](https://codeclimate.com/github/kigster/colored2/badges/gpa.svg)](https://codeclimate.com/github/kigster/colored2) +[![Issue Count](https://codeclimate.com/github/kigster/colored2/badges/issue_count.svg)](https://codeclimate.com/github/kigster/colored2) + +## Colored2 + +This is an actively maintained fork of Chris (defunkt) Wanstrath's gem [colored](https://github.com/defunkt/colored), which appears to be no longer supported. + +This fork comes with a slightly spruced up syntax, some additional features, and a test suite written in [RSpec](http://rspec.info/). + +## Usage + +In addition to the simple syntax of the original gem, which affected only the string to the left of the method call, the new "bang" syntax affects a string to the right. If the block or a method argument is provided, the contents is wrapped in the color, and the color is then reset back. + +If no block or argument is provided, the color is left open-ended, and must be explicitly reset – when using the 'bang' notation. + +![](doc/colored2-session1.png) + +### Complete set of colors: + + * black + * red + * green + * yellow + * blue + * magenta + * cyan + * white + +### Complete Set of Effects + +> Note: previous versions used method name `clear` instead of `no_color`, which clashed with many 3rd party frameworks that defined similarly named method in the global namespace. +> This highlights the dangers of introducing so many words into the `String` namespace. + + * no_color + * bold + * dark + * italic + * underlined + * reversed + * plain + * normal + +## Usage in Other Classes + +With this gem you can add color to not just strings, but to any other class. `String` class is automatically decorated as soon as `require 'colored2'` is parsed by the ruby interpreter. Note that future versions may refrain from auto-requiring `colored2/strings`, and rely on explicitly requiring components they need colorized, eg `require 'colored2/numbers'`. + +To color numbers, require the following file, which automatically decorates `Integer` and `Float`. You can also add color methods to the `Object`. Finally, you can add the methods to any custom class by including the `Colored2` Module. + +Below is an `IRB` — session that shows a slightly more advanced usage. + +![](doc/colored2-session2.png) + +## Additional Helpers + +There are several additional helpers tucked onto the `String` class. + + * `#to_bol` (to beginning of the line) will rewind the cursor back to the beginning of the current line. + * `#to_eol` (to end of line) + +## Installation + +Add this line to your application's Gemfile: + + + gem 'colored2' + + +And then execute: + + $ bundle + +Or install it yourself as: + + $ gem install colored2 + + +## Development + +To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org). + +## Contributing + +Bug reports and pull requests are welcome on GitHub at [https://github.com/kigster/colored2](https://github.com/kigster/colored2). + +## License + +The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT). diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/colored2-3.1.2/Rakefile b/ios/vendor/bundle/ruby/2.6.0/gems/colored2-3.1.2/Rakefile new file mode 100644 index 0000000..47ca61b --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/colored2-3.1.2/Rakefile @@ -0,0 +1,13 @@ +require 'bundler' +require 'bundler/gem_tasks' +require 'rake/clean' + +CLEAN.include %w(pkg coverage *.gem) + +begin + require 'rspec/core/rake_task' + RSpec::Core::RakeTask.new(:spec) +rescue LoadError +end + +task :default => [:spec] diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/colored2-3.1.2/lib/colored2.rb b/ios/vendor/bundle/ruby/2.6.0/gems/colored2-3.1.2/lib/colored2.rb new file mode 100644 index 0000000..c4305dd --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/colored2-3.1.2/lib/colored2.rb @@ -0,0 +1,85 @@ +require 'colored2/codes' +require 'colored2/ascii_decorator' + +module Colored2 + def self.decorate(a_class) + a_class.send(:include, Colored2) + end + + def self.included(from_class) + from_class.class_eval do + + def surround_with_color(color: nil, effect: nil, color_self: nil, string: nil, &block) + color_type = if Colored2.background_next? && effect.nil? + Colored2.foreground_next! + :background + else + :foreground + end + + opts = {} + opts.merge!(color_type => color) if color + opts.merge!(effect: effect) if effect + + if color_self then + opts.merge!( beginning: :on, end: :off) + colored = Colored2::AsciiDecorator.new(self).decorate(opts) + if string || block + arg = "#{string}#{block.call if block}" + colored << Colored2::AsciiDecorator.new(arg).decorate(opts) if arg.length > 0 + end + else + opts.merge!( end: :on ) + colored = Colored2::AsciiDecorator.new(self).decorate(opts) + if string || block + arg = "#{string}#{block.call if block}" + colored << Colored2::AsciiDecorator.new(arg).decorate(opts.merge(end: :off)) if arg.length > 0 + end + end + colored + end + + def on + Colored2.background_next! + self + end + end + + from_class.instance_eval do + COLORS.keys.each do |color| + define_method(color) do |string = nil, &block| + surround_with_color(color: color, color_self: true, string: string, &block) + end + + define_method("#{color}!".to_sym) do |string = nil, &block| + surround_with_color(color: color, color_self: false, string: string, &block) + end + end + + EFFECTS.keys.each do |effect| + next if effect == 'no_color' + define_method(effect) do |string = nil, &block| + surround_with_color(effect: effect, color_self: true, string: string, &block) + end + + define_method("#{effect}!".to_sym) do |string = nil, &block| + surround_with_color(effect: effect, color_self: false, string: string, &block) + end + end + + define_method(:to_eol) do + tmp = sub(/^(\e\[[\[\e0-9;m]+m)/, "\\1\e[2K") + if tmp == self + return "\e[2K" << self + end + tmp + end + + define_method(:to_bol) do + "#{self}\033[#{length}D\033[0D" + end + end + end +end + +require 'colored2/strings' diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/colored2-3.1.2/lib/colored2/ascii_decorator.rb b/ios/vendor/bundle/ruby/2.6.0/gems/colored2-3.1.2/lib/colored2/ascii_decorator.rb new file mode 100644 index 0000000..c491e61 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/colored2-3.1.2/lib/colored2/ascii_decorator.rb @@ -0,0 +1,86 @@ +require 'colored2/codes' +require 'forwardable' + +module Colored2 + def self.enable! + Colored2::AsciiDecorator.enable! + end + def self.disable! + Colored2::AsciiDecorator.disable! + end + def self.background_next! + Colored2::AsciiDecorator.background_next! + end + def self.foreground_next! + Colored2::AsciiDecorator.foreground_next! + end + def self.background_next? + Colored2::AsciiDecorator.background_next? + end + + class AsciiDecorator + @__background_next = false + @__colors_disabled = false + class << self + attr_accessor :__background_next, :__colors_disabled + def enable! + self.__colors_disabled = false + end + def enabled? + !self.__colors_disabled + end + def disable! + self.__colors_disabled = true + end + def background_next! + self.__background_next = true + end + def foreground_next! + self.__background_next = false + end + def background_next? + self.__background_next + end + end + + extend Forwardable + def_delegators :@my_class, :enable!, :disable! + + attr_accessor :string, :my_class + + def initialize(a_string) + self.string = a_string.instance_of?(Object) ? '' : a_string.to_s + self.my_class = self.class + end + + # options[:start] = :color + # options[:end] = :color | :no_color + def decorate(options = {}) + return string if !self.class.enabled? || string.length == 0 + escape_sequence = [ + Colored2::TextColor.new(options[:foreground]), + Colored2::BackgroundColor.new(options[:background]), + Colored2::Effect.new(options[:effect]) + ].compact.join + + colored = '' + colored << escape_sequence if options[:beginning] == :on + colored << string + if options[:end] + colored << no_color if options[:end] == :off && !colored.end_with?(no_color) + colored << escape_sequence if options[:end] == :on + end + colored + end + + def un_decorate + string.gsub(%r{\e\[\d+(;\d+)*m}, '') + end + + private + + def no_color + @no_color ||= Colored2::Effect.new(:no_color).to_s + end + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/colored2-3.1.2/lib/colored2/codes.rb b/ios/vendor/bundle/ruby/2.6.0/gems/colored2-3.1.2/lib/colored2/codes.rb new file mode 100644 index 0000000..8f46f43 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/colored2-3.1.2/lib/colored2/codes.rb @@ -0,0 +1,63 @@ +module Colored2 + + COLORS = { + black: 30, + red: 31, + green: 32, + yellow: 33, + blue: 34, + magenta: 35, + cyan: 36, + white: 37 + } + + EFFECTS = { + no_color: 0, + bold: 1, + dark: 2, + italic: 3, + underlined: 4, + reversed: 7, + plain: 21, # non-bold + normal: 22 + } + + class Code + attr_accessor :name, :escape + def initialize(name) + @name = name + return if name.nil? + @escape = codes[name.to_sym] + raise ArgumentError.new("No color or effect named #{name} exists for #{self.class}.") if @escape.nil? + end + + def value(shift = nil) + escape_code = escape + escape_code += shift if shift && escape_code + name && escape ? "\e[#{escape_code}m" : '' + end + + def to_s + value + end + end + + class Effect < Code + def codes + EFFECTS + end + end + + class TextColor < Code + def codes + COLORS + end + end + + class BackgroundColor < TextColor + def value + super 10 + end + end + +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/colored2-3.1.2/lib/colored2/numbers.rb b/ios/vendor/bundle/ruby/2.6.0/gems/colored2-3.1.2/lib/colored2/numbers.rb new file mode 100644 index 0000000..64161b0 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/colored2-3.1.2/lib/colored2/numbers.rb @@ -0,0 +1,11 @@ +require 'colored2' unless defined?(Colored2) && Colored2.respond_to?(:decorate) + +module Colored2 + def self.integer_class + major, minor = RUBY_VERSION.split(/\./).map(&:to_i) + major >= 2 && minor >= 4 ? Integer : Kernel.const_get(:Fixnum) + end +end + +Colored2.decorate(Colored2.integer_class) +Colored2.decorate(Float) diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/colored2-3.1.2/lib/colored2/object.rb b/ios/vendor/bundle/ruby/2.6.0/gems/colored2-3.1.2/lib/colored2/object.rb new file mode 100644 index 0000000..439b0f9 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/colored2-3.1.2/lib/colored2/object.rb @@ -0,0 +1,2 @@ +require 'colored2' unless defined?(Colored2) && Colored2.respond_to?(:decorate) +Colored2.decorate(Object) diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/colored2-3.1.2/lib/colored2/strings.rb b/ios/vendor/bundle/ruby/2.6.0/gems/colored2-3.1.2/lib/colored2/strings.rb new file mode 100644 index 0000000..8e099e8 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/colored2-3.1.2/lib/colored2/strings.rb @@ -0,0 +1,2 @@ +require 'colored2' unless defined?(Colored2) && Colored2.respond_to?(:decorate) +Colored2.decorate(String) diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/colored2-3.1.2/lib/colored2/version.rb b/ios/vendor/bundle/ruby/2.6.0/gems/colored2-3.1.2/lib/colored2/version.rb new file mode 100644 index 0000000..ab0f8a7 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/colored2-3.1.2/lib/colored2/version.rb @@ -0,0 +1,3 @@ +module Colored2 + VERSION = '3.1.2' +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/colored2-3.1.2/spec/colored2/numbers_spec.rb b/ios/vendor/bundle/ruby/2.6.0/gems/colored2-3.1.2/spec/colored2/numbers_spec.rb new file mode 100644 index 0000000..f686bfa --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/colored2-3.1.2/spec/colored2/numbers_spec.rb @@ -0,0 +1,26 @@ +require File.expand_path('spec/spec_helper') +require 'colored2/numbers' +require 'colored2/strings' + +RSpec.describe Colored2.integer_class do + describe 'with foreground and background colors' do + it 'should work with one color' do + expect(32.red).to eql('32'.red) + end + it 'should insert escape sequences' do + expect(32.red).to eql("\e[31m32\e[0m") + end + end +end + +RSpec.describe Float do + describe 'with foreground and background colors' do + it 'should add two colors chained' do + expect((32.5).blue.on.red).to eql('32.5'.blue.on.red) + end + + it 'should insert escape sequences' do + expect((32.5).blue.on.red).to eql("\e[41m\e[34m32.5\e[0m") + end + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/colored2-3.1.2/spec/colored2/object_spec.rb b/ios/vendor/bundle/ruby/2.6.0/gems/colored2-3.1.2/spec/colored2/object_spec.rb new file mode 100644 index 0000000..6256254 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/colored2-3.1.2/spec/colored2/object_spec.rb @@ -0,0 +1,24 @@ +require File.expand_path('spec/spec_helper') +require 'colored2/object' + +subject1 = red('hello') +subject2 = red('blue').on.blue +subject3 = on.yellow('on yellow') + +RSpec.describe Object do + + describe 'with foreground and background colors' do + it 'should work with one color' do + expect(subject1).to eql('hello'.red) + end + + it 'should work with color on color' do + expect(subject2).to eql('blue'.red.on.blue) + end + + it 'should add background color using on_' do + expect(subject3).to eql('on yellow'.on.yellow) + end + + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/colored2-3.1.2/spec/colored2/strings_spec.rb b/ios/vendor/bundle/ruby/2.6.0/gems/colored2-3.1.2/spec/colored2/strings_spec.rb new file mode 100644 index 0000000..10da2a4 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/colored2-3.1.2/spec/colored2/strings_spec.rb @@ -0,0 +1,77 @@ +require File.expand_path('spec/spec_helper') +require 'colored2/strings' + +RSpec.describe String do + before do + Colored2.decorate(String) + end + + describe 'with foreground and background colors' do + it 'should work with one color' do + expect('red'.red).to eql("\e[31mred\e[0m") + end + + it 'should add two colors chained' do + expect('blue'.red.blue).to eql("\e[34m\e[31mblue\e[0m") + end + + it 'should add background color using on_' do + expect('on yellow'.on.yellow).to eql("\e[43mon yellow\e[0m") + end + + it 'should work with _on_ syntax' do + expect('red on blue'.red.on.blue).to eql("\e[44m\e[31mred on blue\e[0m") + end + end + + describe 'with effects' do + it 'should add a bold modifier' do + expect('way bold'.bold).to eql("\e[1mway bold\e[0m") + end + + it 'should let modifiers stack' do + expect('underlinedd bold'.bold.underlined).to eql("\e[4m\e[1munderlinedd bold\e[0m") + end + + it 'should let modifiers stack with colors' do + expect('cyan underlinedd bold'.bold.underlined.cyan).to eql("\e[36m\e[4m\e[1mcyan underlinedd bold\e[0m") + end + end + + describe 'new block syntax' do + it 'should defined block syntax nested colors' do + expect('No Color, then'.blue!('blue inside')).to eql('No Color, then' + 'blue inside'.blue) + end + + it 'should defined block syntax nested colors two levels deep' do + expect('regular here'.blue! + 'blue here'.no_color!).to eql('regular here' << 'blue here'.blue) + end + + it 'should defined block syntax nested colors two levels deep' do + expect('regular here'.blue! { 'something else'.red!('red riding hood') }).to eql('regular here'.blue! << 'something else'.red! << 'red riding hood'.no_color!) + end + + it 'should defined block syntax nested colors two levels deep' do + expectation = 'this is regular, but '.red! do + 'this is red '.yellow! do + ' and yellow'.no_color! + end + end + expect(expectation).to eql('this is regular, but '.red! << 'this is red '.yellow! << ' and yellow'.no_color!) + end + end + + describe 'end of line' do + it 'should work with eol' do + expect('nothing to see here really.'.to_eol).to eql("\e[2Knothing to see here really.") + end + + it 'should work with eol_with_with_two_colors' do + expect('blue'.red.blue.to_eol).to eql("\e[34m\e[31m\e[2Kblue\e[0m") + end + + it 'should work with eol_with_modifiers_stack_with_colors' do + expect('cyan underlinedd bold'.bold.underlined.cyan.to_eol).to eql("\e[36m\e[4m\e[1m\e[2Kcyan underlinedd bold\e[0m") + end + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/colored2-3.1.2/spec/colored2_spec.rb b/ios/vendor/bundle/ruby/2.6.0/gems/colored2-3.1.2/spec/colored2_spec.rb new file mode 100644 index 0000000..3b55f07 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/colored2-3.1.2/spec/colored2_spec.rb @@ -0,0 +1,23 @@ +require 'spec_helper' +require 'colored2/strings' + +RSpec.describe Colored2 do + describe 'global enable and disable' do + before do + Colored2.disable! + end + after do + Colored2.enable! + end + let(:sample) { 'sample string' } + + describe 'colors' do + subject { sample.red.on.blue } + it { should eql(sample) } + end + describe 'effects' do + subject { sample.bold.on.red } + it { should eql(sample) } + end + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/colored2-3.1.2/spec/spec_helper.rb b/ios/vendor/bundle/ruby/2.6.0/gems/colored2-3.1.2/spec/spec_helper.rb new file mode 100644 index 0000000..3f2faa0 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/colored2-3.1.2/spec/spec_helper.rb @@ -0,0 +1,5 @@ +require 'simplecov' +SimpleCov.start + +require 'rspec/core' + diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/nanaimo-0.4.0/.github/dependabot.yml b/ios/vendor/bundle/ruby/2.6.0/gems/nanaimo-0.4.0/.github/dependabot.yml new file mode 100644 index 0000000..738566a --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/nanaimo-0.4.0/.github/dependabot.yml @@ -0,0 +1,14 @@ +version: 2 +updates: +- package-ecosystem: bundler + directory: "/" + schedule: + interval: daily + open-pull-requests-limit: 10 + ignore: + - dependency-name: rake + versions: + - ">= 13.a, < 14" + - dependency-name: rubocop + versions: + - "> 0.52.1" diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/nanaimo-0.4.0/.github/workflows/test.yml b/ios/vendor/bundle/ruby/2.6.0/gems/nanaimo-0.4.0/.github/workflows/test.yml new file mode 100644 index 0000000..73f7df2 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/nanaimo-0.4.0/.github/workflows/test.yml @@ -0,0 +1,43 @@ +name: test + +on: + push: + branches: + - master + - /.+-stable$/ + + pull_request: + +jobs: + test: + runs-on: ubuntu-20.04 + + strategy: + fail-fast: false + + matrix: + ruby: + - 2.3.8 + - 2.4.10 + - 2.5.8 + - 2.6.6 + - 2.7.1 + - 3.0.0 + - 3.1.2 + - jruby-9.2.11.1 + + env: + LANG: en_US.UTF-8 + + steps: + - uses: actions/checkout@v2 + + - name: Set up Ruby + uses: ruby/setup-ruby@v1 + with: + ruby-version: ${{ matrix.ruby }} + bundler-cache: true + + - name: Run tests + run: bundle exec rake + continue-on-error: ${{ matrix.ruby == 'ruby-head' }} diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/nanaimo-0.4.0/.gitignore b/ios/vendor/bundle/ruby/2.6.0/gems/nanaimo-0.4.0/.gitignore new file mode 100644 index 0000000..9106b2a --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/nanaimo-0.4.0/.gitignore @@ -0,0 +1,8 @@ +/.bundle/ +/.yardoc +/_yardoc/ +/coverage/ +/doc/ +/pkg/ +/spec/reports/ +/tmp/ diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/nanaimo-0.4.0/.rspec b/ios/vendor/bundle/ruby/2.6.0/gems/nanaimo-0.4.0/.rspec new file mode 100644 index 0000000..8c18f1a --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/nanaimo-0.4.0/.rspec @@ -0,0 +1,2 @@ +--format documentation +--color diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/nanaimo-0.4.0/.rubocop.yml b/ios/vendor/bundle/ruby/2.6.0/gems/nanaimo-0.4.0/.rubocop.yml new file mode 100644 index 0000000..f95e119 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/nanaimo-0.4.0/.rubocop.yml @@ -0,0 +1,14 @@ +inherit_from: + - .rubocop_todo.yml + +AllCops: + TargetRubyVersion: 2.3 + Exclude: + - "lib/nanaimo/unicode/**/*.rb" + - "vendor/**/*" + +Lint/AssignmentInCondition: + Enabled: false + +Metrics: + Enabled: false diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/nanaimo-0.4.0/.rubocop_todo.yml b/ios/vendor/bundle/ruby/2.6.0/gems/nanaimo-0.4.0/.rubocop_todo.yml new file mode 100644 index 0000000..23fdf89 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/nanaimo-0.4.0/.rubocop_todo.yml @@ -0,0 +1,173 @@ +# This configuration was generated by +# `rubocop --auto-gen-config` +# on 2022-05-29 20:27:33 UTC using RuboCop version 1.30.0. +# The point is for the user to remove these configuration records +# one by one as the offenses are removed from the code base. +# Note that changes in the inspected code, or installation of new +# versions of RuboCop, may require this file to be generated again. + +# Offense count: 23 +# This cop supports safe autocorrection (--autocorrect). +Layout/ClosingHeredocIndentation: + Exclude: + - 'spec/nanaimo/reader_spec.rb' + +# Offense count: 14 +# This cop supports safe autocorrection (--autocorrect). +Layout/EmptyLineAfterGuardClause: + Exclude: + - 'lib/nanaimo.rb' + - 'lib/nanaimo/object.rb' + - 'lib/nanaimo/plist.rb' + - 'lib/nanaimo/reader.rb' + - 'lib/nanaimo/unicode.rb' + - 'lib/nanaimo/writer.rb' + - 'lib/nanaimo/writer/pbxproj.rb' + - 'lib/nanaimo/writer/xml.rb' + +# Offense count: 24 +# This cop supports safe autocorrection (--autocorrect). +Layout/HeredocIndentation: + Exclude: + - 'Rakefile' + - 'lib/nanaimo/writer/xml.rb' + - 'spec/nanaimo/reader_spec.rb' + - 'spec/nanaimo/writer/xml_spec.rb' + +# Offense count: 1 +# Configuration parameters: AllowComments. +Lint/EmptyFile: + Exclude: + - 'spec/nanaimo/plist_spec.rb' + +# Offense count: 2 +Lint/MissingSuper: + Exclude: + - 'lib/nanaimo/reader.rb' + - 'lib/nanaimo/writer.rb' + +# Offense count: 2 +# Configuration parameters: ForbiddenDelimiters. +# ForbiddenDelimiters: (?-mix:(^|\s)(EO[A-Z]{1}|END)(\s|$)) +Naming/HeredocDelimiterNaming: + Exclude: + - 'lib/nanaimo/writer/xml.rb' + +# Offense count: 3 +# Configuration parameters: MinNameLength, AllowNamesEndingInNumbers, AllowedNames, ForbiddenNames. +# AllowedNames: at, by, db, id, in, io, ip, of, on, os, pp, to +Naming/MethodParameterName: + Exclude: + - 'lib/nanaimo/reader.rb' + - 'lib/nanaimo/writer/pbxproj.rb' + +# Offense count: 2 +# This cop supports unsafe autocorrection (--autocorrect-all). +Style/CaseLikeIf: + Exclude: + - 'lib/nanaimo/object.rb' + +# Offense count: 1 +# This cop supports safe autocorrection (--autocorrect). +# Configuration parameters: EnforcedStyle. +# SupportedStyles: compact, expanded +Style/EmptyMethod: + Exclude: + - 'lib/nanaimo/writer/xml.rb' + +# Offense count: 1 +# This cop supports safe autocorrection (--autocorrect). +Style/Encoding: + Exclude: + - 'nanaimo.gemspec' + +# Offense count: 3 +# This cop supports safe autocorrection (--autocorrect). +Style/ExpandPathArguments: + Exclude: + - 'nanaimo.gemspec' + - 'spec/nanaimo/writer/pbxproj_spec.rb' + - 'spec/spec_helper.rb' + +# Offense count: 2 +# Configuration parameters: MaxUnannotatedPlaceholdersAllowed, IgnoredMethods. +# SupportedStyles: annotated, template, unannotated +Style/FormatStringToken: + EnforcedStyle: unannotated + +# Offense count: 2 +# This cop supports safe autocorrection (--autocorrect). +Style/IdenticalConditionalBranches: + Exclude: + - 'lib/nanaimo/unicode.rb' + +# Offense count: 4 +# This cop supports safe autocorrection (--autocorrect). +Style/IfUnlessModifier: + Exclude: + - 'lib/nanaimo/reader.rb' + - 'lib/nanaimo/unicode.rb' + +# Offense count: 2 +# This cop supports safe autocorrection (--autocorrect). +# Configuration parameters: EnforcedStyle. +# SupportedStyles: literals, strict +Style/MutableConstant: + Exclude: + - 'lib/nanaimo/reader.rb' + - 'lib/nanaimo/writer.rb' + +# Offense count: 3 +# This cop supports unsafe autocorrection (--autocorrect-all). +# Configuration parameters: EnforcedStyle, IgnoredMethods. +# SupportedStyles: predicate, comparison +Style/NumericPredicate: + Exclude: + - 'spec/**/*' + - 'lib/nanaimo/writer.rb' + +# Offense count: 8 +# This cop supports safe autocorrection (--autocorrect). +# Configuration parameters: PreferredDelimiters. +Style/PercentLiteralDelimiters: + Exclude: + - 'lib/nanaimo/reader.rb' + - 'lib/nanaimo/unicode.rb' + - 'spec/nanaimo/reader_spec.rb' + - 'spec/nanaimo/unicode_spec.rb' + - 'spec/nanaimo/writer/xml_spec.rb' + - 'spec/nanaimo/writer_spec.rb' + +# Offense count: 1 +# This cop supports safe autocorrection (--autocorrect). +Style/RedundantFreeze: + Exclude: + - 'lib/nanaimo/reader.rb' + +# Offense count: 2 +# This cop supports safe autocorrection (--autocorrect). +Style/RedundantRegexpEscape: + Exclude: + - 'lib/nanaimo/writer.rb' + +# Offense count: 1 +# This cop supports safe autocorrection (--autocorrect). +# Configuration parameters: MinSize. +# SupportedStyles: percent, brackets +Style/SymbolArray: + EnforcedStyle: brackets + +# Offense count: 1 +# This cop supports safe autocorrection (--autocorrect). +# Configuration parameters: EnforcedStyle, MinSize, WordRegex. +# SupportedStyles: percent, brackets +Style/WordArray: + Exclude: + - 'lib/nanaimo/reader.rb' + +# Offense count: 22 +# This cop supports safe autocorrection (--autocorrect). +# Configuration parameters: AllowHeredoc, AllowURI, URISchemes, IgnoreCopDirectives, AllowedPatterns, IgnoredPatterns. +# URISchemes: http, https +Layout/LineLength: + Max: 331 diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/nanaimo-0.4.0/CODE_OF_CONDUCT.md b/ios/vendor/bundle/ruby/2.6.0/gems/nanaimo-0.4.0/CODE_OF_CONDUCT.md new file mode 100644 index 0000000..ced55a5 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/nanaimo-0.4.0/CODE_OF_CONDUCT.md @@ -0,0 +1,49 @@ +# Contributor Code of Conduct + +As contributors and maintainers of this project, and in the interest of +fostering an open and welcoming community, we pledge to respect all people who +contribute through reporting issues, posting feature requests, updating +documentation, submitting pull requests or patches, and other activities. + +We are committed to making participation in this project a harassment-free +experience for everyone, regardless of level of experience, gender, gender +identity and expression, sexual orientation, disability, personal appearance, +body size, race, ethnicity, age, religion, or nationality. + +Examples of unacceptable behavior by participants include: + +* The use of sexualized language or imagery +* Personal attacks +* Trolling or insulting/derogatory comments +* Public or private harassment +* Publishing other's private information, such as physical or electronic + addresses, without explicit permission +* Other unethical or unprofessional conduct + +Project maintainers have the right and responsibility to remove, edit, or +reject comments, commits, code, wiki edits, issues, and other contributions +that are not aligned to this Code of Conduct, or to ban temporarily or +permanently any contributor for other behaviors that they deem inappropriate, +threatening, offensive, or harmful. + +By adopting this Code of Conduct, project maintainers commit themselves to +fairly and consistently applying these principles to every aspect of managing +this project. Project maintainers who do not follow or enforce the Code of +Conduct may be permanently removed from the project team. + +This code of conduct applies both within project spaces and in public spaces +when an individual is representing the project or its community. + +Instances of abusive, harassing, or otherwise unacceptable behavior may be +reported by contacting a project maintainer at dan@tomlinson.io. All +complaints will be reviewed and investigated and will result in a response that +is deemed necessary and appropriate to the circumstances. Maintainers are +obligated to maintain confidentiality with regard to the reporter of an +incident. + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], +version 1.3.0, available at +[http://contributor-covenant.org/version/1/3/0/][version] + +[homepage]: http://contributor-covenant.org +[version]: http://contributor-covenant.org/version/1/3/0/ \ No newline at end of file diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/nanaimo-0.4.0/Gemfile b/ios/vendor/bundle/ruby/2.6.0/gems/nanaimo-0.4.0/Gemfile new file mode 100644 index 0000000..c1db5fa --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/nanaimo-0.4.0/Gemfile @@ -0,0 +1,17 @@ +# frozen_string_literal: true + +source 'https://rubygems.org' + +# Specify your gem's dependencies in nanaimo.gemspec +gemspec + +group :development do + gem 'rake', '~> 12.0' + gem 'rspec' + + install_if Gem.ruby_version >= Gem::Version.new('2.6') do + gem 'rubocop' + gem 'rubocop-rake', '~> 0.6.0' + gem 'rubocop-rspec', '~> 2.11' + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/nanaimo-0.4.0/Gemfile.lock b/ios/vendor/bundle/ruby/2.6.0/gems/nanaimo-0.4.0/Gemfile.lock new file mode 100644 index 0000000..b255f0e --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/nanaimo-0.4.0/Gemfile.lock @@ -0,0 +1,62 @@ +PATH + remote: . + specs: + nanaimo (0.4.0) + +GEM + remote: https://rubygems.org/ + specs: + ast (2.4.2) + diff-lcs (1.5.1) + parallel (1.19.2) + parser (3.1.2.0) + ast (~> 2.4.1) + rainbow (3.1.1) + rake (12.3.3) + regexp_parser (2.5.0) + rexml (3.2.5) + rspec (3.13.0) + rspec-core (~> 3.13.0) + rspec-expectations (~> 3.13.0) + rspec-mocks (~> 3.13.0) + rspec-core (3.13.0) + rspec-support (~> 3.13.0) + rspec-expectations (3.13.0) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.13.0) + rspec-mocks (3.13.0) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.13.0) + rspec-support (3.13.0) + rubocop (1.30.0) + parallel (~> 1.10) + parser (>= 3.1.0.0) + rainbow (>= 2.2.2, < 4.0) + regexp_parser (>= 1.8, < 3.0) + rexml (>= 3.2.5, < 4.0) + rubocop-ast (>= 1.18.0, < 2.0) + ruby-progressbar (~> 1.7) + unicode-display_width (>= 1.4.0, < 3.0) + rubocop-ast (1.18.0) + parser (>= 3.1.1.0) + rubocop-rake (0.6.0) + rubocop (~> 1.0) + rubocop-rspec (2.11.1) + rubocop (~> 1.19) + ruby-progressbar (1.11.0) + unicode-display_width (2.1.0) + +PLATFORMS + ruby + +DEPENDENCIES + bundler (~> 2.3) + nanaimo! + rake (~> 12.0) + rspec + rubocop + rubocop-rake (~> 0.6.0) + rubocop-rspec (~> 2.11) + +BUNDLED WITH + 2.3.14 diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/nanaimo-0.4.0/LICENSE.txt b/ios/vendor/bundle/ruby/2.6.0/gems/nanaimo-0.4.0/LICENSE.txt new file mode 100644 index 0000000..1617264 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/nanaimo-0.4.0/LICENSE.txt @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2016 Danielle Tomlinson, Samuel Giddins + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/nanaimo-0.4.0/README.md b/ios/vendor/bundle/ruby/2.6.0/gems/nanaimo-0.4.0/README.md new file mode 100644 index 0000000..f7787ce --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/nanaimo-0.4.0/README.md @@ -0,0 +1,55 @@ +# Nanaimo + +Nanaimo is a simple library that implements ASCII Plist serialization and +deserialization, entirely with native Ruby code (and zero dependencies). It +also comes with out-of-the-box support for serializing Xcode projects (complete +with annotations) and XML plists. + +## Installation + +Add this line to your application's Gemfile: + +```ruby +gem 'nanaimo' +``` + +And then execute: + + $ bundle + +Or install it yourself as: + + $ gem install nanaimo + +## Usage + +```ruby +require 'nanaimo' + +# parse a native ruby object from an ascii plist file +project_hash = Nanaimo::Reader + .from_file("App.xcodeproj/project.pbxproj") + .parse! + .as_ruby + +# change that object +project_hash['...'] = '...' + +# re-serialize it +ascii_plist_string = Nanaimo::Writer.new(project_hash).write +``` + +## Development + +After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment. + +To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org). + +## Contributing + +Bug reports and pull requests are welcome on GitHub at https://github.com/CocoaPods/nanaimo. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct. + + +## License + +The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT). diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/nanaimo-0.4.0/Rakefile b/ios/vendor/bundle/ruby/2.6.0/gems/nanaimo-0.4.0/Rakefile new file mode 100644 index 0000000..3c942d9 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/nanaimo-0.4.0/Rakefile @@ -0,0 +1,80 @@ +# frozen_string_literal: true + +require 'bundler/gem_tasks' +require 'rspec/core/rake_task' + +RSpec::Core::RakeTask.new(:spec) + +task default: [:spec] + +if Gem.ruby_version >= Gem::Version.new('2.6') + require 'rubocop/rake_task' + RuboCop::RakeTask.new + task default: [:rubocop] +end + +task :generate_nextstep_mappings do + require 'net/http' + url = 'http://ftp.unicode.org/Public/MAPPINGS/VENDORS/NEXT/NEXTSTEP.TXT' + mappings = Net::HTTP.get(URI(url)) + .lines + .grep(/^[^#$]/) + .map { |l| l.split("\t", 3) } + .reduce(+'') do |f, (ns, uc, cm)| + f << " #{ns} => #{uc}, #{cm}" + end + map = <<-RUBY +# frozen-string-literal: true +module Nanaimo + module Unicode + # Taken from #{url} + NEXT_STEP_MAPPING = { +#{mappings} }.freeze + end +end + RUBY + File.open('lib/nanaimo/unicode/next_step_mapping.rb', 'w') { |f| f << map } +end + +task :generate_quote_maps do + quote_map = { + "\a" => '\\a', + "\b" => '\\b', + "\f" => '\\f', + "\r" => '\\r', + "\t" => '\\t', + "\v" => '\\v', + "\n" => '\\n', + %(') => "\\'", + %(") => '\\"', + '\\' => '\\\\' + } + + unquote_map = quote_map.each_with_object("\n" => "\n") do |(value, escaped), map| + map[escaped[1..-1]] = value + map + end + quote_map.delete("'") + + 0.upto(31) { |i| quote_map[[i].pack('U')] ||= format('\\U%04x', i) } + quote_regexp = Regexp.union(quote_map.keys) + + dump_hash = proc do |hash, indent = 4| + hash.reduce(+"{\n") { |dumped, (k, v)| dumped << "#{' ' * (indent + 2)}#{k.dump} => #{v.dump},\n" } << ' ' * indent << '}.freeze' + end + + map = <<-RUBY +# frozen-string-literal: true +module Nanaimo + module Unicode + QUOTE_MAP = #{dump_hash[quote_map]} + + UNQUOTE_MAP = #{dump_hash[unquote_map]} + + QUOTE_REGEXP = #{quote_regexp.inspect} + end +end + RUBY + + File.open('lib/nanaimo/unicode/quote_maps.rb', 'w') { |f| f << map } +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/nanaimo-0.4.0/bin/console b/ios/vendor/bundle/ruby/2.6.0/gems/nanaimo-0.4.0/bin/console new file mode 100644 index 0000000..e66267b --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/nanaimo-0.4.0/bin/console @@ -0,0 +1,15 @@ +#!/usr/bin/env ruby +# frozen_string_literal: true + +require 'bundler/setup' +require 'nanaimo' + +# You can add fixtures and/or initialization code here to make experimenting +# with your gem easier. You can also use a different console, if you like. + +# (If you use this, don't forget to add pry to your Gemfile!) +# require "pry" +# Pry.start + +require 'irb' +IRB.start diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/nanaimo-0.4.0/bin/setup b/ios/vendor/bundle/ruby/2.6.0/gems/nanaimo-0.4.0/bin/setup new file mode 100644 index 0000000..dce67d8 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/nanaimo-0.4.0/bin/setup @@ -0,0 +1,8 @@ +#!/usr/bin/env bash +set -euo pipefail +IFS=$'\n\t' +set -vx + +bundle install + +# Do any other automated setup that you need to do here diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/nanaimo-0.4.0/lib/nanaimo.rb b/ios/vendor/bundle/ruby/2.6.0/gems/nanaimo-0.4.0/lib/nanaimo.rb new file mode 100644 index 0000000..03f61a9 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/nanaimo-0.4.0/lib/nanaimo.rb @@ -0,0 +1,22 @@ +# frozen_string_literal: true + +require 'nanaimo/version' + +# A native Ruby implementation of ASCII plist parsing and serialization. +# +module Nanaimo + class Error < StandardError; end + + DEBUG = !ENV['NANAIMO_DEBUG'].nil? + private_constant :DEBUG + def self.debug + return unless DEBUG + warn yield + end + + require 'nanaimo/object' + require 'nanaimo/plist' + require 'nanaimo/reader' + require 'nanaimo/unicode' + require 'nanaimo/writer' +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/nanaimo-0.4.0/lib/nanaimo/object.rb b/ios/vendor/bundle/ruby/2.6.0/gems/nanaimo-0.4.0/lib/nanaimo/object.rb new file mode 100644 index 0000000..72a299e --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/nanaimo-0.4.0/lib/nanaimo/object.rb @@ -0,0 +1,102 @@ +# frozen_string_literal: true + +module Nanaimo + # An object that belongs to a plist. + # + class Object + # @return The underlying native Ruby value + # + attr_accessor :value + + # @return [String] The annotation comment + # + attr_accessor :annotation + + def initialize(value, annotation) + self.value = value + self.annotation = annotation + + raise 'Item cannot be initialize with a nil value' if value.nil? + end + + def ==(other) + return unless other + if other.is_a?(self.class) + other.value == value && annotation == other.annotation + elsif other.is_a?(value.class) + other == value + end + end + alias eql? == + + def hash + value.hash + end + + def <=>(other) + other_value = if other.is_a?(Object) + other.value + elsif other.is_a?(value.class) + other + end + return unless other_value + + value <=> other_value + end + + def to_s + format('<%s %s>', self.class, value) + end + + # @return A native Ruby object representation + # + def as_ruby + raise 'unimplemented' + end + end + + # A string object in a Plist. + # + class String < Object + def as_ruby + value + end + end + + # A string object surrounded by quotes in a Plist. + # + class QuotedString < Object + def as_ruby + value + end + end + + # A data object in a Plist, represented by a binary-encoded string. + # + class Data < Object + def initialize(value, annotation) + value &&= value.dup.force_encoding(Encoding::BINARY) + super(value, annotation) + end + + def as_ruby + value + end + end + + # An array object in a Plist. + # + class Array < Object + def as_ruby + value.map(&:as_ruby) + end + end + + # A dictionary object in a Plist. + # + class Dictionary < Object + def as_ruby + Hash[value.map { |k, v| [k.as_ruby, v.as_ruby] }] + end + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/nanaimo-0.4.0/lib/nanaimo/plist.rb b/ios/vendor/bundle/ruby/2.6.0/gems/nanaimo-0.4.0/lib/nanaimo/plist.rb new file mode 100644 index 0000000..fe465c4 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/nanaimo-0.4.0/lib/nanaimo/plist.rb @@ -0,0 +1,35 @@ +# frozen_string_literal: true + +module Nanaimo + # A Plist. + # + class Plist + # @return [Nanaimo::Object] The root level object in the plist. + # + attr_accessor :root_object + + # @return [String] The encoding of the plist. + # + attr_accessor :file_type + + def initialize(root_object = nil, file_type = nil) + @root_object = root_object + @file_type = file_type + end + + def ==(other) + return unless other.is_a?(Nanaimo::Plist) + file_type == other.file_type && root_object == other.root_object + end + + def hash + root_object.hash + end + + # @return A native Ruby object representation of the plist. + # + def as_ruby + root_object.as_ruby + end + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/nanaimo-0.4.0/lib/nanaimo/reader.rb b/ios/vendor/bundle/ruby/2.6.0/gems/nanaimo-0.4.0/lib/nanaimo/reader.rb new file mode 100644 index 0000000..076be6a --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/nanaimo-0.4.0/lib/nanaimo/reader.rb @@ -0,0 +1,287 @@ +# frozen-string-literal: true + +autoload :StringScanner, 'strscan' + +module Nanaimo + # Transforms plist strings into Plist objects. + # + class Reader + # Raised when attempting to read a plist with an unsupported file format. + # + class UnsupportedPlistFormatError < Error + # @return [Symbol] The unsupported format. + # + attr_reader :format + + def initialize(format) + @format = format + end + + def to_s + "#{format} plists are currently unsupported" + end + end + + # Raised when parsing fails. + # + class ParseError < Error + # @return [[Integer, Integer]] The (line, column) offset into the plist + # where the error occurred + # + attr_accessor :location + + # @return [String] The contents of the plist. + # + attr_accessor :plist_string + + def to_s + "[!] #{super}#{context}" + end + + def context(n = 2) + line_number, column = location + line_number -= 1 + lines = plist_string.split(NEWLINE) + + s = line_number.succ.to_s.size + indent = "#{' ' * s}# " + indicator = "#{line_number.succ}> " + + m = ::String.new("\n") + + m << "#{indent}-------------------------------------------\n" + m << lines[[line_number - n, 0].max...line_number].map do |l| + "#{indent}#{l}\n" + end.join + + line = lines[line_number].to_s + m << "#{indicator}#{line}\n" + + m << ' ' * indent.size + m << line[0, column.pred].gsub(/[^\t]/, ' ') + m << "^\n" + + m << Array(lines[line_number.succ..[lines.count.pred, line_number + n].min]).map do |l| + l.strip.empty? ? '' : "#{indent}#{l}\n" + end.join + m << "#{indent}-------------------------------------------\n" + end + end + + # @param plist_contents [String] + # + # @return [Symbol] The file format of the plist in the given string. + # + def self.plist_type(plist_contents) + case plist_contents + when /\Abplist/ + :binary + when /\A<\?xml/ + :xml + else + :ascii + end + end + + # @param file_path [String] + # + # @return [Plist] A parsed plist from the given file + # + def self.from_file(file_path) + new(File.read(file_path)) + end + + # @param contents [String] The plist to be parsed + # + def initialize(contents) + @scanner = StringScanner.new(contents) + end + + # Parses the contents of the plist + # + # @return [Plist] The parsed Plist object. + # + def parse! + plist_format = ensure_ascii_plist! + read_string_encoding + root_object = parse_object + + eat_whitespace! + raise_parser_error ParseError, 'Found additional characters after parsing the root plist object' unless @scanner.eos? + + Nanaimo::Plist.new(root_object, plist_format) + end + + private + + def ensure_ascii_plist! + self.class.plist_type(@scanner.string).tap do |plist_format| + raise UnsupportedPlistFormatError, plist_format unless plist_format == :ascii + end + end + + def read_string_encoding + # TODO + end + + def parse_object(already_parsed_comment: false) + _comment = skip_to_non_space_matching_annotations unless already_parsed_comment + start_pos = @scanner.pos + raise_parser_error ParseError, 'Unexpected end of string while parsing' if @scanner.eos? + if @scanner.skip(/\{/) + parse_dictionary + elsif @scanner.skip(/\(/) + parse_array + elsif @scanner.skip(//) + raise_parser_error ParseError, "Data missing closing '>'" + end + data.chomp!('>') + data.delete!(' ') + unless data.size.even? + @scanner.unscan + raise_parser_error ParseError, 'Data has an uneven number of hex digits' + end + data = [data].pack('H*') + Nanaimo::Data.new(data, nil) + end + + def current_character + @scanner.peek(1) + end + + def read_singleline_comment + unless comment = @scanner.scan_until(NEWLINE) + raise_parser_error ParseError, 'Failed to terminate single line comment' + end + comment + end + + def eat_whitespace! + @scanner.skip(MANY_WHITESPACES) + end + + NEWLINE_CHARACTERS = %W(\x0A \x0D \u2028 \u2029).freeze + NEWLINE = Regexp.union(*NEWLINE_CHARACTERS) + + WHITESPACE_CHARACTERS = NEWLINE_CHARACTERS + %W(\x09 \x0B \x0C \x20) + WHITESPACE = Regexp.union(*WHITESPACE_CHARACTERS) + + MANY_WHITESPACES = /#{WHITESPACE}+/ + + def read_multiline_comment + unless annotation = @scanner.scan(%r{(?:.+?)(?=\*/)}m) + raise_parser_error ParseError, 'Failed to terminate multiline comment' + end + @scanner.skip(%r{\*/}) + + annotation + end + + def skip_to_non_space_matching_annotations + annotation = ''.freeze + until @scanner.eos? + eat_whitespace! + + # Comment Detection + if @scanner.skip(%r{//}) + annotation = read_singleline_comment + next + elsif @scanner.skip(%r{/\*}) + annotation = read_multiline_comment + next + end + + break + end + annotation + end + + def location_in(scanner) + pos = scanner.charpos + line = scanner.string[0..scanner.charpos].scan(NEWLINE).size + 1 + column = pos - (scanner.string.rindex(NEWLINE, pos - 1) || -1) + column = [1, column].max + [line, column] + end + + def raise_parser_error(klass, message) + exception = klass.new(message).tap do |error| + error.location = location_in(@scanner) + error.plist_string = @scanner.string + end + raise(exception) + end + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/nanaimo-0.4.0/lib/nanaimo/unicode.rb b/ios/vendor/bundle/ruby/2.6.0/gems/nanaimo-0.4.0/lib/nanaimo/unicode.rb new file mode 100644 index 0000000..b10865f --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/nanaimo-0.4.0/lib/nanaimo/unicode.rb @@ -0,0 +1,89 @@ +# frozen-string-literal: true + +require 'nanaimo/unicode/next_step_mapping' +require 'nanaimo/unicode/quote_maps' +module Nanaimo + # @!visibility private + # + module Unicode + class UnsupportedEscapeSequenceError < Error; end + class InvalidEscapeSequenceError < Error; end + + module_function + + def quotify_string(string) + string.gsub(QUOTE_REGEXP, QUOTE_MAP) + end + + ESCAPE_PREFIXES = %W( + 0 1 2 3 4 5 6 7 a b f n r t v \n U \\ + ).freeze + + OCTAL_DIGITS = (0..7).map(&:to_s).freeze + + # Credit to Samantha Marshall + # Taken from https://github.com/samdmarshall/pbPlist/blob/346c29f91f913d35d0e24f6722ec19edb24e5707/pbPlist/StrParse.py#L197 + # Licensed under https://raw.githubusercontent.com/samdmarshall/pbPlist/blob/346c29f91f913d35d0e24f6722ec19edb24e5707/LICENSE + # + # Originally from: http://www.opensource.apple.com/source/CF/CF-744.19/CFOldStylePList.c See `getSlashedChar()` + def unquotify_string(string) + formatted_string = ::String.new + extracted_string = string + string_length = string.size + index = 0 + while index < string_length + if escape_index = extracted_string.index('\\', index) + formatted_string << extracted_string[index...escape_index] unless index == escape_index + index = escape_index + 1 + next_char = extracted_string[index] + if ESCAPE_PREFIXES.include?(next_char) + index += 1 + if unquoted = UNQUOTE_MAP[next_char] + formatted_string << unquoted + elsif next_char == 'U' + length = 4 + unicode_numbers = extracted_string[index, length] + unless unicode_numbers =~ /\A\h{4}\z/ + raise InvalidEscapeSequenceError, "Unicode '\\U' escape sequence terminated without 4 following hex characters" + end + index += length + formatted_string << [unicode_numbers.to_i(16)].pack('U') + elsif OCTAL_DIGITS.include?(next_char) # https://twitter.com/Catfish_Man/status/658014170055507968 + octal_string = extracted_string[index - 1, 3] + if octal_string =~ /\A[0-7]{3}\z/ + index += 2 + code_point = octal_string.to_i(8) + unless code_point <= 0x80 || converted = NEXT_STEP_MAPPING[code_point] + raise InvalidEscapeSequenceError, "Invalid octal escape sequence #{octal_string}" + end + formatted_string << [converted].pack('U') + else + formatted_string << next_char + end + else + raise UnsupportedEscapeSequenceError, "Failed to handle #{next_char} which is in the list of possible escapes" + end + else + index += 1 + formatted_string << next_char + end + else + formatted_string << extracted_string[index..-1] + index = string_length + end + end + formatted_string + end + + XML_STRING_ESCAPES = { + '&' => '&', + '<' => '<', + '>' => '>' + }.freeze + XML_STRING_ESCAPE_REGEXP = Regexp.union(XML_STRING_ESCAPES.keys) + + def xml_escape_string(string) + string.to_s.gsub(XML_STRING_ESCAPE_REGEXP, XML_STRING_ESCAPES) + end + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/nanaimo-0.4.0/lib/nanaimo/unicode/next_step_mapping.rb b/ios/vendor/bundle/ruby/2.6.0/gems/nanaimo-0.4.0/lib/nanaimo/unicode/next_step_mapping.rb new file mode 100644 index 0000000..a286a92 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/nanaimo-0.4.0/lib/nanaimo/unicode/next_step_mapping.rb @@ -0,0 +1,136 @@ +# frozen-string-literal: true +module Nanaimo + module Unicode + # Taken from http://ftp.unicode.org/Public/MAPPINGS/VENDORS/NEXT/NEXTSTEP.TXT + NEXT_STEP_MAPPING = { + 0x80 => 0x00a0, # NO-BREAK SPACE + 0x81 => 0x00c0, # LATIN CAPITAL LETTER A WITH GRAVE + 0x82 => 0x00c1, # LATIN CAPITAL LETTER A WITH ACUTE + 0x83 => 0x00c2, # LATIN CAPITAL LETTER A WITH CIRCUMFLEX + 0x84 => 0x00c3, # LATIN CAPITAL LETTER A WITH TILDE + 0x85 => 0x00c4, # LATIN CAPITAL LETTER A WITH DIAERESIS + 0x86 => 0x00c5, # LATIN CAPITAL LETTER A WITH RING + 0x87 => 0x00c7, # LATIN CAPITAL LETTER C WITH CEDILLA + 0x88 => 0x00c8, # LATIN CAPITAL LETTER E WITH GRAVE + 0x89 => 0x00c9, # LATIN CAPITAL LETTER E WITH ACUTE + 0x8a => 0x00ca, # LATIN CAPITAL LETTER E WITH CIRCUMFLEX + 0x8b => 0x00cb, # LATIN CAPITAL LETTER E WITH DIAERESIS + 0x8c => 0x00cc, # LATIN CAPITAL LETTER I WITH GRAVE + 0x8d => 0x00cd, # LATIN CAPITAL LETTER I WITH ACUTE + 0x8e => 0x00ce, # LATIN CAPITAL LETTER I WITH CIRCUMFLEX + 0x8f => 0x00cf, # LATIN CAPITAL LETTER I WITH DIAERESIS + 0x90 => 0x00d0, # LATIN CAPITAL LETTER ETH + 0x91 => 0x00d1, # LATIN CAPITAL LETTER N WITH TILDE + 0x92 => 0x00d2, # LATIN CAPITAL LETTER O WITH GRAVE + 0x93 => 0x00d3, # LATIN CAPITAL LETTER O WITH ACUTE + 0x94 => 0x00d4, # LATIN CAPITAL LETTER O WITH CIRCUMFLEX + 0x95 => 0x00d5, # LATIN CAPITAL LETTER O WITH TILDE + 0x96 => 0x00d6, # LATIN CAPITAL LETTER O WITH DIAERESIS + 0x97 => 0x00d9, # LATIN CAPITAL LETTER U WITH GRAVE + 0x98 => 0x00da, # LATIN CAPITAL LETTER U WITH ACUTE + 0x99 => 0x00db, # LATIN CAPITAL LETTER U WITH CIRCUMFLEX + 0x9a => 0x00dc, # LATIN CAPITAL LETTER U WITH DIAERESIS + 0x9b => 0x00dd, # LATIN CAPITAL LETTER Y WITH ACUTE + 0x9c => 0x00de, # LATIN CAPITAL LETTER THORN + 0x9d => 0x00b5, # MICRO SIGN + 0x9e => 0x00d7, # MULTIPLICATION SIGN + 0x9f => 0x00f7, # DIVISION SIGN + 0xa0 => 0x00a9, # COPYRIGHT SIGN + 0xa1 => 0x00a1, # INVERTED EXCLAMATION MARK + 0xa2 => 0x00a2, # CENT SIGN + 0xa3 => 0x00a3, # POUND SIGN + 0xa4 => 0x2044, # FRACTION SLASH + 0xa5 => 0x00a5, # YEN SIGN + 0xa6 => 0x0192, # LATIN SMALL LETTER F WITH HOOK + 0xa7 => 0x00a7, # SECTION SIGN + 0xa8 => 0x00a4, # CURRENCY SIGN + 0xa9 => 0x2019, # RIGHT SINGLE QUOTATION MARK + 0xaa => 0x201c, # LEFT DOUBLE QUOTATION MARK + 0xab => 0x00ab, # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + 0xac => 0x2039, # SINGLE LEFT-POINTING ANGLE QUOTATION MARK + 0xad => 0x203a, # SINGLE RIGHT-POINTING ANGLE QUOTATION MARK + 0xae => 0xfb01, # LATIN SMALL LIGATURE FI + 0xaf => 0xfb02, # LATIN SMALL LIGATURE FL + 0xb0 => 0x00ae, # REGISTERED SIGN + 0xb1 => 0x2013, # EN DASH + 0xb2 => 0x2020, # DAGGER + 0xb3 => 0x2021, # DOUBLE DAGGER + 0xb4 => 0x00b7, # MIDDLE DOT + 0xb5 => 0x00a6, # BROKEN BAR + 0xb6 => 0x00b6, # PILCROW SIGN + 0xb7 => 0x2022, # BULLET + 0xb8 => 0x201a, # SINGLE LOW-9 QUOTATION MARK + 0xb9 => 0x201e, # DOUBLE LOW-9 QUOTATION MARK + 0xba => 0x201d, # RIGHT DOUBLE QUOTATION MARK + 0xbb => 0x00bb, # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + 0xbc => 0x2026, # HORIZONTAL ELLIPSIS + 0xbd => 0x2030, # PER MILLE SIGN + 0xbe => 0x00ac, # NOT SIGN + 0xbf => 0x00bf, # INVERTED QUESTION MARK + 0xc0 => 0x00b9, # SUPERSCRIPT ONE + 0xc1 => 0x02cb, # MODIFIER LETTER GRAVE ACCENT + 0xc2 => 0x00b4, # ACUTE ACCENT + 0xc3 => 0x02c6, # MODIFIER LETTER CIRCUMFLEX ACCENT + 0xc4 => 0x02dc, # SMALL TILDE + 0xc5 => 0x00af, # MACRON + 0xc6 => 0x02d8, # BREVE + 0xc7 => 0x02d9, # DOT ABOVE + 0xc8 => 0x00a8, # DIAERESIS + 0xc9 => 0x00b2, # SUPERSCRIPT TWO + 0xca => 0x02da, # RING ABOVE + 0xcb => 0x00b8, # CEDILLA + 0xcc => 0x00b3, # SUPERSCRIPT THREE + 0xcd => 0x02dd, # DOUBLE ACUTE ACCENT + 0xce => 0x02db, # OGONEK + 0xcf => 0x02c7, # CARON + 0xd0 => 0x2014, # EM DASH + 0xd1 => 0x00b1, # PLUS-MINUS SIGN + 0xd2 => 0x00bc, # VULGAR FRACTION ONE QUARTER + 0xd3 => 0x00bd, # VULGAR FRACTION ONE HALF + 0xd4 => 0x00be, # VULGAR FRACTION THREE QUARTERS + 0xd5 => 0x00e0, # LATIN SMALL LETTER A WITH GRAVE + 0xd6 => 0x00e1, # LATIN SMALL LETTER A WITH ACUTE + 0xd7 => 0x00e2, # LATIN SMALL LETTER A WITH CIRCUMFLEX + 0xd8 => 0x00e3, # LATIN SMALL LETTER A WITH TILDE + 0xd9 => 0x00e4, # LATIN SMALL LETTER A WITH DIAERESIS + 0xda => 0x00e5, # LATIN SMALL LETTER A WITH RING ABOVE + 0xdb => 0x00e7, # LATIN SMALL LETTER C WITH CEDILLA + 0xdc => 0x00e8, # LATIN SMALL LETTER E WITH GRAVE + 0xdd => 0x00e9, # LATIN SMALL LETTER E WITH ACUTE + 0xde => 0x00ea, # LATIN SMALL LETTER E WITH CIRCUMFLEX + 0xdf => 0x00eb, # LATIN SMALL LETTER E WITH DIAERESIS + 0xe0 => 0x00ec, # LATIN SMALL LETTER I WITH GRAVE + 0xe1 => 0x00c6, # LATIN CAPITAL LETTER AE + 0xe2 => 0x00ed, # LATIN SMALL LETTER I WITH ACUTE + 0xe3 => 0x00aa, # FEMININE ORDINAL INDICATOR + 0xe4 => 0x00ee, # LATIN SMALL LETTER I WITH CIRCUMFLEX + 0xe5 => 0x00ef, # LATIN SMALL LETTER I WITH DIAERESIS + 0xe6 => 0x00f0, # LATIN SMALL LETTER ETH + 0xe7 => 0x00f1, # LATIN SMALL LETTER N WITH TILDE + 0xe8 => 0x0141, # LATIN CAPITAL LETTER L WITH STROKE + 0xe9 => 0x00d8, # LATIN CAPITAL LETTER O WITH STROKE + 0xea => 0x0152, # LATIN CAPITAL LIGATURE OE + 0xeb => 0x00ba, # MASCULINE ORDINAL INDICATOR + 0xec => 0x00f2, # LATIN SMALL LETTER O WITH GRAVE + 0xed => 0x00f3, # LATIN SMALL LETTER O WITH ACUTE + 0xee => 0x00f4, # LATIN SMALL LETTER O WITH CIRCUMFLEX + 0xef => 0x00f5, # LATIN SMALL LETTER O WITH TILDE + 0xf0 => 0x00f6, # LATIN SMALL LETTER O WITH DIAERESIS + 0xf1 => 0x00e6, # LATIN SMALL LETTER AE + 0xf2 => 0x00f9, # LATIN SMALL LETTER U WITH GRAVE + 0xf3 => 0x00fa, # LATIN SMALL LETTER U WITH ACUTE + 0xf4 => 0x00fb, # LATIN SMALL LETTER U WITH CIRCUMFLEX + 0xf5 => 0x0131, # LATIN SMALL LETTER DOTLESS I + 0xf6 => 0x00fc, # LATIN SMALL LETTER U WITH DIAERESIS + 0xf7 => 0x00fd, # LATIN SMALL LETTER Y WITH ACUTE + 0xf8 => 0x0142, # LATIN SMALL LETTER L WITH STROKE + 0xf9 => 0x00f8, # LATIN SMALL LETTER O WITH STROKE + 0xfa => 0x0153, # LATIN SMALL LIGATURE OE + 0xfb => 0x00df, # LATIN SMALL LETTER SHARP S + 0xfc => 0x00fe, # LATIN SMALL LETTER THORN + 0xfd => 0x00ff, # LATIN SMALL LETTER Y WITH DIAERESIS + 0xfe => 0xfffd, # .notdef, REPLACEMENT CHARACTER + 0xff => 0xfffd, # .notdef, REPLACEMENT CHARACTER + }.freeze + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/nanaimo-0.4.0/lib/nanaimo/unicode/quote_maps.rb b/ios/vendor/bundle/ruby/2.6.0/gems/nanaimo-0.4.0/lib/nanaimo/unicode/quote_maps.rb new file mode 100644 index 0000000..b051232 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/nanaimo-0.4.0/lib/nanaimo/unicode/quote_maps.rb @@ -0,0 +1,57 @@ +# frozen-string-literal: true +module Nanaimo + module Unicode + QUOTE_MAP = { + "\a" => "\\a", + "\b" => "\\b", + "\f" => "\\f", + "\r" => "\\r", + "\t" => "\\t", + "\v" => "\\v", + "\n" => "\\n", + "\"" => "\\\"", + "\\" => "\\\\", + "\x00" => "\\U0000", + "\x01" => "\\U0001", + "\x02" => "\\U0002", + "\x03" => "\\U0003", + "\x04" => "\\U0004", + "\x05" => "\\U0005", + "\x06" => "\\U0006", + "\x0E" => "\\U000e", + "\x0F" => "\\U000f", + "\x10" => "\\U0010", + "\x11" => "\\U0011", + "\x12" => "\\U0012", + "\x13" => "\\U0013", + "\x14" => "\\U0014", + "\x15" => "\\U0015", + "\x16" => "\\U0016", + "\x17" => "\\U0017", + "\x18" => "\\U0018", + "\x19" => "\\U0019", + "\x1A" => "\\U001a", + "\e" => "\\U001b", + "\x1C" => "\\U001c", + "\x1D" => "\\U001d", + "\x1E" => "\\U001e", + "\x1F" => "\\U001f", + }.freeze + + UNQUOTE_MAP = { + "\n" => "\n", + "a" => "\a", + "b" => "\b", + "f" => "\f", + "r" => "\r", + "t" => "\t", + "v" => "\v", + "n" => "\n", + "'" => "'", + "\"" => "\"", + "\\" => "\\", + }.freeze + + QUOTE_REGEXP = /\x07|\x08|\f|\r|\t|\v|\n|"|\\|\x00|\x01|\x02|\x03|\x04|\x05|\x06|\x0E|\x0F|\x10|\x11|\x12|\x13|\x14|\x15|\x16|\x17|\x18|\x19|\x1A|\x1B|\x1C|\x1D|\x1E|\x1F/ + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/nanaimo-0.4.0/lib/nanaimo/version.rb b/ios/vendor/bundle/ruby/2.6.0/gems/nanaimo-0.4.0/lib/nanaimo/version.rb new file mode 100644 index 0000000..f3e778c --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/nanaimo-0.4.0/lib/nanaimo/version.rb @@ -0,0 +1,5 @@ +# frozen_string_literal: true + +module Nanaimo + VERSION = '0.4.0' +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/nanaimo-0.4.0/lib/nanaimo/writer.rb b/ios/vendor/bundle/ruby/2.6.0/gems/nanaimo-0.4.0/lib/nanaimo/writer.rb new file mode 100644 index 0000000..256e8ed --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/nanaimo-0.4.0/lib/nanaimo/writer.rb @@ -0,0 +1,206 @@ +# frozen_string_literal: true + +module Nanaimo + # Transforms native ruby objects or Plist objects into their ASCII Plist + # string representation. + # + class Writer + autoload :PBXProjWriter, 'nanaimo/writer/pbxproj' + autoload :XMLWriter, 'nanaimo/writer/xml' + + # Raised when attempting to write a plist containing an object of an + # unsupported type. + # + class UnsupportedPlistTypeError < Error + def initialize(plist_format, object) + @plist_format = plist_format + @object = object + end + + def to_s + "Unable to write #{@object.inspect}. " \ + "`#{@object.class}` is an invalid object type to serialize in a #{@plist_format} plist." + end + end + + # The magic comment that denotes a UTF8-encoded plist. + # + UTF8 = "// !$*UTF8*$!\n" + + # @param plist [Plist,String,Hash,Array] The plist object to write + # @param pretty [Boolean] Whether to serialize annotations and add + # spaces and newlines to make output more legible + # @param output [#<<] The output stream to write the plist to + # + def initialize(plist, pretty: true, output: ::String.new, strict: true) + @plist = plist + @pretty = pretty + @output = output + @indent = 0 + @newlines = true + @strict = strict + end + + # Writes the plist to the given output. + # + def write + write_utf8 + write_object(@plist.root_object) + write_newline + end + + attr_reader :indent, :pretty, :output, :newlines, :strict + private :indent, :pretty, :output, :newlines, :strict + + private + + def plist_format + :ascii + end + + def write_utf8 + output << UTF8 + end + + def write_newline + output << if newlines + "\n" + else + ' ' + end + end + + def write_object(object) + case object + when Array, ::Array + write_array(object) + when Dictionary, ::Hash + write_dictionary(object) + when QUOTED_STRING_REGEXP, QuotedString + write_quoted_string(object) + when String, ::String, Symbol + write_string(object) + when Data + write_data(object) + else + raise UnsupportedPlistTypeError.new(plist_format, object) if strict + write_string_quoted_if_necessary(object) + end + write_annotation(object) if pretty + output + end + + QUOTED_STRING_REGEXP = %r{\A\z|[^\w\.\$/]|\A___} + private_constant :QUOTED_STRING_REGEXP + + def write_string_quoted_if_necessary(object) + string = object.to_s + string =~ QUOTED_STRING_REGEXP ? write_quoted_string(string) : write_string(string) + end + + def write_string(object) + output << value_for(object).to_s + end + + def write_quoted_string(object) + output << '"' << Unicode.quotify_string(value_for(object)) << '"' + end + + def write_data(object) + output << '<' + value_for(object).unpack('H*').first.chars.each_with_index do |c, i| + output << "\n" if i > 0 && (i % 16).zero? + output << ' ' if i > 0 && (i % 4).zero? + output << c + end + output << '>' + end + + def write_array(object) + write_array_start + value = value_for(object) + value.each do |v| + write_array_element(v) + end + write_array_end + end + + def write_array_start + output << '(' + write_newline if newlines + push_indent! + end + + def write_array_end + pop_indent! + write_indent + output << ')' + end + + def write_array_element(object) + write_indent + write_object(object) + output << ',' + write_newline + end + + def write_dictionary(object) + write_dictionary_start + value = value_for(object) + value.each do |key, val| + write_dictionary_key_value_pair(key, val) + end + write_dictionary_end + end + + def write_dictionary_start + output << '{' + write_newline if newlines + push_indent! + end + + def write_dictionary_end + pop_indent! + write_indent + output << '}' + end + + def write_dictionary_key_value_pair(key, value) + write_indent + write_object(key) + output << ' = ' + write_object(value) + output << ';' + write_newline + end + + def write_annotation(object) + return output unless object.is_a?(Nanaimo::Object) + annotation = object.annotation + return output unless annotation && !annotation.empty? + output << " /*#{annotation}*/" + end + + def value_for(object) + if object.is_a?(Nanaimo::Object) + object.value + else + object + end + end + + def push_indent! + @indent += 1 + end + + def pop_indent! + @indent -= 1 + @indent = 0 if @indent < 0 + end + + def write_indent + output << "\t" * indent if newlines + output + end + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/nanaimo-0.4.0/lib/nanaimo/writer/pbxproj.rb b/ios/vendor/bundle/ruby/2.6.0/gems/nanaimo-0.4.0/lib/nanaimo/writer/pbxproj.rb new file mode 100644 index 0000000..6f91963 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/nanaimo-0.4.0/lib/nanaimo/writer/pbxproj.rb @@ -0,0 +1,83 @@ +# frozen_string_literal: true + +module Nanaimo + class Writer + # Transforms native ruby objects or Plist objects into their ASCII Plist + # string representation, formatted as Xcode writes Xcode projects. + # + class PBXProjWriter < Writer + ISA = String.new('isa', '') + private_constant :ISA + + def initialize(plist, **args) + super(plist, **args) + @objects_section = false + end + + private + + def write_dictionary(object) + n = newlines + @newlines = false if flat_dictionary?(object) + return super(sort_dictionary(object)) unless @objects_section + @objects_section = false + write_dictionary_start + value = value_for(object) + objects_by_isa = value.group_by { |_k, v| isa_for(v) } + objects_by_isa.each do |isa, kvs| + write_newline + output << "/* Begin #{isa} section */" + write_newline + sort_dictionary(kvs, key_can_be_isa: false).each do |k, v| + write_dictionary_key_value_pair(k, v) + end + output << "/* End #{isa} section */" + write_newline + end + write_dictionary_end + ensure + @newlines = n + end + + def write_dictionary_key_value_pair(k, v) + # since the objects section is always at the top-level, + # we can avoid checking if we're starting the 'objects' + # section if we're further "indented" (aka deeper) in the project + @objects_section = true if indent == 1 && value_for(k) == 'objects' + + super + end + + def sort_dictionary(dictionary, key_can_be_isa: true) + hash = value_for(dictionary) + hash.sort_by do |k, _v| + k = value_for(k) + if key_can_be_isa + k == 'isa' ? '' : k + else + k + end + end + end + + def isa_for(dictionary) + dictionary = value_for(dictionary) + return unless dictionary.is_a?(Hash) + if isa = dictionary['isa'] + value_for(isa) + elsif isa = dictionary[ISA] + value_for(isa) + end + end + + def flat_dictionary?(dictionary) + case isa_for(dictionary) + when 'PBXBuildFile', 'PBXFileReference' + true + else + false + end + end + end + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/nanaimo-0.4.0/lib/nanaimo/writer/xml.rb b/ios/vendor/bundle/ruby/2.6.0/gems/nanaimo-0.4.0/lib/nanaimo/writer/xml.rb new file mode 100644 index 0000000..869fe61 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/nanaimo-0.4.0/lib/nanaimo/writer/xml.rb @@ -0,0 +1,139 @@ +# frozen_string_literal: true + +autoload :Base64, 'base64' +autoload :Date, 'date' +autoload :DateTime, 'date' + +module Nanaimo + class Writer + # Transforms native ruby objects or Plist objects into their XML Plist + # string representation. + # + class XMLWriter < Writer + def write + write_xml_header + write_object(@plist.root_object) + write_newline + write_xml_footer + end + + private + + def plist_format + :xml + end + + def write_object(object) + case object + when Float, Integer + write_number(object) + when Time, Date, DateTime + write_date(object) + when true, false + write_boolean(object) + else + super + end + end + + def write_xml_header + output << <<-EOS + + + + EOS + end + + def write_xml_footer + output << <<-EOS + + EOS + end + + def write_annotation(_) + end + + def write_number(object) + type = object.integer? ? 'integer' : 'real' + output << "<#{type}>#{object}" + end + + def write_boolean(object) + output << "<#{object}/>" + end + + def write_date(object) + output << '' << object.iso8601 << '' + end + + def write_string(object) + output << '' << Unicode.xml_escape_string(value_for(object)) << '' + end + + def write_quoted_string(object) + write_string(object) + end + + def write_data(object) + output << '' + data = Base64.encode64(value_for(object)).delete("\n") + data = data.scan(/.{1,76}/).join("\n") if pretty + output << data << '' + end + + def write_array(object) + return output << '' if value_for(object).empty? + super + end + + def write_array_start + output << '' + write_newline if newlines + push_indent! + end + + def write_array_end + pop_indent! + write_indent + output << '' + end + + def write_array_element(object) + write_indent + write_object(object) + write_newline + end + + def write_dictionary(object) + object = value_for(object) + return output << '' if object.empty? + keys = object.keys.sort_by(&:to_s) + object = keys.each_with_object({}) do |key, hash| + hash[key.to_s] = object[key] + end + super(object) + end + + def write_dictionary_start + output << '' + write_newline if newlines + push_indent! + end + + def write_dictionary_end + pop_indent! + write_indent + output << '' + end + + def write_dictionary_key_value_pair(key, value) + write_indent + output << '' << Unicode.xml_escape_string(value_for(key)) << '' + write_newline + write_indent + write_object(value) + write_newline + end + end + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/nanaimo-0.4.0/nanaimo.gemspec b/ios/vendor/bundle/ruby/2.6.0/gems/nanaimo-0.4.0/nanaimo.gemspec new file mode 100644 index 0000000..7cf888f --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/nanaimo-0.4.0/nanaimo.gemspec @@ -0,0 +1,28 @@ +# coding: utf-8 +# frozen_string_literal: true + +lib = File.expand_path('../lib', __FILE__) +$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib) +require 'nanaimo/version' + +Gem::Specification.new do |spec| + spec.name = 'nanaimo' + spec.version = Nanaimo::VERSION + spec.authors = ['Danielle Tomlinson', 'Samuel Giddins'] + spec.email = ['dan@tomlinson.io', 'segiddins@segiddins.me'] + + spec.summary = 'A library for (de)serialization of ASCII Plists.' + spec.homepage = 'https://github.com/CocoaPods/Nanaimo' + spec.license = 'MIT' + + spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) } + spec.bindir = 'exe' + spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) } + spec.require_paths = ['lib'] + + spec.required_ruby_version = '>= 2.3.0' + + spec.add_development_dependency 'bundler', '~> 2.3' + spec.add_development_dependency 'rake', '~> 12.3' + spec.add_development_dependency 'rspec', '~> 3.0' +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/nkf-0.2.0/.git-blame-ignore-revs b/ios/vendor/bundle/ruby/2.6.0/gems/nkf-0.2.0/.git-blame-ignore-revs new file mode 100644 index 0000000..9434cab --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/nkf-0.2.0/.git-blame-ignore-revs @@ -0,0 +1,7 @@ +# This is a file used by GitHub to ignore the following commits on `git blame`. +# +# You can also do the same thing in your local repository with: +# $ git config --local blame.ignoreRevsFile .git-blame-ignore-revs + +# Expand tabs +564b86c8de70b636d94df815c77c5989a7a45c3b diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/nkf-0.2.0/.github/dependabot.yml b/ios/vendor/bundle/ruby/2.6.0/gems/nkf-0.2.0/.github/dependabot.yml new file mode 100644 index 0000000..b18fd29 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/nkf-0.2.0/.github/dependabot.yml @@ -0,0 +1,6 @@ +version: 2 +updates: + - package-ecosystem: 'github-actions' + directory: '/' + schedule: + interval: 'weekly' diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/nkf-0.2.0/.github/workflows/test.yml b/ios/vendor/bundle/ruby/2.6.0/gems/nkf-0.2.0/.github/workflows/test.yml new file mode 100644 index 0000000..819a886 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/nkf-0.2.0/.github/workflows/test.yml @@ -0,0 +1,29 @@ +name: build + +on: [push, pull_request] + +jobs: + ruby-versions: + uses: ruby/actions/.github/workflows/ruby_versions.yml@master + with: + engine: cruby-jruby + min_version: 2.5 + + build: + needs: ruby-versions + name: build (${{ matrix.ruby }} / ${{ matrix.os }}) + strategy: + matrix: + ruby: ${{ fromJson(needs.ruby-versions.outputs.versions) }} + os: [ ubuntu-latest, macos-latest ] + runs-on: ${{ matrix.os }} + steps: + - uses: actions/checkout@v4 + - name: Set up Ruby + uses: ruby/setup-ruby@v1 + with: + ruby-version: ${{ matrix.ruby }} + - name: Install dependencies + run: bundle install + - name: Run test + run: rake compile test diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/nkf-0.2.0/.gitignore b/ios/vendor/bundle/ruby/2.6.0/gems/nkf-0.2.0/.gitignore new file mode 100644 index 0000000..fdd6ba5 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/nkf-0.2.0/.gitignore @@ -0,0 +1,14 @@ +/.bundle/ +/.yardoc +/_yardoc/ +/coverage/ +/doc/ +/pkg/ +/spec/reports/ +/tmp/ +*.bundle +*.dll +*.so +lib/nkf.jar +.idea +nkf.iml diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/nkf-0.2.0/Gemfile b/ios/vendor/bundle/ruby/2.6.0/gems/nkf-0.2.0/Gemfile new file mode 100644 index 0000000..ea0b59d --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/nkf-0.2.0/Gemfile @@ -0,0 +1,5 @@ +source "https://rubygems.org" + +gem "rake" +gem "rake-compiler" +gem "test-unit" diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/nkf-0.2.0/LICENSE.txt b/ios/vendor/bundle/ruby/2.6.0/gems/nkf-0.2.0/LICENSE.txt new file mode 100644 index 0000000..a009cae --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/nkf-0.2.0/LICENSE.txt @@ -0,0 +1,22 @@ +Copyright (C) 1993-2013 Yukihiro Matsumoto. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in the +documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/nkf-0.2.0/README.md b/ios/vendor/bundle/ruby/2.6.0/gems/nkf-0.2.0/README.md new file mode 100644 index 0000000..6b65862 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/nkf-0.2.0/README.md @@ -0,0 +1,38 @@ +# NKF + +This is a Ruby Extension version of nkf (Network Kanji Filter). +It converts the first argument and returns converted result. Conversion +details are specified by flags as the first argument. + +## Installation + +Add this line to your application's Gemfile: + +```ruby +gem 'nkf' +``` + +And then execute: + + $ bundle install + +Or install it yourself as: + + $ gem install nkf + +## Usage + +```ruby +require 'nkf' +output = NKF.nkf("-s", input) +``` + +## Development + +After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake test` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment. + +To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org). + +## Contributing + +Bug reports and pull requests are welcome on GitHub at https://github.com/ruby/nkf. diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/nkf-0.2.0/Rakefile b/ios/vendor/bundle/ruby/2.6.0/gems/nkf-0.2.0/Rakefile new file mode 100644 index 0000000..042b220 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/nkf-0.2.0/Rakefile @@ -0,0 +1,24 @@ +require "bundler/gem_tasks" +require "rake/testtask" + +Rake::TestTask.new(:test) do |t| + t.libs << "test" + t.libs << "lib" + t.test_files = FileList["test/**/test_*.rb"] +end + +if RUBY_ENGINE == "jruby" + require "rake/javaextensiontask" + Rake::JavaExtensionTask.new("nkf") do |ext| + ext.source_version = "1.8" + ext.target_version = "1.8" + ext.ext_dir = "ext/java" + end + + task :build => :compile +else + require 'rake/extensiontask' + Rake::ExtensionTask.new("nkf") +end + +task :default => :test diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/nkf-0.2.0/bin/console b/ios/vendor/bundle/ruby/2.6.0/gems/nkf-0.2.0/bin/console new file mode 100644 index 0000000..e6c456e --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/nkf-0.2.0/bin/console @@ -0,0 +1,14 @@ +#!/usr/bin/env ruby + +require "bundler/setup" +require "nkf" + +# You can add fixtures and/or initialization code here to make experimenting +# with your gem easier. You can also use a different console, if you like. + +# (If you use this, don't forget to add pry to your Gemfile!) +# require "pry" +# Pry.start + +require "irb" +IRB.start(__FILE__) diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/nkf-0.2.0/bin/setup b/ios/vendor/bundle/ruby/2.6.0/gems/nkf-0.2.0/bin/setup new file mode 100644 index 0000000..dce67d8 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/nkf-0.2.0/bin/setup @@ -0,0 +1,8 @@ +#!/usr/bin/env bash +set -euo pipefail +IFS=$'\n\t' +set -vx + +bundle install + +# Do any other automated setup that you need to do here diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/nkf-0.2.0/ext/java/org/jruby/ext/nkf/Command.java b/ios/vendor/bundle/ruby/2.6.0/gems/nkf-0.2.0/ext/java/org/jruby/ext/nkf/Command.java new file mode 100644 index 0000000..16ac1a9 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/nkf-0.2.0/ext/java/org/jruby/ext/nkf/Command.java @@ -0,0 +1,58 @@ +/***** BEGIN LICENSE BLOCK ***** + * Version: EPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Eclipse Public + * License Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.eclipse.org/legal/epl-v20.html + * + * Software distributed under the License is distributed on an "AS + * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or + * implied. See the License for the specific language governing + * rights and limitations under the License. + * + * Copyright (C) 2011 Koichiro Ohba + * + * Alternatively, the contents of this file may be used under the terms of + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the LGPL, and not to allow others to + * use your version of this file under the terms of the EPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the EPL, the LGPL. + ***** END LICENSE BLOCK *****/ + +package org.jruby.ext.nkf; + +import java.util.List; +import java.util.ArrayList; + +public class Command { + private final Listv!Ir4 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%0AIjC@LJ(F zXbhJ_PZ$o9VHvy%pTd3!w#IKz0GB{_7zPtz3A_v+!4Dw+?6Z0)euLIGUG9gaYi%kUc%LmRjO?uKdb1Z;pW;2?OH<2PswmqSk&4wGRSyb7Pfeh6NH z-=F|4f$lI2Cc+YU89so0@DEhGl6eHQgsWi?+z$(2Eo_Bv;7`bEgWsSTbb(u849tZ! zunBgm<_ApZP)?FAaWIcgBY}fzHl$hgq83nY=<~6hj3ZV?T z!OieLm;{Sp4ZH=P!w>K$q+QE-3<{tnbb=dUI6MgRU=?hDkKtSR6@u4szJzL!3-zHj zTm{#`V0Z{tz-IUn{(;E#+_QnR;e3ceGq?mgL0jkr{a_f3ga=?YEP|(DJ-h>-!X7vT zPItx%)P@V7Ia~ub!eAH<<6#QSf_bnER>5oV7Hox&;cNH?euQ7)U&ttDjskg5A1;Ja zxDu{`zHl4d1!G_m%z@?b6ub+96*JJ>eD@0(Zk$mYpTZv42fsqFH)9VP!NqVHbcAvk0%Kq%EQ1#y54OQh z_z{l7Kj7WK+z4vIInV@JLp$gO<Fe7AtB;958r2Eb703!`8> zOaOV+^bD8_cfm4P2yep<_!F}Fa@<2(xE8L5o8b965uI1Il*>dlO0 zD1|OC2u8znSOPD?Cin^t!hcZh7LGM&3@xDx^o3z?FHDB1@Ep7gTi|`z4&TGSklvqT z3(kN^uneAqci=s=bq|!nVpt8Y!B*G?``{1w2TmS*0Oa1@g+x!w?%pUEy*lhrTcr zs@;aKpbV~uUa$?E!Hg?d3~OK`JWqXIgS~JRs?%?Ia26Cm6KDMbW7N){NcpP4Y zH((3whNF;;59>iOl)=@|AN~j1;49b(d*OT755K^l@GqP^gm??*!g){tQD_dOa2d3L z_RtBs!nM#HdcjR_3k-n4a68-$BVYndf?2Q-9)qW04Lk?0!W-}|Y=tji2Yd_r;0HJe z$KZGP7pe@U&2T!L1&yH?V$c+tK}%>4yUf zkv-&wTO8j~#D<-RP^pGPdk(sBaL-%&u+flPh7KImu-)K+H}~m1v|-y}xAz;^u;0KT z4R7x=;D&*N8}=GD;D-Kv8V(-T>&}La&M!W{pkd!W?3{X^S8#qKl6{5`m6X$GSnu+o z1IvdEy)jyTL9aW9_Hl*{7}BrrfIc_m54maJ;Gs@=d5aDmT3lV;@v>`5%R61&uC%;7 zX`@E6(GZKO{8qcRXK$PF@PbAcG*QoPjZJFHOmdWjHncUu%$?a{K+}@VS?QNOd-j>PjZJFHOR>|$< z9(U#LZk62LR>|#cmE7J|$?a{G+}>8n?QNCZ-d4%&ZI#^KR>|#cmE7J|$?a{G+}>8n z?QNah-qy+OZJpfS*2(Q{o!s8m$?a{O++OaGSN3G<n8l-%CZ(x3@I8y`{xl@liORG+}_gU_Le5Mw=}uErOE9rO>S># za(hdY+gqC4ULNRF_C{H9d&`pBTbA73vgG!bCAYUMxd~;-O(;ulLRoSXT3lexN?J5B zHD#?#O$#)}tffWk6IG4;NlE2)w`gor7TT0WHf6C*Sz=R0ZOWKU*}|r5X;ZecDO=l= zr8Z@mMcK-xEVDVJ%;u0Xn?uTM4k@!aq|D}!GMhunYz|>)=($tnE-tel3mKo3$6{gn!#K}kVRof) zuEoOihjG5e!t{r6&c(v?hjHG;!t{r6?v0iiXI~WN_%P1ESeWC(I16K8jt}EZjDg~Y-ildL8T9xq|)N!AW0b?1xd>I;gY0`kANg)y#JGw@rg~6GTzBa%6Jzi zDdQcSq>LYYNy_+9Q&~xPOio6VyAg4=1&xUMplqXDE!87BZtVERv7b(n9W%7#2pg3YpOv7DlyCYl_gce0l*o!d`ilW9qC^AQAQPglxk=aQ_QNuk&X0H{Qy;fxQT9Mgn zMKR;>D>8?DQOp=$MKNQ16`2P{k$GSgnFmIZd0-To2S$;3U=*^&ag23 z(Zcjc3)3GhOn4On-2JXjqv3-~!RGF#W*=qG4hBg9}8% z!t@6hh=zsf4=xasER1>_Hp7Wgtr9bwl$hb9#0)1TW;iJ^!%2x5 zPD;#hQeuXa5;L5XnBkzOYDSN! z89kzA^oW|#BWgyEs2M$?X7q@f(IaX`kEj_vqGt4nn$aU_Mvtf&J)&mxh?>zOYDSN! z89kzA^oW|#BWgyEs2M$?X7q@f(IaX`kEj_vqGt4nn$aU_Mvtf&J)&mxh?>zOYDSN! z89kzA^oW|#BWgyEs2M$?X7q@f(IaX`kEj_vqGt4nn$aU_Mvtf&ETU$xh?>D7Y6gp_ z87!h^u!x$$B5DSUs2MDxX0V8w!6ItTJ)&mxh?>zOYDSN!89j^%V9bmjF*AC^%;*s_ zqesk)9x*d|#LVasGowe$j25Hn*#%!~~&Gd9G`*bp;gL(Gf~F*7#A%-9e! zV?)f04KXt|#LU5Hn*#%!~~&b7m1UgGI~?7BMq6#LU5Hn*#%!~~&Gd9G`*bp;gL(Gf~#!U{M(_ zlQzGgW&HW0p|(9lDz!Z;Q+;{jBQ(_39X6t$tk$-tYZPL8zJ}WNgblUr85?SA8yiJ! z58tr1J$^%NdjN;p_6QEO?O`fv`(wCR{NZ&{Cp3!L9z*i%%ij2yz40-7<74*5$L!6C z*@r{L8iM3{x3E{Rg|&j#Hp(Gx86`Ylv#bA)LhL)V_d5^b>}6Z~okwm~YkN;NCP3Jl z6SFtR-tUcL)+LF+rmB| zD%QLtjljkgYhDbs-GdctUJPsNA=0>oy_FS9VT?koM^594r7(uIz40yWjc;im_ATwL zY-t}SEv*M@O++9Oq=JyI3gBUPb2QWe@G zRiQmn71|?Jp*>O++9Oq=JyI3gBUPdOG*@VkRE74CRA>)Lh4zqC$clB_sIs3c3+?C1 z!ir^hNnxX~h4nZqw1=d^7WM*1*fc6uY(k zXs`#FLVJ+0MogBi*mlU`6}#Hn?<{1oTU%ofi(2f~*4WJg7rV8!6IkqGx3+cy3t#Nk z)=pp%jNRHA=~)nCwYEnp7RT7F?f$k$DwfOG3$gp#9;sMBV=u(+Z+oO-NsYY_yT9!L zj72u~LhSyw$F(ARTr0B2wIX|5E3(hPitJYmEXuLg+a4T??7^|f9vq8W*vGd$W)|6J zcSZJ4T2!&nIVm0&*=Kh}_P|?Y54=S!?c=+peSF))bdfzw7umyfk$o;$WSMUKd7h?Cf zJ*cyo$zF)v-}a!+@+NyBc7NN0It!lch1mUV59%y|vKC?w>MVz{TieICJ*cxl%3g?l zeA|OMOQ!6F*vGd$s2AIVI!meSW!wF259%zgvKC?w>MXRfTig9@59-DCpw0p;d)an> z+k-kwvh0P}{cR8GEYh+UV)wT_sIzR#R*1DREa9@++JidFx$M@~PGD)5-P#&tSmtH7 z{y*w%4KghJvKM0Q1QvnWt*xEFf-t+abMRtqTig9@pQ*ES%wCAy-}ae0 zi^=ST*!^vvsk6MyUWnb__L({h&g_NQ{cWGAvjojrh&`yY9L;WRAK&(wIt$e7h1kcp zeWuQmHG3iU@ok@}vxv=Jh<$w9gF4IF?1k9Jw>_w{(9K$iJ*czj&2DWU-}a!+GB|r7 z_VH~G>MV@27h)gZ_UO%0IeQ^?$J(Q}bvUqu&Q>xD>FjFj=w?x!-P-DH7TDRXt=?v_ zo!$EXXpYs}EWfiCVjbNq#j{&mJAq|+c5CbCW{IBF+8(`Gu4lKl``aG9S-@v6#O`l< z^kzw)y%4*e)dA_{So;kX79-jV zu{+j&Lxtsu_CoBAwMTCjEZPgP4rFWfSi)#4f`yEBwY3vi)M&T1j&2q>+O4gfz+y+c zwY3vi_-MDbj&2q~+O4gfz=BA-wY3vi9BH+-M{gEN+O6%bvQL{?DQPdn?kfAVnYEMl zLhP=xPn%gyX)na?D*LpV^_A8_?1A_H@pTsPQC#iYUaU}Di@O$0a3?rH5AKAJgb;`k z!Mzlh;10o|SfIEDEtCR*BE_8|EiT2%cg@bd&=>fB{Cf8~_w$^YIp@ro+1Z`VEZ?>K zdhM@I&97fJ^X<#8ujK1f^Xr$*d>`}cEBX4={Q6}x-_ZQ}O1?fdzkb=wcQ(JilCMwA zub+?k7Ux%2^7ZRuzR~&h+Fu{ouU{YY9nY_?j_g!>1>>d=~y{*FQbj<+Ivfol`ss>T9j8^YuPj-v#~3EpHz5q_CCb z0j{oRlJceI&mw&B_w$JR7m+WQay^jt~WFL)r<=aDZ)gGXY0UgwL^;GtNb*D3o&qwQ^EzM51RjF*d7UrDho@eBR)@!41%!uK&kpV$>ebcCy17H2&@%3Pquh?T zm-O#H))RrfUFC3AP?vZLh_P2POUADeEio|5w&(^#5mJXS&o^mhNiBoNecs;566y zlw&`yuHJ!xUA%pII6@*LtS1=<@g!qMh!;g4SI8$Kj7XqgFpn|z2@mM!=Lqu)j|_}( zw5r~)B@bP2JvBNoB-mfeIK0Ds0s_2vlyg`JKME4u-Bq@CPFFo9+4ZDl2P5R&g+|#U z$P?5VD?b|b>1oQ&Cq?`Eb&2$+T4+Tr7zIgw$3l!GIKtO;V3Lg)sJ3}!rduylB27w40)c}BN0%5$Wh zwX9jk+~!lL3Y5A9gn5Io5NlC;;4}>0fuY^3RM(I|UoXavhs^U3Zh67lz0Q1)cbI=b zup=md4*L2zx9^-2R>0n{GsWcpPYv5yt^Qco?n0NakRE=)Y|Aes&`MF_8SW}|v)bbm z63GLEuN~~?=xVjU7t^ty^9kW0UR_1jPfea99^z$< zfQrsBQQ2Od%%@X=bE4Vxt%rZx4ft5%2L!?+e7*dAysU?JTVZPqBCH+f?Ql+bYv4jT zLex`xc^T(2>@f!_Y%JXYQLD1Pf%;QZW8 zSF4`2sF&4rhnMrv^9t=PJbWyAcueW~N;*Tc~@G=$R(OZ$3<^$rO3 z3h8P!*~>Z{8P5o3yK^}k@6|gjfbsT$vabKzf`7p7TnpBe3h&XPfX5#2(39bx=#1amMlFtB%kZ$vli1klYpu&dKJe0w>V znKaP(isA6-<>=armiVamJ|BA@sYv9hlW!=}4f^1pSw{$~lVQvZ`H>E>42;oPe8mj+sUHm=pAb#t#$ z?)6!fyPKPvyF))Y0O}jB#trIN+psP#tOSup%~i15`EgxstZR!;tL7ID*phQyp3Uu? zjGeK6#=!ai#ttXEYBXtNmC7@cHJu@T)xgTQThA|X6s-zaN z3jaxJky0hKNDa@%)tj|-&`Yn{jcYck<=MEdSBvU3$XdT0;^4;^yxMp`Llq>7i z;8Udh$0ENO;i|{Q)&CfGhjSWow1!zf^BCI%-T-lCbb*Y;8CY8?{r=bYd6+R zQngQEd$N43dYg|csl!qqO>Jvh)^1$OVO_m>g@pO~g*mXE)f;=&@T}`9HuP-Kf^kuz zqcFpOB&R7qhx5GIU3J2>Ot`%Bq~z7x+qw+> z_&X}0j^6wVh3m={+UwVqEK^AlXUTbO##~X1l64N^w=C>SHJ^_*(9b)}Wvq)0>m}4# zF*Gu~8@1_&9dMANHP#i5^H(y$UGd(oLRc3s{UV2THgsU=Dd+NFUtY|tpVT12iH9o# zFW<ZlFf#xl&7aN}de(EEri;r`w z)=P@DT+5p5Fh`JgpO4WXUSq9xSv7c3u@(sS>+QT=vC6zkSe5e_RlI=KU37VdSGBpRjykK~2ed8NxC;A^ddu7vdV^W_r8`b{QA+&h9<;v50qTG{6V*RIpf zbj^zYOa=Rzjdu=o->+w&BRtH<5y8bQ^X6miPqQJwx6h|A6U1r4`JJZ-UAc47?!1EM zsw^VRCn(h68BC5f{b$Z`#6@zc_GuE@0q3i!^>)C@gfrg){UUg8zzU2cyZ<)EYBIeG;nIQYNh(>FZXsQ1 ziF2!A-W*BJx#)c7!@jnrjU&{d{byY%TJxw&U*`|wu)Ni5XI*Q8*e9=&tj$^Ehlt!A zJtF`6PM^1=5e~nS)^y}OfK|UF7fsGL@s9A4)-<$!V#qoWgM;}cE%ps7;Xk+k4Lbb# z1lZHX_3@_OgE@M;R^ob7#-Z!{VWg0tAa?Xuqns<<%euBrfBsX+TD>()RyVEATc;H3 zjfV4*nYgucId@ubwylx3ulcMYa=s7#Sa7}}wreFpOK>oEV%+hCtk4xiH2FUb3pb++W=CrVtpv8=Tp{dmo` zf2ZnylEJ)m+i9znpHjR`e;)X_BA;>&pYmU(Kds9C!+BoN^@2|z zr+4c-p*h?;fFsAt`A&w@JnOJNlHdUF^S9pAIC?sK?NAp#TJ1db`RLt|Gvd1N`8Xi1 zkMKT?0H+M+A!+Si*K4}-6yx%Co!3+!7q&lzV2jLy zkDpn5{KVp`A4`1t5X1QajdRg{_8P3ukDNWX3L0SR(&$gxb5n8ZT?_yUxMRur{aOATSFBcR zFYAr6{Y#A2rxE`f;NVrj^&uSU4Bs?hanmEtTY_N`ss&vd((0&mqJ7tyfat zkVt+c(W_@`xF_5g&E-aRgcKZCN8fjvDF+>C)X1 zTGA0p?@5J*@*i@(W`&k=gqG%Wrry@CLvaWPb>ZVlf6fEW-|KU}QSmQnZN7XLPV-y@ z1cY~^JoDr0S*{|E7#ecoYV-hCZ`y~9K8PtmNGd3{!E#q7@;ooObmUC;H>65;NMDCvkO z<%r7ju@>(6i`!{FMr_}$r(sEqUembp0c=CI%jwFtl+59Fh z|Dszaa5Acm%^~e=hIX>q+1sY^wHfFh&sl$nn5(4iV?_^tyIyQ}n;yaPJ>?_iN63$s z7d^(v&lRiN>wg?%vvZgjY13n#UGLfsn{LrI@5tAae=6Tu{+)au`2;)d<)Y-jm0uyB zT0T}jqkJy0h*(OjB-Rw0ie6%4!+yG1zN8dHBQS# z+wstaHr*Dfo*1)O`6bFPRbGr)ru=f{S12#WtW^Fd$#;jI;jq+=i7h~2bAEW$w z<;9o{%KxnVM&-qrP0DXpev3^r-tPZn`IxP$w@vl7+k7m>>`;EE^1GB5V|FXQNBLOg z#hAUe58Y?eZNKtj%mL*ODt}0MG3FQL4=aB}c`@c!<&P@=oAP4JG3Adde?oaNCQkX2 z%Ac~CdV)PpapGgeV}4it)2e^Q=3_DDtn%kG-@`aTDUU@O5u<}KeFRHv4Q%w2d z%9l`HjB&Gl)MT3;6>P?e9u?(9GsX6CqDLj$o2jZNA1CioS#i;$ioEDiRbKR{CNG+4 zw)gN*T#QrPOjlmlYjN^sh8^#`B!P3{$H~Xdw&P}|ILBt3i>~-wzqT3$438g^JLE;PQ(iQ?&*@k#s=R2f$&2Q? zylC#)-rP`JG&ki%b4y+{x8+51M_x34%8RjsG!I~p-dU?@gkQdE&@}kKoFPcp9 zqRA{Tnk@37$to|JZ1SSXE-#uK@}enVdy`Xf(d3eM(N!*%G^OQ5Q$}7iHEnOoDlVFG^2*1_oAQc_rk0kkptxu%%8RCwyl5)Ri>8XaXsXJK zrkcFA7bkB#6c|vDD|DXlwBsHlwLbaIKPg{d z%ZZ&=t6l>;Zp6-O6>p??LoFv7SG=(u?;NB0^2TVnCR)x#SG=hmkJabBaq^~_*0(|H zlaFhy^|jIZMAKaHwu-yxinmj~h4L=nUfva#Hyu>JrSdMi;vE$iO()fFrMP^YyivPj z$JzZcUaBXW&hn!1)%v^@chMF1Q(QD%RKKg@qVbm(O*eVb1jvh~yS!+6$ZP#^@+Q!Z z8z1FeK1g0P!SbRBkrz#9yb z%~-`=~?`li3)q8T7Bnt}47(Rjy3X+KO*UNjTsMH3}2no07anJh1w zDe|J3DleL8@}ik8FPa(hqM0c#npyIqnJq7xIr5^JD=(UP@}ik9FPa7NqKTFl%|dz6 zERq+^VtLUlkr&NUdC@GB7tL~c(X5ac%}ROE{3I`$Rq~=)Eiali@?z{{&4aayi)Nj? zXkz3=vtC{_8{|dvv%F|F%8O=`yl6Jdi)M?wXtv6WW}Ccdw#$oVhrDQZ%8O=~yl8gI zi)N3!Xkz6>vsYd;`{YHlUtTl^v7tK|9(Oi=k&2@Rv+>jT|O?lDWk{8WwdC}aF7tNpYqPZ(CntSr1 zxi2r8zin?GC@z}6yl7s?i{_=g zXkN*S<{x>{yp|Wu8+p;Zl^4xBdC|O=7tO!&qWK^%8i&S9H1Xs`6JK653FJkSP(GO` zZxYFi<{R6ag^+c0WUNouXMUz@yG->2T zlU80d>EuO|US2dAiahJ~~@1pW1yW*nB zq2<3<+~sr1izb)6XmZPoCXc*m^2&=QpS+9Op2@GcXbQ-S#x+ib?Re~Lo2IDhiKdvm z>cz>M;;LUnc^6&r5_UYboANI9wLhL8d?Wo^cZ zQRQqOHPEha%G=%yvVH2oVg)VdqT*3QwA@geQ5EfasfQ_ENxrg{7o)1!-c(h-n(|_l zhw{~xuc5pcRa5y|%GXw2+l`Zts-t>!Rj;1viBUhOox|0BPt~ul`VCZHjB2QSBjtaz zmrLDP_2i>Q*zxFo-#9;KjoNSLm&mUW@t}B8ye2*pJ8!hx z`&$0J7;lfpNlYtd6AO!_#fqYb=qWZ6+lanmFL97KLL4tn6X%I5#Es$}@t9ah`{#`O zCGnbgOS~gK7N3eQ#DB#1V!T*;91@5r#8hHBF{7AG%qbQYi;5-1vSKB%idavqFE$aI zi|xgZqMsNn_7wYx1I3BrWO14}TbwH{5|@eV#h=AJV)Pb!T--G7<;BXPhgeIjC+^qs zu{tgrDsIFUVjHo8ctG_#%lnGm#6a<|>V?Wjh`%Y`M}B}fL>w-jR{Q44M~jce=i)zN zoYwn?cul-3J{JEG9S7`jOFhs&ul%j;y%s-+NnG{BOkysvkmx3s7d^y!;ybm|q3tCU zlZeU1414W%jZ*z6ai$om^I9I&a}#@t1I2OTTyeFyOFS-~7jKEt+wJW~X*;pvWAUl# zy%OJv3HE6`n`!yxHgmPG86ys9YI~2CHjT!ojo4Z2CWeaNYW?ZOK8k13xD^^|@5chl zyU9EBy=MDcW)4Sj`{mWqPV^RaIpmlvzgX1UOowi}JM!3XLmb;gy}feivfiP~Acrmo z90TlbI`lH^I4pljd?LOTJ0-MR`n}j!94<~2vn8_Y6%K*&JkCLG2$=c3Gt$MTf8r(No#N4U2G`&iuc7sVi$3Um^z)k zd^xeTI8%Ez{e}`HR1ce~N>}AH^$LE{l9YaiEwjgT1~M;uY~*td!TL zR~DPS#fjo_agTUTd?Y5$YA=^lEGIS*{l&rJ3~`D~Pl}ht+u|!R!S{AMlZn~I;-ZJxRP+%e#1Y~QafP@>Y*E-=|0*$K5!)Y9 z{q#MI6H9-_B}JWku)Anp|>E5AtFJ1<@n->5%{)t_kf$i;gDt@_9s0v4=Q8oFy(1*NV5qG#cj< z;@PJ5df$ktHU4GAdSY`iKp2~+HYOOq2f#N+ZOira*LzIIpWXaJuz!byMA%8 zh1gphC(ajFiCe@Y;$`uJn5vb%-s)n1F-nXU4~iGX%&qO^Dv52xG2$$7iMUSuOME3Z zX=AU)TMQA0h*QNC;!*Ls_)v`3)?QD3v6A?Mn7EzVEBcG0#0>52d|@$2oGwO-zleW` z?rmW*Ne}@_hM0<2ZF`^;zDt)cug#<^Ma>1 zN}MKM79We>cDDPMTP!0s65EO0#m(YD@s;>Nbkq5-rr28SA&wBIh%3ci;z{wk_*zV( z^I1-@xL84~C3=ZH#Bg!En90ZC{O2J?`PzP&ct%X(XUAPEBJW~pd5_PyOa7=hxvRaN z9Ac2TS$yVi=aY7`*+a|_VEg#pZB`J+iDOkSjh25X7FWEA=%w`>6Ax{^Jp0&VQrDlj1G$jo3Kct`{tB6_1OlBkX)7v8}j7{6qXxj2CIwPcP;Zi;Hc= zX`-9Pnm-;c2Cbrb`{ z9^xgj%SgN4ui|qtV3Zx7uX=42ucmli(Mt^fjDzKeia$-T*Y}rLa-!|akG45OJTDd= zW5*kbUgA{ofOtcEEoK~RFIQZwFHR6Qiu=V(Ad_l3C=r4weqr{V9(y8`(GK;mv=Hh7ah?d8M8Kg5)??05}vrMO1i zA>I(*iuq>S%heUVL?3aOI7rt?FLfM^)p4<1^F5X3@zgNuxl0a5JbSgy|A%9a6Ksl0 zf*Lk#)yS=!o12xi>V1QfqLe5V`VM7Bxluk;43$JxP)$@HHAk&cJJb<%MphI3P&X8a z!cio$UNWrH?oec%?yOUX)okljVNE-0*I2_m2Q5I0&{DJ#tww9nMzj^}LkH1ebQGOH zr_ecc5nVyo(H(RjJw(sYEA$Ro9sUL-MJZ8glon+~*-;LZ8x=r>P%%^*l|z+KHB<{V zK#h?>txyNl3HhP`)C2WI5vVt^zCLDs^~?Gim-Q8=(P%uHjAkI~{^(q^2wC??m!TDC zC0dQvpcu3XZ9}`zK6C*6ijJW;bPAnC=gHcm(LMAxvi_vj`myQCOM`f9NC^NazobF1+A~_RYe}i`r4cI)ivw(eJj)sbwu9C2l=7^)Exz) zFcgXUqM>L68igjJ$!IE?h32D$Xc=0K)+6gHE!J&&>#IM9&=GVL9Y=BK6grFkKo`*! zbRFG7chP*L)JZeZ{&{xQ7Gz#`k?`6C>n{zAnX49R5TqeK+Didv=*&LKclT^2il4Dqr>O~ zI)|>JTj)>pH+qU*qPOT@l#ugh5|j#MM%MQPa-#yMFe--JQ7KdrRY$c@ebg8=Lv2wf z9Uec7^6MU}>Q8ujVq)1OZ-0N=@KN%^UR_IFd|Y&WIed9EJ9&>(oewT8 zQZ#*zqDNb1>b_>4`}hjP8xC4^by56pvlb(MHCv9N2WFNoKVZ^dkyUCw=wFe1apKpA z&pMv3cO`rY{B?Zes!y6$>>ZiZ4SxfFFEG1X;Uay@XQ{T%b62l|UH89rjIBcbCIy0u zxKrmQb#@c4N^DT?wvHW{^CT}x{1)*&#HX!DJZ>FQj>SdPRlbZjJf9{mTol zM?2b-`8naq)pe7UqJAuO=gnUnHepZR_@(jt8a64vmspi)zl{!JEOx(-npK8)NP`uP zw;vqRVIR3>dyj?$liL}ZW|8NGu`3@fzV^CmHJ@_($=yn_bz}&+1C&GI@|FAFrT)u5 z-R4a@eGU?vlrMk%A6NEnc!+YNACLHCPSkYW=wvyHcK@@+vev!JZW=?mGTZZNn5Fbs z%2g$a zijM2!Q!4)okA&Y>Cw83JjP{8i)@}VT#Rx^%1Dx_i<1V`cgl4gYX#KsVo|Np}>u zk$EAp%w5`5Tm%n{9hGb`OdmbIdTaJUt|7@Pw1JVm8or$S(C43SHCK#li?5LM#p8!H z+`d12GTrcYc();=lI<${AWeJ9uTl-Ya^`Wn)XQ$?U)2F$W=*ZC9pU_um*TIzFwOf4 zZR>>J^)}0kf4B8|zkv8vVqV1BWnBID0_H_Dv9pa5Ca9MrVJ=zx_VYr$o5}J%}|d7B8_Ev8OLvwhqL1ro8HT zvT764{@J9=rApDK`=8t8P3$4tOBnZZlxKxMUrw2kAzK$>kBIg9?w8P+o}*@;9q`uo zF+S^^2dD0(*mon{lIcyJ;ID+u3jO}?o`VWjTQP2Hyn#o9DsD}Xy|72>r{t!1hg^=y zIltjE%A-?{pPYU4sa1p1wJnqX@|qtvF8M8!N1@mp2U^|ycKY{?2R~W!-I_+B-H%p& zw&=vkqbuV-DpsOMK-@6TLj!~A|51NQ?D>?X5BH({+nIBhr*xUxm-6Yv`@f0KmAd4F zRyVyGRPW!bAF-X}`@>zZVTXUZJs3NzLIeHiDI%nrkqlXZWWp2d7R}6nM z{fFvH_YWo3o&6GT(Z#Y&I-e=O`Q|*cp!)fiK>_Rh;#043$L@_2z#9ej%zxkWWVwWt zhekiolQL;Y;UJdV`1}5T&BMKBzOKCS?#l9Wl5~$tm3l&k9a)3P705ER%MZT{^4Yl3 zr$`7s6eVH#*_XrDbW2o!*C@9A);Igvp2RzL&)s0+mVku|lX&hOO+1X)82GT}%0wkH z7AW}bvTuj|I3UBsvBVmudh_Vtq}Nj|IbEjnIQ-gI_an!{D;(Fy8H-*+D^{)@`66E` zwpG7ix5cU9oCgaZWX$u%aguyr)}4k}hq3pAPvPH8NSrihrkTmpS}{{``NGZ%FZHL+ z_8m7&I$}BEm;B++10C~Ly`QM^(dI*HrYF{FM~_V}_k`!_I&5|B!0FHP>}hu9S;Vgm z{%t>bQ0pUiPfVP9xAnn}?)_`FF8JdipU5Q@OFcN%bZNWgzcgQ&_(+Sw6;F(6lIGkj z+Wc4Navp~sWtlUZ@{Sfy3(bLZ(fD|;66UP&+b{Dd&qoW;;W-5^j7f3%`8C>nx<|4s zna{i(`RBWnGor~|Cl=nnMV3q6EAub3Jp1_uv7$>oQ!T=;O}RGSP5kRoBT|i;H>tz1 zZ-)JP3%{<(dXL+%dvu$ky=TrCbZKv=iNjtTyuK>S)F*d{zv#2?yX+oC7X3*%cU^pM!Z{FT200Yu8L!$PK>b{d-oJ4KsU~|dAe$s zL-QYMDgZ zSHS<4W7~-<39lwuU362Xiuj}XMqlrrD>Pmu%7b6{T&@f!zN_n51wNa8q}b%Lehr59 zOvY35x6j!(X83nii6_l@tAa<*PHW%19Geo;iLZ~pmUsEYCkN)TQq-(JeKlq>6KXW_e=zRTP%Hyx`tMJ|CopgUg zc{Syq!_xgU_r}=_Z}DsJ!@3@yT*xi&P5*P5{|=kbG|AJqwNk$$x0c*{_~ufcU?UYIPk;n_V4@e+tD{e zi_AHS?i@3J$X@ab{dZ59o_W~CXT1g_Z%I5c>)+94aQm@?+6K%|mFv&DL5-8QBA$f! zpyrqVXifQB%Aq^+?QcUlDdjhH9#yFpb9L2|;kQ@a?pyj@TjI%xZ@O0CQ9H`XDW~ap zYvh&!75-?Ck1DaaWCwWopDU~LR3BcbBjwGE^PMEA%I;pBfiR(-b(-vi$y@BA7iyU!WktNyrs$zKn;x}A6+ z@h-c!H;LD&RnYQ+t9I=m7DOytrIf9UyxcWvCq5Yed(!rveNV5OwfR-X?bV0$%)N_v zy~Evy9XoOG>~6}F^Hi*LyFv5Ednjj#4C!>|(YlevzA1a@)a74OjQ&0MJ)hVI*D~Md zT$wR#o#V@1L`Q_ye{%L^^s6kyvZBntENL}u>&c|qC|4R*p#1=kVLs;>`wVH4Za&01 zllHn^^8)@C%FPyD30~0Y_~?uHOL^|(JWTAT`a4TZIx&90C1Q_$UOn&5$>MvD)QI}0 zZ`IzJj*#EI+<(Mna=EXb*z_y@3gx3PszqRztCagr*u9`^j=dZ9E!?;@>8hb;t`QsW zv25bNpdIV3Q-0vt`{w%+^Rh*8`}OS`{gZsRLFPMtT_*7-^Cx#m80l8 zVhbmYTXqkB0>2?+3!nGIDwjET|30xeV*lcIZw-iQkY(onSf4j%8Xb$c{O|LFi64+Z zN&W-*yKkd+9Qz~o_@)e13;sp?6!G5s_cXqmuE#(J?`eO>51ZY(c09`4S1g@TIYW-3 zr-_Z8+j&TQVsncX{5O;D;B-Xy(ZkEXJ=YO`cun}XWvJVUa#FTu4*oc!)$I>ImnG&!EO(|P0lOO7v3*_(0-%5I|;&FLS%|H^@Dl08bAam33CfyG zh^4}JxxKRD$wFN^_kOxLrp}$7v(BuED%$jL*u`b+%e>b&6f2Ui%CqH^$Md;FuF>g- zUadTA%nJMjya(%ENqHjW>XaWo_p9@?Oy-Wi9eB6pC*o1WYY^Z2{ps5N&k9ZNA2A^Q zD&muf*CamW>>s%&Q?5n%#foBX6{3rUr7Mx<*c4*5i6xnOx82ztySq=tXQi!wy^l^c zjq(MLzsqLB|9$f3jnnau*asyVCU20P*v^B&^B$(%^6W9O9Qf(6qc&{3IWfl*{DiRZ zzB!4Nu6+1N%)h%5{BW**;-|#FU$~%kF5=H9=Z4SW+eS-DT`PQ`&V;`C>YWRZ3jeNx z|G+%t&RiNf;cxdLGk&e^mF)%fW(JfgnwR+HQ~75vKh|!Q`^&+vUJ}noY~Pbrvu|_E zzrwE@T)5Z9Z3Fj=PMPxLKlmj}kC;K>w>$M`Kjhl8bG^xRzv2MO?eBK&`SM=Xv2lI! z-02(?P-h^qgO^{24}yNo#TjG%Z8Dg0?=y9W6k!`3FN99~DeJ*wUCA}%^NJzliW1MC zZ`34zVvUG>V0%M}7b9NmTDuK9pZk62My@eA2d}R^i!CfSjC^tO4R#Kn{N%^;Hx>?! zjqj1WL#_boHKATS>is~SJNIKkOHi*naYH;l@!`bXh&9D0z;B(gsp0IT-)3lrPlz8m zHndFt#bY|$`Tg3-=ESn4*z!Z?@a|)-?hBlJIbQa6ZOccdX+b>jNTrEyq6bcDNqH^% zwbh%be(Toe{^OrcVdvN3y_pk(7F~*sq1=UX|D)?XQ*?jZd@S4lxs+M5p16-yXHcUK z`uRdxG(YX#Hubj-|JxVCue%`Ua?>8qA7PI81>!H0hE*ZA z1)n5vlV?@R^&5@6>b9m&pK6rvWL|OVM8>cTk=GCT#q-X>kKFD*WA=9$V@C}*bmVEXz3)nw`Yq3Q!$uVL;v7>V_lA)*sh5%K{UnKpzDdSs zB(?DK<2qbVPI))mu8kj-cUp9%zy3Zy=){mmkMn(>HU+so8V>T#3x7@O$x-Td%G)mp%?{l6dlpUvf+>H?c~=)a3S&n@4;@nSA}z;P>MfpE~L} zpO{asX#>&{D^aFGn+5nE$L#*0!|Nqy(-DitKZxBQ(2zDYU6%S?dSXHBU(W$8YA+<$ zhnoa%f(z-M65Bf_p^NGEcV&3b(ri<=ro{hjHDO(?gneVqByINo*s%Or z!l;vvI=>&CQFGw=Lb=27`SIpzF!kuu}CDbUMRaR?-r|!iLerep+JpZGy$7;4W>G{?2YhbzErAPNKFnfE@b^n}e@!xEC z)H9iHm&eokrcCrG|GqTqh^^{ZDX zm1Z>_4}H-z#}M)b_bdzUO#e$RZm~Cd`O(*dgSj8kg3tZ4agTu;mk(3(nLp(Z-0=J% zgnJ|0=*+@Bvg5V6k64HMY53=8eFg3#cHv%9ChmoC-}OR8?gzEuo=S1<9W~>=67eK? zxQD_G(v>y%tlyh^Xyk7Y&rEzK@xu6L_`>)tTL=bOG%=%v4gPPorAl{Mq55#kn;eHHl=}g}G{%Pj2^pQ4X zWg8LP{oMo0QGYUZe{1M)TxI^LqWe_lzFQUALF@zl8O>P!MLCdh3t&5)x#>KO z@f*m^c>QZ7vVJ@>Dcu%7bx?^sV=IFx?A=cc#y9nNjpxi3e| z`unwCDPL&iaMYpAt4gz9@TKTiWEI-SdPjGpPsDy?jNilNow+BLgL_&PxR=(3w$X>j z(3^aF`k$Wd$8XC$b$9Ls(XV1`KRtd4ZOY%6eMz}^5cjiKPeImE9`8+m>cf__XHXBA zg!`!YLG(M4x#COQmsl{dyJg8SX5qxrF?XtG;67Uf_mNr?qfTY|IfQyIm?OieGmKa~ zH~N&!;h02uMkz@AVI_XQ3E!ChHDev?DCeoieN4O$emDMTTILkxsuj2wjqgDpe#Bp* z{D%D>M!%=yC$p~Ml$TR3M4zWqKF4@;&&)pb=bksdIQzXn{%Kdno%L-ecA>h%F^*U^ z`u`h#9_5~_w1mp*@&hWn4q*Ub3%%z>Sh zt1-5P@PkIF-;-a?_?9D=Gn6(kmUSrmGFCI08*WwT6YEdHTpvN-`!wZV zWOIk33H!7y=a3^Un0LvU13kHC&bIS0x4TeoMF0P7%YEqYIByvG#}_EpGFIK|a$l4F z#xMqXh#ewd8lHoHvQK)tvwi#q`gx3fa+i32#;sE=``-T~`rL;6C33IH{m8azbDVW2 zwu>)pOrWo++21XQRiLi}hnxm}Af)$9^ zCYCxq=OFg?5$e2S*@DFKF-JPF?aj3LYDvEDKr9t~${a*r>GOav<_-IB0(0{Y-i>k% z)B?r#;d>&?(UP<+F?~7Il2}>3KS8c3<28|ew~2oA!3VSbq!}4EwlfC5j(xTeUyi=a zrVsC%abC*Gu}lA}<>G!jZA#2o=cn)W+3rx*Jun~JW6q}t;M`t_a})iTOCPMi|Fgb> zzkt4+r#y&0e8arFPx&p1rZ3$abH1Yw$%{A~A?%M0#IjSK%UB`PyZ;~OwX&*G;O zuZEw=cCYkc4pLsrI4@v-v|(Q^BkxUY7qPxQSs(rDPM_MdkA5SThWzWa%q7NhBx7)} z6!+Abn{S%4@92Z6$G&F2O!nlyx*z*DfO*1p>aea-O&JHqWFO_fJ9Bz_R{Lcuk|dXW2Ka3lI-x|1!r;vX6G* zYo+1*1XFfr{S7##;C=dEgZAb~#@r%j{SDG%7_T7nlQuV^z0p;9O~=n;U*=(*4~@f- z7hf8^YQemweIGa$YUBT4jMCGV{)oHjLquh4_~j05MI&Xlhv zrLDB>5amO4*;n-AIAi();~Ppp%QAKwX#aNF9-N0<555xt!)R9&`~j|{ucw+ackxs4 z>8!a#c`4u^I|8yOKZ-P^sN*7%laGQp|trl=f5kIH_?|z(D}Dt91FRbTSe$YA;uwyJ{+#V z93*~#@v**7^qzI*!CzvYbxg(_qwGsx#?zNyIgV@LSJVD?{`5NynTs6e60@4cj9=&FTu}bzg}oUUH0WX_J1|{^*gyuG8R4p~0EOIsPEF8JQ~v$Q$1 zA+K5VBOCn>Cq9b!K*r%Fb38xeFr3&dVw0%To$;H7{|R5A9%IFLyk%_WB%s~Iv(f(v ztaA(H0&tcW^MZ0Q#<4NWwxa*FiH)X>7dift6vH!KN$6*N`Z=iwudT!iqhvmuFBzXo zlnvw4fIjX?&T&(fb9fGpp;qh@`~}Kgm~%bQb$n*#!2@Eym$1K+_LNwWhMd2cXXiLK z4q-08BR`-1B}l=z(f$;)F+JrR@OfSOO?f!mEldA4GG^%*Hl`> zHDlaLu$~kZ+28d0C#!xf+QoSEqpxW=myCs(yD_g>_BHc+E`A4dq8i&+L%D1v#s?;1 zU)N>X6O{LGd=95ihuGH(SmzDK;!H7?ug2V`ttV1&t-*e|1}jjvUm0FI@#Ey*qN+MGNW{U(+UA5GgM4H6T8j4ZcQvD{cU8}zx25yo2`!(brdeV>P9NWZpj2%wYxJ%VJmWhyiTMKVO>p`n*}&8GsgbJ!x@{Nw88q0Z93w8 zh_z#X)ndQr!w;{+x|tib7@IQq9BjXGW5z8JW$Kh=EUfR2X5+lphjBR1IQX-^#l-3| z4jW*ljLb*+zL&CB1m}R1ybcwo{ft9HavvDmIC5i%*P|UBiKWiQy7M!B#OGLX`m~l~ zCYW4qa&^hIWqclzx1O_o{Z ze-mqg?}ztg>?Uw*`{Bpp6ERkM7_+p@wO+)mzjw^xLmQY&D=Tpf*5);scs0hTZ*lf3 zBkW|N2yC%%boTi@e-6~OBs z`(P3AX~aE=ooAly;h1{Vk@HUz#wI<-BKc+3y2;CcN`u3spRX5E+Ta$aYA=B1_0 z#A=}?jCJ$)%q7aD*>)w4xm%&U2cQkxQIW13pS4&g^Q0r{O1<6Gd%`wi*blw&=M3|L z@;|xgGd>ypE6iA(59PIz@jpfGTiUgncDE#U6Q2eDuN(WDy3g@N@cme4B>Qt7b2XA} zK5xwUXJW3B8&15fH~S0U$Xd1s*LlRcG6n^SHDwcx&P_8MiCs+AwZA$^V*^_gmz; zk=xJM{Y~y&ZN`qdeT;lt=5BNHeaXKgmnAvN6aS_)*IpdMFWb|W5aud%#!zP*eRZdO zk@z|I$%bo7%E{uIxm}f+6ZmEcInOW_r+g1~zt`D-wxZqW0J8o@Ck~xOm(UG# z7d=GJ(HrE5&)h=R-``k&cVqp%O%9X~6-I8TEV4ceuYu~J#>o1cns%r&>WTtU80v!t zq2Xu@vi?rSdY>>CEkY~MTC@>uN3rM-`VE~zf1oSq7P^lfqnGF%`iA|V9Hm9pqsguL zkPlgZ>tcOgQWjZ{mac)U*OA7^dQ_$L_br`~b-V|nFw_SPLc`G*6oqD^XtWHiMjOyp zv>P2jzoIx~{k@9y%*Pw(E_#Tbqct6iyO8yFB}b6;cO_@gMRXmx{;uR1<=5x~O2q3xGL!~o zMA=bZ^gSwp%AiWf`dgB^s1a(8+9EIHhkBr%s5csjen6wqL^KV}K?~7xv{9-$ZLEsDoEBQZ*W(xJ>KC(4hCAa_&_RY5h8Cu)LPqV~ue`J*5d zj{2g(=tndbO+qu!JhT|CMC;Hdv;*x$N6|@i4qZk!(LMACy+ChKyu`EWc=WAJJGe3C%$B&|g?lUw%O;Kyq5n1;Y0#FEwME#L$t=y1xkl9qpGMDs*en6g*u=vs2d7Keb68@9F0Ly zXgab!TVI4$ptWct+Kyt8^%>f4=oI>Yq`eEAl~eowzxTc7zT30s+)UF^XPwlZN)aY< zW=bk#BqW)NBupU*Q<8+~fFx6rB$M-lXT(EJ6Ct5O2$N$%&WY#u{#^GSmB#n`{lEVE z)#sjdU+Y?@YhCMF*E;OoM(`o10bc>FS$_sQfrq~m1DPNX$bV@G+5!EpYj@BK913(+ zRRjir!C)vD4n~2opcG65SA)C2y;C8SO+ym|h4}&Mb)8Kiq8fcH;9q>N* z7<>-C0Y8A>fXhUOKo)2Knu1oKJ?H}V2Sa#1EYJWn1+74P&;@9HaS%8R91Z${ zf#6hd1~>7N;4E-1I3HXDE(KSDDd0vh2iy)8f_uRI z;9(&D`e~rw$9)aF1>OZ8fi2)`@ICki`~e((bSlUK4M0=S3bY4Z!2aMMa2Plm^aTUK zso)H74j2uzw>BPJ0j>epfg8aba64EC?g96MhrtuzY4AK)4c-9nfcL@2;B)W|_yOol z?7zUz#qR(OKvU2PXuqQi*dH7O4g*JnzF;8G@AaMm&H~e ze}SjKbKqs5GwZj&yWk_R1!&*&d+-a;o}tS_h9CnOF`-3CEaiBjq84LkB zXDb0?z{TJ)Fd0k*+6ONOw}J&=F<1s30NVer0?&e%z#6a)Yy{d@`vPnOKY|?~!ul%! z>7YJn1e$}kpcCi{4giJV2yh(e5A<8ZL%=Xl0>*%g!9C!9@Gy7+JPn=)I&XdhyaPT0 zTY%2jzX!j7KR{y^TrI%9U_USb31087AfpuL92!Ah_S zRD;*S+u%L08GHt|g6-f}@Fz%N%^wHZKzj$xKx@zeBtQ>vFz5r00sX)rPz=rlBfxoJ z9GC!fZ>S7R2RDJaU_Mv`mV!#~2zU}a16}~HfVE&f*aSWSUx01kN3a7#8lxj19n=Sn zKy%O*bOK$$0iX~Z0d(K0KR6i-0mDEE7y~W_mx0M(DwqMv!L48cSPYf{-FtZqRDox~ zOJEIH2R4EaK@Io{dy4^)69 zU^#dQJPuZZRiGNY4&Dau0iBC{2DXBq!A_uakQm4Wd7ues3EF|qpgZUV4h2VnA}|09 z21CJcpfioJpcG65SA%I_CYTN8feNq$EC&yP$H7XV->ZHNyanC`+FRZNz6Rd|{eJZy zz_GcJ3iLbH4M0<%y-)p~br-NdI0zgDjs|_fKyWHJ1Dpd!gA2iUa0R#qXwULSFbCWY z7J_@g{orBn1b7-e4_1RWz&qf5@GCbOK$$0iX~Z1NwnMpctG9 zMu79cI4}WB0%c%2xCzV!^T8sZv(ZZM2zU}a16}~HfVE&f*aSWSUx01kN3a7#T4G~B zI;amCf##qs=mffg13)1-0vrbhfnsnb7y-@$r(29q0_YgI?fJa1$(&1A{;@I1`Kjmw?N`Rp4511DFMF19yVE!F}LC@GtNm@FI8> zya_gd55TA3OYkkwy@}sJv@K&3WPn`I7_CPw z3Ah|w1+E1*fLY)+pflRL!F}LC@GtNbcn-V_UITA|cfm(s3-}s*4}JlE0G+L-f-KMg zGzG0dd(Z_80y=v-6N~`ofpK60m;}l|v>ojQ89--mjX?{rFW3)s0|$cM;7D*hI1!uz zP6ua$k>CPw3DB9rRp4511DFMF19yVxJ}x%}f7k25U*=(#2>+(E4gdP06CdP<@AY!S zzp;2oPgQ!-#Z$t+k?5RL!x=l`^*Ss<#=4mjaTOORtd&{BlMfK_mUR>TsCf#HI-F<9 zIXoiXc?am(@<2T&i0)0bXRJWs56;!|OuWK~yYgOzpE3Gu;~CmPl#)aBwEr!`3$UXR zPq)<~-qk(y)GeWix5)S>DjzS;cjxYg)gjXtkX^hU@g z;*DU3BjO#As^^mKdaks5em>DCmg-PTb)xaSVzF&UDfXzIddl~Wc$!%v-caMwEjDD; zUeArj-=mL(MfdBSQY+N#0`?=833Nmfdq14Pk|Tf|MdOW`xDZdyx4yt(S*;Oxl?ml`E*^(;J8 zlrp0Rtn`yBFY}j3<;TU^+F$Uan?02|0I$O%Xg#M(ZzpR7k z%`Bz1XE8X|Ol?6%ykm@_tG*FWmvtCkChn6&4|P`wm~pN*W0i08xkkUh=(DXO z?Y|T9R+$VY8vQm;X&*99ZS+#gKs`UR+S=7`FJUGAXp}X^x!AhEv--bgo%NNJ(LHpj z(q= zlEv$KFmyNldd2=KPItgug%7q~_f2B?mj4VJLY=xPcAGtioB0`)Bg!_-nTf8s2iMT*lwy6*|f=qrU@nOb4 z&Nyqt>1wED#QVf#G1g*rm4~5ga{0>oMu!4SbtdIW#-l4s5pSpHZr0U2qg!czI96sD z$IsHW*w3}pSm`OriN?*ol^AbgA3d|JCv;(i7Ma}hE&PIo4>jqxG0Lx2llXq(OtCgT zV&MwwmEmT(+F8vXQV)4mCi(itxv7sRZPhDokd5`0Mo-wYtL4Ad?8Gr9)t98r?$*nc zs?c}})jM8b^?A{Z+S}ssiY)dM3m@x5c~7Ny71l@dOsl@L*lg>g1w9ly%=+a|(W9>- z7j520ymXV>y_QQa>!GnW=AN~d&$T|-WMkqk3zu0LL#$tqG5+^#d_Q2Z1Ntb>lZ}4O z@e049(cnF0vGa}I$NKmSOO$HkeWyl=8+fmt zKTZ_oQXBnUMiY*vPiLV|zR^y#fn$>aT#->q^I(P2tTNeO9aVUpJr}9>T>L^&zBp0g ztWt&7nv5PY8JAo8KQzk4CfBVN-eJ#|q**TO4yB4&kLBC5tvv^-e%`O9FK1f&yP6!^ z^%4CQ3wJlpV)d~5_sya&G70uEdUw^|+pgH?jN(wYqqo-vK1l{r^?ygCzA#q2{ViR; z{S_Y9K+n5P&X1dHOHGgeY$Wx-Gq6y8trtoNNsWvhB5ddWHAL>w)v4J@k-+O5vGp^c-N>T`nPehwjVM|C~Xiz4%CQ`T3&u6V;n0L8mM@ zN#P+z8D-CTM~bpMRA~v?)4BsQWeU60Vy7BqeSgs(Gsypa*VQt{2WFU3hBC$Q*i)Z}O^Tb?*#n$m% zBw9L#O&1j#{c~|>5u*+7P6m3`22M%_@X>7|m@E}=m)*%Tm|@ahV4i13PxKA5d3yOa zZLiT_@QQ3gdBPN`z7!|g`IxZ(qW9j$f-g%Qpr2aNovCsC=^Em6?FGTm2nDzNtVK;{sv)s@Ka=F(iT;D`H#6-KFsg^b( zB3_MYc6|%Cv}d(h)0vW=7q>3ewnW5jyMbr)0W6}9@FHG!6HcL}DYEA>>!$i?76 zvA(D@)gECy)2yp+?L(|PjsC+uHu|4>MmHfP9VX&B8#TSX!qe3s-bxz+HyJ&}dO}}W zV3s#Zg-L(2R6RQ5mhf0HdV6hPX>H&!0=*eC(E-fYI%Z@>umM)3{&aWUE6QZ+k5xSt z9@3m=>V4=x3vq?LS8RxCD-)Y$;h4$n8GBAO`e#N@H~Gyr%8#N%^+ma`eT$6hS=~FE z$@$Kn4;Ve$=-Lj&tmX1dIp#QpUopy=CXY28ptz&%6kQvocwweBvn40jahje7GPv;? zjNbZig~#;K(=+|o78pxLliYTxmABp~Uu&d$H5T4(TB!{&M#_GAmLJN~EkYrgiA_@Z z1qw&n=viR>`%;u}bP}!A@dT?7#YNv?bm=NW#2Xa$pQZTFbY!li7yr*_#dZ=sb)v>= z(DO=Bew9wRWpfpNkq0f1w4$dayOSKPx4u)mg5!O0j8V;9CjHD3Rx)(kDtJbx{nZCO zOpc?RIM!G_UspMvjzCz|Sexy?neue`JraEqX@;9L`KB{R^by||#$9UM`eGexw3GGJ z!3oQ6qsP=&-UQR&mnB`dyhN0grh4jYa}jsL`3m>yrRTA#d%c%rg}wU5qpeIvg7v@( zf=J0^uOk@xt*f5%rTt#QC_@iWxX{8i%FTOBa&}YZDXha8Ms^E5=cq5-J4Y+L!!-6d zqc1QWoNr^gSbgpdHu`d-KXa@o+DMOhPa37Z>5=`nWZuO_f63@C9U`6?*2^nRi-)Nc z|H%?M*{t-{#{IT&Yx|v5g7xNN)1?JQ`O5mL*sRTRqii!By7PGPUoMHeq6G?TlO7AK z9* ztUtS(j3tI75KlN77V`>bX)V%^GP6u!(XN5W)$nT@3( z#`B|iqKOM(jDu|iFhUlk(+^b7Dlow)*+$uJ0$N}q?{1YGW`dt;JUSzZ1ZAdZI`d^Z zwN%ITP&nO$zR2ivO%xAUc&s&Wv4*s#(_jpZsn0y4Z!>X?kuYO5i<8SG_u@_Bt1`Y` zHq1w8XnL6g^{h6!cFS=;%?Kx~-s_EivgmH$SjA2_SkLQhK$Tf%)ELijOS{R2L*y{= zykO7m7CX*j2Psvw@nH7+p+>*IG(3=xUV$zI`A~*k!B(^a;~3b_!IRoyj7hIw~dLD1|5>Z^s zc|4={^VIE^=$J(jyGEV5gg~l)7o>f8=w@}a$ea9+XZ2ED8=|q|FuQ$1jGfrdyPr1>rG>T4| z(NXK*8Ah38l9+6rJ=OH`oD%WeX0c1dSd)ZCC@S{y0^URP8HXfZg;;eFihB%vuAC2(#Fyx%UL&B7}N{I)7+%@i9Lr|=`*ZH9y8t8WYQa8 z5=hS!e=i&UjTMd_eNJ+TJG3@1t2XdNZQ%W6Ak`m1iiY#UGc@d=O+m+4ZcSP$=XRF= zXC@zg7mM*Ny8F>;rCX5^udB&$xWyizSg()KKazah+2qbtX06_7l1Vi!8fW}RwN&g0 z#^1+fu6V;Ql;QI*eBM zChO7ZrfnC6y>7C*)%Xv-Ts-OZ^!&v1a**ZU&?xP4p{GU%^C-SfERR@6x3dc&g1D&9n~bZ=JAIf_GoeQ0#Ik zyf@8;+hP;2E>~futka7u&woQ;pWNunjNZ;_^0rYPH%bqq9ATU(*1b=5Q7T=>V!}3_ zBaG)s8&H!9p$A9Wfc?&R))~(L;~8NcxY;OYiW01vtb97yAZ=}O-e$35jNkr4Y_G_s zjGac`WJ>h84UqUgN;}>9QP+O)-AuxbjJ~5Kl+?%QaLj_mMtUjyN{*hfR(iTDp6;#N z6rOGUm~Zq7lWn$Qz2PR|W`h)NX2Ybd@ocv6KE|U<7I^a(?qgy5FTuUDB!Bnv7(K^N z;Ti2(%#)9+7{}8)(2{(ZAe?&bsiK_MThIQM$xKs^ql~Aex-9yRcof)L8*s@CBi@yc z2v2u9BHlntlhKc`J7a<<=NbJyDT+UABzL7^qTXbkd6~r>W6FM$b>kCKH&=SGcn-Es zd)^fAyQ4(;(!S!@%FUD{Ig{~FIS<2hP__Ric-&tr_UgK<7)oTIF3 z)2zk+GX7HQ;9l0XuUo3^HY9X=l%!%2!PC=S!-%)l=zY}3(Iak2dUbBwt%@5f4p(y-&-e{y@9rYV0?_KZqo=}? zESHDWi(cCfdg`7c7E>x;?>JM^anc&MaG~haZ76(YgXw^TD7PBrSEGzGQ>`q1T1;2G`4xY51jXgxao z3Iz@&U`vZxmq#K~MY&~Sa>YC03N9{+QbjjifrwYnPMsM3&l$l0pXVTF(4Umcta|`ST>jt~2@=(W7ZMgts%@ z!2}}S&0Pzj2EUM>w#yQP~aU)Zu*~VXasAAh1zb@HDJbhIx;=OFDt*@V;+I{rwUZCe< znd9I^lSOw+^^B!j+7r4Pc)NJ|7=4Y=ci0f@FG|W;JlI82&4X*K0~YrdMHiBpF7$No zS`J@WS*zNM{@%%YE;lnVR;74vTc;LSJ^wW69b(~0QmN=5!na+|-{np48Bcs&>Bj|O{CnY_ zz0w!e3nL2tA^qi8F@5x%>72Bbz0%tS1;rC{cGT?^zdXZ|Mq_5C zLgVvK>5osw-$l-E7W;eU|5Y+!9x-*vN55gJ&#(UwZ@v-n*Arit{8#2%a@!cIEC1h< z@z20kSNeZ94AT$!hx~J;KzxQHr@GpAvW7dK(~w_X`LB@e=X2dZw9hWO5U=m;*OlJX zoA}|x^9i383?I#9KKSVS`F!?@@6^@kktEw*@wSr$%Rj|WOQvV!>$6vSyYxZC98i~h z=5$js?wqF7-M&UL?tGpO|Lm3jJIVM1h^Z_8G!1h;jfk(S|J!Kj^QjE~?3Mo;$@nS6 z*Ogws#iUP+ly&vbkVC@w_rjd_%D;yu3qGfXfA)&MF&SS)d|mk;tErBUW~936HzgTA z>mTZu*GH)%kwu^``|(&GBKY(reO>YYJv@wG#Gkt27akGDw+{d8)xPJF@iVZKb+xbW zF=4_T&Fb#o@)2SD(f^SDJIQ#>2z>S`KXz^y!Q86PUh(@SxzF-9xtB^#&2Em>&ArfgZWdJ{5xC_#wUmAUhOMR#wVwtz2eVI z#;?KYtE>D@cntdJ_d)8KAA+P|&~KL1)xTYF2lUb6g3n&%KbVZ4`VaB@PYNTx_=otW zSB4SA=vQ6!yX5LH-XZ_G>bE3WaLbTwull`^jF(T$XRr9z|CjXJlJS}UkbY+}{%mrt zOa5m}3lsiR`ty_Vv47B?OQ!$N>90w~>-V|qDt}9Pn7-XV)IV)j7;y#luggA7lhe&7 zX-4;wU+w?-UJXxO>1+Q__lcyetN*-PEc?jw{~*8G|8qU#AL7^D7N*}P{Igg6YX7hG z0sjy`U|tv@|ANn6=`(K+Bec!HXRr9$|BGE~gu3ECNv4+>txG;_=UY0vkx*Cq+W*77 zQOLGe`L+MI`#;&ovSj}Mls+%aHxivVC=$IaJDQzdFIG+|ZJ}e*BUgX>+kf?`^`j$) zXJ$|Hj?4&-p2CO?`Htf6@85-d^0Vzz%XjRQl$+pGelmso{SflW-?mRJ-x0g=n@hxH zKZShnCE5NeH~FsoR)S7HhkWwC?en+%w7RGP-F^-EHl6-d&-Xp)FDfMOsH~!Tk)w2ek#s3ZSRonL9-%alFK^H}KSbxi(|0lj4@J;nX zKKb=~@Ey6UzlXxN(}jG8CE5Ox&u-=Fx1@4YLcZiU+$G1|@~edJz9gUg{XNPp3d@yz z-iGgeKg>^l{~mlN>@A-Z`hII}$gg$49{jtN-x(Y=SwD2|1E(pze&iKTqo?3&u)Bc;M>tOg4+ozDTqGov&F6 zTMc8Z>f;@Fu&xwgbkOcqPsU-d@JG0 zYaj9@*C%!McMW_;C;6(vQg`v~rr-L#%neDt!oTzFCYK)YeVydfy2U=V@=oTbei;hi z$sNP`Eeg4Im3!=-c31o};eR2?ul0<5YV)mweMFL`Z+|HS=5{?^It>*~)u z_H>R<@@d^;pW1rt*1kgc?oWjIY5lVYUmbck2L5OJh5Sb++3PBQE_@#(`I74*e!yY( z-Vf)gmGFI$ zCi~RN=WpX({PIn=CHb|E+JpaZauWYs_+J|s=C5_t9{hFW{{sBWPYU_9&f0_jZ+fG4 z>N|mJll;kb*Iw-uUo-aZHYWK{o$yoJ&g84=dlY<+C;7AvvrjGG-|DM;OW_}MW>{aX z%l6>k%^z3*Uob4>)B0==zTL*HzS0#tJLF5Q)9P%`R`||J@=Z-o@zA-7vrlcgf74@?KNS8u&kNi0Kjo|6 zX`7Pd(>m~f%U8eKcKVqAJ>O069iHUV7~CV@I`lF{!XuYTrswHuH8eR;(Hsu@mGZPORh`nEO#e-Wl6pxlI8r>-@D0O zzg@o|$@kYhQ!Dq~>emmx+md|A^=6&r>K4^?|A+h*z*k$pf6A}vsa*7k#3FCfZ_#M< z_sk6aQ749k7TCN4)WV(H35o-#k~p1RL4d;lmx%w?Fss zzH9Hg@`{VUO1uCu`t+-pT-$5Z?N@&D%TI5eF?`03*G2qd$bq*tsrsSChC`>Exghh% z8YPdm*${lvvq_s1UORW)@keaDKWC$eB}eyYdgvQt4!9oe_QIa8wN2@?cu6#cf=<0K zTJ`Cp7d}4hwijJ|Rp&Axu>)?(k|&pbHu_&2&WfaqSj;?tQI4?6pmYcH;s z`1sVm*R>GmeaFA_+qh0G>g_nb`Re8?{4E{C+3@Zy#oj@$7j)V_Z1w6RSKQHE#5X=F zJT>>ix!>*hsnwE)-<gis-{=MT5KKYj0>-}`>mhtnim^i=X zo0reIj$ykerl|h-ykUUz2GT7^-Mnq5`Mj4w4W1{_-TPxkQcZ+F0AlV1NVM*V!YqXHQVm< za{$TcHhF#|a8qFL0{3}#Rp4&Fu$VmD=Imm>=`b=b^i#|H%z$zT#)CrxcguxEl;FO} zF7s1eZuv+*Z&cv^7+WLawK-+V@b|H*oGZ`q_K*60Q0TrJTjocDG&egZ;Ugti>gU8` z8v<8xevwN4G_TAL7E(mQ&rGPUjR<%JjeKt*S)W%)bzM!KDpo^XM#51_{=NMmw$iUZ z+7E8_(}QxK7S|^-gNgdA0sw}5^i^#Op zZy0n9+z;o`LU&_>GJoGvKb|1Z0+)M5zq|_kCWh(BDU$D&o!OCj$3CUWLRrA#iI$@jd)^@gc+p?kKMyN^PxcQ%hE? z@N-;~N|#zgk+J$TzJSOwTHf2QAA9#SKjUU13Qep@3DTU@vY=W5%ksKMX>Mbh>jhLO zJvhzJg4-($+$F_9dEj-)y(=hpPn_>{q4|M(h2Em2?(y>zD1cj^SAvuyZaJ@6f!mN* zf=te-3`M}GJHJHajgS%LGTs^o?%g~ob+RzXOV2Mffqsz3dd~fOQmLOF-{7|jVntNC z?{4EDmg_g`<~JS^xR1xi*88!*-G$nrhRD5uzp>Jw_X>3PQiv|2gmTB0SkB9HknVb3 zP`7(>$`~?ZOVvS3bBg`Uew0ENpyMgUN%6mVo@wtx(v01;x4vm_V+1}@(w5Fj*rk3h z!p@65&A_Zdk~xxiDK8LL5G?XtFw4($nMHoKORX{uE%0+0CJ&$-fm_$0$Zy3UNYEqv zly%@%pdxhA3k@nsm0B9ON0U1Do$1`DQgrT_z%79a+Xt%VwNLrE7>xtTB)16ljg2p$ zO%Lcc5h>=M5XRw}L{YuwVYW$wM4QiiTe zD;Lq-K`)?2pCS2thIVtQf-9}|^Je=QvBNA~9yQBwjlK3!OK}}37(hF6Dg!rdYzcv4 z`{XeWWOdg;Pnh!gSv$T{-E#%PAqYoLZ zSLlAcpwblZ=K3h$_qBNx2ks40QQ>c?aKzn|;vL9{j>o3?S+jg^JVQG5K|k+Ha;rv* zFmKyOo1AXW-yXz@DeihdSV0}QEIe9`a`W=ZZgr4wpN~$UY;L|W7AH#VpZg3hYJW$V zoSWIB!x2}JAFB!6C!;H+bjx$e+K=}g8KhAuWahBg@hxGM{8Vq>2EMn#&s$8bs_3+l zs8C6)z6Sr3qpKx?SM#yR3n@qydyFEn_pjxnT~7sxpa9{GE^}|>*N}DtX%pL(^dXX> z0PFIrg3{_>c~F{&6_%CA%aW36_?Y zuNT9YlQ4n1HR4fg1Oo%X5(yrGBHp{nD`1 zve9fkH(JC%J{LpF)GC|P$W6N{j7GYDM40Q{Jy+4>oMe?hqssHcDl_5LQR5u9KEkZ& z?!Jn`8=?HoDj1HDA{z+J(1Aj!>6eqSuDOD)w^>t1?3Eb3BTRK-t_-y>MUXtQnQ69^l&Vp8Hl`gLsMWiZ zOYwc4h~j@-i#aOUO{bWV9*-gdHzwKU^^;50qv2foI&Gl7Pn8s>@Ml%TYZLXe;C?rtN|$$QM75Zp?s?t9jqk(3Ck`epvxNQmn*pf<)lY!RWSUR?8_Q-)?>{hyBTco~ZP@75RRVyMwIg>FvHo zXhQQnW0g*B5@T;3(Y`;i*w2o~9<`oYepNYYTj-WwRj4^>L!^cQ!8i>@VX%6TyfJ0e z4~ksHRSEY=MAO)*)_;u?ZsApOvD|woWi}j3;dn1%&T+ihQoCEPDsf*$iuj9H$1F|y z##D8m1cRhTX}7>nS|V|3!kBr)Q2lQsoIno?TzLApAt@V+TWFx9H z@_&vbNRW!Wa_#RHEZSArb1`BxmS2S!@LeOZBD%s|dsS7~9W~uF$;TQ=M)#y(c)vfs zM%uNtTcHiz1_{4mq3uTYBIu%7l%l$h!8B`ZP4y$s_>E@K zQKjzM{-!NEDJGrjXO;M^(YqqQ8`G3b!fB{8?o*+ERKV3~II^)7MQ&PubLX$`UdVKd z8fb-5fRIZ3cyW>Y`GgX*!p-d-t75J$^*iw=;kKT@JU+jBk>82=iTBU+ei!du!uOB# zUd?;g@cl`>ui5qfnBLd%-Xn~EK<^uO#V^zQCf+-T@k{jn@virUdjFdDf-wFTz5l%H zeTLru*u_6Z?>FsVvo^0PIdSARN z{zJVl-Sz&S-k0;P^$q#0*ZTwem)4fQPVcYmiho@1Yk5z~;~~AjQ=4C`)ZO1tD^a%| zQsgOAveZx6?(XYXslM3=F@{z&m1lh?ktLe9@0`rM?Pm6`bU&gzn4{@lx$n7OudKqt zmZxai!YwTE8=(Za+N>Y1)I8X{%5N~<&vnzIRSXMsB$z_MGA;M}4f`JAXI{&y=#uSB z8J|tYk8rp4W902GKG%6YzN37sulnN0;&FY@0}d26Hr}t_m(lS-1cxE+)-f|_q;KzA zBWLsG9#G}O1vukTJl9hcivoIWbBULY8OhwwywRBzgxg628n`>7RZn0wuenMS;p(W$ z$qu$yt?*_@5}Sa!GTunrurHk7Gi7G*|C?b(n11l3m-WO2#~s*MRHDIlUr&7N6*h1p zZhetz2usPKe*VFJ!)eSJMaYc`_GEZ0B!7HBO-JiU&1Ca1nUVDyMc7JS3JEd&J<>Db z=dVC?nrL1lPvbNn!Gy)#7n5sDVtE0Jwxl2*L6GTgGm_4CC6dvX$cT)}lljcDd}!kd@(A`~2I=BJ?%kOPHDm0C!BKW+%N?qPJRwno1 z=^ooH;qzg_sxV>T;t32)gWv)2R`u2Pf?LxA*OYSm%C@_y2jJ3VxUt1_yeiTe9jtKW zMKXEr7RGZrM$FyoytYx}hzDK$rf|kF>*VqbwMUCq_Ov`-K;r1vzi=KJj%T>_MFVim zmCF!xnyNNLJL-*R75kRQI^ibjfaHJbQO?x3Wq|e5(uuYuv#`76_%YHVi#0uPzUfpg zo>IsAIlX=|r7~IFz4949=UG4NS^HCe zyq|ZM-s{iu^G5sir~6sYq31cw&U5{SbJxt}qpaWQXV!Yd{@CM&uDE!ET#PgusAF(_ zy)i=lbxUp5W%=vOZ3+l|dUa-I4c(vbz)XfW-*4$IrD%Ag%Zsq11d@<1b zI-2z3K8r2%8^l&)D9VD3vED2o4hH+O+t@t$zs zO)higS{D#vEHI*Oi(-E!_*skaIwn{6&DoE_jY}hKMle3bN4NeRjg^u~36elFUY=Ys z($A)ZHVggwKlp9_%|Iv;AF4}MAs=I7&E&*LKm9P@AFol+_(6(S>{OmDq=@u=g5l7D zje&?;%gD##J`$}A(hA9p3E`fo+_JXr38FM+Xk7R8YFjHmYlz=`;T~0-wMP}doy^LY z_G0)>!4KWw*$6IpMl?;XSRSt_5& zt#8AG)5p)~%G`(pmSE&2!az?PQ=`bQVqYae5nWN5gu891CLs4g8}vDjLAslFhS26V z<$vS+E5(AL2^!mqg>uyE7{zjz`F>hiD2SQSayew~<5c-${ZJg%{eC85b(fS=#UiBX zu^XUWn;eH4XeFA@OTE>ob3^tP@jDVevu^7mzax&8_CQ=(!f$~UNLS6-Fp&Qo?pMWe z(&}}Ckd8S+()9`uQ{^QI_jbDdRZHGa*G>c5#H`)%$rJuQg?^`m->$-MqanBCl5jon zQMwEt9e39yw$b@qI_9#emY(&3(@4lNmGxh1s$}MheXh*-Eo6!-hq|&xW%5FVUNFgz zF~pj<%WQ`OW_Qaaj0d#$_jGhK&1Lh9k*-PLE>cKac(JGa_yGY<#pUuBG?i=9@JK(d z2JN`G#7)a6;;)&=nHd#+I+iRbaX(y~@Y}c>GfMnJG$4;7*XAr4Wg$oUO?o0(S%%(z z?#t{Y_^DH&mrz$^Pp4%jy_2rYt5aDz#HaXvZzdxxepX=bBrEUL>vWpY!xMsjsP#dKP`4`$UEp&^;@KGHMnn`wN zyd&9wui=fjdp*33c#J_tyPL3Q?!LINMh(9m4?Z5tGX=$IM+o(`)is_X^R!xUmov%H z-mfl{8|D^gmtYOtha@KM4ifW2&sQe=w76?bcS-?S1dhiG{E6jKYM^ysFcQ(RL(h1i z@iSQFsPQE4ppD^vDt}R0k@XB&Dc}d7EYn7 zqEzJYG7%icxPOP0cqTJe&2m|_U|>F*i4PUHiIp^gl$mT}J&8_dx$4XkLYm6mtE%?D zE~-%ze#(q-y0emP#)}vPWbj+2wkb>8br)4CehY=w!@aDp!-Lx{LU0hvvSQVu25#rL zFx5270;!b2(^si%WY(}Gb~=0PQ*m+XS7fuRB$uo2c zpw$3FVuGJ}8jFmz7ur_j!`a*Y78{uAi~ROQKAYqiTKE!}vussI`)kaMh~fDQOVq9Z z$*#hWDE9YD_=$wy4>KvV*@ZNfZWVdL^3p%EP^qV2l9b-ermHd>11D$5@#K4P=dd?>p}O3?!oX_4rkl1ysgoaUWZl)!>kwVRX0z`~Fu*P+R>+&Xtdu3k z3Jfypmz5A@WGPGx+3(M1=Y{nEXFhJj`P$ib%kw0sYc7|Z`uZ98t>J(b`?`y@Vdoyf z%4X4E+tyd?Zov`+nmrYYY^$A4g+V!u8La!6J8B~m?xmywdKqh%?Zzkmr)0{{GBI17 z%)~uQjZpbjSTIgDK2FyxQplW)fNnqp4Uh~QN_2<|dT@?4k#m*;^h@VE+T_q0?livz z9*?%9@`4HQ)v#D~{mPiUk;XkuBnNCwOH!fG%t#o<8%sG*Wh)?!ZF3ZFdTGM_%FGh8onVS)Dvj*GTd;*{P%f06%}4H=-14J~zR z@LkaDY)pPPbUQoY9>Ei#yyx4j_t}^8aEbD;IHPPXEpqjfeVWDe zT+T3=l{|#KBeXnU;zLNmGBLw(_Vkf{K4-)^hx(Z)U+iwx~jZ5gSIKCGLmA_d$xWGSU$-1R!KDt4rLr~g#{773rh_At? zEp|H@b4YDUwoW0-5c7%beQ5i_{mLLk(`GP|TcfA+ad=)-;eNT0vXvs^05;wFk^QqM zTrLavbj|JfNjkEAfOCj-?7YQUU2}}*?jKd*-f5`6+COk>8?F!BL!<1>U|mCX5GtKT zPit2+i~g*@@pT`G>n^zP=Kj;rYaP`tUne^6HgajohASzVv5@;fws1FS(TF31z0`!3 zT10Ep3j8*g1ZlR1w~7f5g<36_)4g)3%_2`AE4gGEZu?!aeLOrhdvxFSY|5on*M zu|1W=2Yh-}>_5D=R5rU}?X@|~^@Hucr`ZvgD=0O8-c4X8p$hUQcm0**^sdIaIF5FF z^=g)WRNkG;F#F(AhR{9K&qqJg8SFWs<5lD~U8;4FyO#-*!R_9?R2t`&(a!qE(G&7& z9bRx)dL&q)oRNs1x{%WBkPh9=T+Og!9A{F`hHhLnZPv1bnZqKqq@Tk3`sCm0cMSI|cGbP|s{h}WUxypDtM;d(Fw)Ow+ilBeKUXP6i^o0m%`xi7{P5x(8RpA+`oe1(UgGTNx)hk@AmpvQR2;-*68LPYZf z9E}hs(Jzg`F7FmSp6DlcMZZXne~a2Pmui2Jeb) zeu&e1SiVn{p2gjv?9xy0y$J-_%Oi*snGXDYwOnw6tNg4>eQ%K;bKUWMv^HJLv4ZD5 z)D)M-pyZl6*{ZH&H%JFdTA z5#1`hIF^CyIx_*gYtGcVA>mexuX1nUVMYj9JD*KsY&=_v*Iu2bQ{K44%F)KPtp4!? z?@H6PnPd&)TaK7TWh+{p<}hyh&wlU-_MwWuOmCP(a)ImSFrIcZY~&= zr!K1OljOlEXly|&J`JB@Z|T9i8bhh?YU`{efsJw=n!=aPZdXg=f3GeQB{nBE3$8ZC z^{!bHxxuxmTS2c+<#bacHj(J@h*tTdwMoeV7(V=746#nLrQ5qR>LVk|Tfi=xo(`i}Zh|MN89;|n_ zpHt#KCtK=vH|tZYTf+Sebw)Gg=ep9km#p+E*mkdX!o3()VCDZ-foH=CRM%C3e-TGp zmp4Oyv)tM88g!3GJ1kTcmt?m#vC=z-2^noGw<@o9--R`}ozwHW*taCv?+n?I#ita< zDde^;91o&wIM(KMHr5e$h5KzFj&SjN<8E3LRJ&&eYCO5;6HGZz547QQZ$jH!h3;K)VRE`JK`|~}N#rEE+)8XH_mIlm zlLI-Ws7@3zDBS0)USybQ6LsMZ8n<^)y4e2MoO8?Q(MEU-&F}{rV;ovIs-Er2^6&#% zP^Ck(B>mSw>uL98SM66>=da=icUk3Wi{I-2Jpl?b7Jhp%xyatY= zXYpu8Nz!w4C$2Z18B>-Nh3go*V%_H>v`^~hb970PhOQN2p(nU<;DYm*VMf@BW>wR2 zI*6k#9l3BeLN@fJ_J>+fIJ>A-WW%QO%S~C(C>v(lWHt?h^N1lA4Vm35g~vXE^LCbq zO>3FmuOqD0GpP-(%HJ9i1YD#2K1{P1j<5jtA!+E><>caGPtn06s^yMU!od-dCYQHH z;1fI`Nv<2A9(6Z2Eh05TP*S6n-;5|_<+o*Yre&6R4B!H`Eo>(fvZOhHmGG@Y|4>hLi2&U0_T+S>M1^MbJM%~D91l+T-%#a5tTBi5r#?n|=Iic!g1 zM`&Z%J*rB+Mi|c3O*yH`ac4kzmnJ}2+qBAWqN6K$=p&QEjD0;O>@d4cmR)bZUSEuA zX2MUw>FejGP{ndd^!uiTtle%@@J9)ECemQ_@Ox86f;5}~w2fnnhRDRX?Wvz5c=>lx zcnW@W(?V{xR*-~-eUYe!n+wLArErA=J4a)-CQ9g%fjR|n-zq#SG>0>~Rqiq-Kle8= z+`tWswDFiz#Gs-^W7^6zC?f8AILM*ATcKHFboDzZ*wI-~_JIo*g!66c+P}ul?p9bq zz?5)KH_H5`zYdMuZ(X&7Od7E3Fi;Gc9bGwZfM!N(8Z>5v-@CG-QR1#Wk)%7j7Sc0Q zPAryc%_%@Y-wdcGAn$==Arysis+-SS?O5EK8x3hETeo4?} z*ALWK|zX%kl+XnPxcJ zQX_JLTi~vAADk%r?H=mNn$bI$d(gzunR%wA(kQy?wG&x#yGNNN>NA5e(YiG>7PX#V zz%@o($pP!tON$D^sRfA)mx9T|8%5{PDq=q@(7js~xtPBBkiOw(mj{^1Thj);ehixl z+wWvj+loSWEey0`YS+Tm45+)g0P&X^Y~;+k8Fv&4%&UHDfbI4sbJFG&4ytWlp#Vdx z{BG`bC~S^IcI{%7QbT!-Ow}#j%AxXS*uE+--~Kl$&A|A*fRpD2?r}UV-Q~{2kN8X5 zU!wwzIB%u`S?oDIH-HHky?nKxP#XesNl@w@gopZXfTjs-*#NGxAg==5Wcch7YxV!F zuG~S<3cniPg1e<@?!$C6^@C95{w?Wbx!bw&ndZ{iH*`6=HBstjg{A+PEd2&b4>+Um z%9wP&b1)ivpK44mrP}UC7AbKz)55=7_*%kQZe_gKMs8bnoiix>!^uzFC9JTz$u4Hl$F)@{sm@m(YZ@RjqFh zY1@-DFE~iGQ)*_%jnq1Q3l*2M-;LdjF*;{;@8u@^{oH)K8XXnun$KTCxPgQS;pZ+4 z@fm~4*cl)w`Ixc1-YCD+QVN*Gjq)p$dXyY@-{Kdg|DY1x9bB!XrJrjX<#tJne7`U; zT5S;8O-)MSyKayK=XR*bX@knpbcL=}XlIu~JR|or@+4CO_=2pLs&3DW@4{=cst-H9# zB05U9b#6Cwp~!E-l7O`s?e~brF^@0xb95VsEo!2QxOEw^D*|cp6T^F^Sk@qIf8Xmw z#G@Ps>_aO$<4UH+|xffmegw*ujp!7Zi0)E zG?44>*gPCJ6vL1IjOa?%yVn~tvf1G=PgjL^@x3?vOr7);^WVsDnU0IQX_y_(o!z}9 zTn#~#T;EM)ogw!L^QF^`=5{tz#K7fb0P#@#9WbNa?61|={u&+&_bZ}lkI=A>Sz6@B zW1Bdg>w{4`Ls!|{`>h#M8H|HgMSh1uogy7tg$-HU4Scb~T|pQ2+HN7=a? z4roJ~M$DsD(zZWavrC)dR+rYWP+x&(p}ivQW~5VA!0=3U^RCjAz(gVy4|f+bse~9> z>03A(sE_=L0z6#ZFWSJ4w7DE#M%MeyH~R(dv8!}nyae@RUoyNy^X3__usK!k_rhM& zV2n_ydy_UZZ$3hsWfqv;Ux$KQ_o%AboYRjZ=?Xbu-RLCUXB@=d8!W76o+GdQ7>}gC zh;2nn&NUU6UL+Q#d^%qlvm0H2EcOY8(6*CHSezpY;$Eaj6S`N?6h&l9Gu0idy%DyD z)Na`+ZS&O8?vZ=68%N+k4dBPmuo<+h4c=HhHb_@^Ix}%~FZNHXaX$^^z=qprn(?;} zWpzcc#P7Wxq4veC8d~gbZd1mz$`lcsOsP@`dd8KpANc>hD=k4QLu1z^#gj zSQ?jFp#h1845`8T4_%KxMqQh(_SH#eV0EZhV>h3A9loAI`_hBD4=_c8w`M5o0u1ck zZIIsw#z=4%V-ae=aXD@h-&DB}A0i&3!?+2e=^)OXnDj67Etn`@?~pUgVue{dFCOa` znjht@(S*U0F+gP^?(Q7!!^G`CXDP~(8~@oFq@69&-*zh6>b~rtZG_uSwF&4ehHnNJ zcozD(E70(@Y$5tO-r&|3$}-$8d4JmhH_xSO??CqDF|yP&?O3YopoxX^{z!v!bN2ze zv&eBf30Q7sapujKsUydqV2JbGNSCpm;a1{ylCH6v+Ofnxtkmx*H-D&~caHQcSKpvi zOF3(E>0Bjnl1;*WJ=oT$w|3OLCQEiI1?x(LzA>Xn^k7-XSQ+D#@3F3AnZI>%#R|Xv ziiMo)&B3~5PoZ+$*i-HqC2k8za7`9;tS}ppLw+n&EEPtC^U|M>`_8McjU9CF!Q?N`Wew${JG_5mO7@BNU6_y}y(4De>EtxOYy` z-j7?+39tAEKW77FFyc?Kh2}$@v}`D5^>HemH5&w_nnT|_#q7u%h$5NC!-LILezPO$ z`XFKE_4OUO(3JOt)0^4W&k(QzMpd^Qn>K-zGR0%}13uuqq@{-zjhl*oAM%VaX^mlCHZuuyAtq z5#**&kh)NPH-cnGeJ=shgHIzsCCFnyafYK?BQY$J^ZGRMv!?it^~Mu}nfuFWd;Byi zrh3k@8ttYLXyl4$DfSJ~HscVo6Qan#22#`Ks41rKS>&&Mq0)_>g5aVTDAZQW|RE+tKl?pT$&$H^6XQv!tyC5YEzAyDY6Zk5jBJ6pbg2}Ymysm#`$gUcw_eTaGZOUI;6D?!G(cIq=q|k`!`^n^hcBR+FRa~?!F(T+L69B%LUfV4fpNhNuZ{}g z)Zk>JR@$+SVaL0eyMnbTB-Yj;JBihIpQaAx>tJkDq99bZ@)TVVe;Yw|KxsQ;OB}Mw*&7q6@SNMM2dC8SXJ|KkS(&3+Nf0Sbyo#J}Xa+fGweB zl`vNyf+N9jN5$n}p)_-74DLk}GEAEZD4;FZ5YeI zsqy=i`A3)f$Ffntroi!-9#v_Q-*vU$lY9<@&X?&9Lh&?sN3zGl)wybY8%K^6x&Lyi z>B{T-z`3gh4-K!dU6}SdW$R2vd}mYN5@Nwh0XhZYh%v*x!;#sZi7-Ap+DrSH1F&uN z+@EaR>MYs@!UGrM%EX_dd9h-*ak!irci%o1wPCm|^Ox^~_oIsijVXgWxPI@1duO=a z?X86IFnpn$;BG%{*(~-ohgVBAmhZ!!<^?Q#hI5|k9)?SoXgD7ZsD!>j$(K07pj$%< zI_7bB+A$KEm%3Mm+xqqiD7vxLMis>;#ZXmKA>{K$OOogWef4Lb#C}{6n@wxN)k6pL zfg6n2-q+g^;4(#9P6kR48+Sg#V3~*30HAeti*lNvXnrv{*r;?O0Slm zv(E~5=v!i%XPs5#zHO;xVK=m`#NBjOwcFlO_OUDPg?{^ln|T(C6WqaHSsO&~$)}%X z6Ui2oM}3JPZstaMT6{6hsdCe~!{m1CBhhWAw5Mbc7DRC*zZ|A-EV@6qN31)PS`_K~ zr}QHdU=ZCF)piB>;YMH^VZEAf{xs4JVX8izqwfs&5?@=~U8$;+@cI_|LbA?6-EZ7( z*C9_fb5S0JWMeyWB$RzzDof#~<-bwi-_FL~;NP~;{P*mxJhc!G6>3IvrYgRoki9Gz_XVG(UhH8O`W%`c z#NB8z8;jh(q6+L@E^AJ+{&WV?euV_=+Fxa@&Sgscp-eGsayu8vxam z#G19LIcvf2KGc+2Q8p$MX$liz#H~8pHtU{)kI9u6I`R4D%-T<%T^8oZh;bdr@u4vC zD{7N=8pqwlBcF8$fxUpU%M{YhB$v*$0e6^PUynb-ediLNJ>L`tk>sBmEaoZOk?tlk zZ(U*H;VgN)IbE#~3|42o-wrpY6caLpuby#C$Dr6wu5S&q(e`i)OlyL*Q)V?QAPtDu z*gZ%g4Dxj?)Tz46udYnE`-hppt3yR{PY$#1Gi`1mDJ9$@URl6>+Jfox&S9|xp(+CF zC89MXY3R5D+f%pCF|!%$QZ6L{rF@HeX+eS1S4V7%q?(Zvuz+e&wg{CP#yb6n7NrDi zkv@e{7kBN8b#t%{^>s8>$LO;8sb=#_-MX`M)a4#&$=2iwh z7sBJK!u&TbvF zXeTefwDz`Of~v1@*FOX9yjD?ynG{f0@QWk0mARF>$5mazQ>ULB#J)9BF=bHk3>29;AM-uC`&h5Qcx4Spn76;ceq)yi$ zbsO3y`Z5qMHGAeBK0V>yXj`JcWb8JzWw~7Bmhgt^ebknP*s*?A0a}kMfZQ|`xw$u8 zIgHmW0Ll2C({=XgzHTdnYX`2hOZ(EAYju6i!zN_nDQIgVJ?M@tA_Z&nAKGr$efS$s zx3Av)Li*i=aFpLXj;Tim+@s=Fh5KWOooY?nm(se@PHSh8=zQ614q3HcJ;9Mnzy46@O*+G5f?ynY_y}F0m zccu5uy^BYaAnc$e)I(Ue8F}q@0&Y2-MJ;hVgE6A=bIik9`dd2=?6w~gJZn= z+4#pcg^y@t)pFMm&&Evh5WYdfH~p6z~8yL;I5xNWZmK! zICcWBXItT1b|)99Kd{1TRN}A4apAO@o7;rLzT-nR-gk;t1=1u`j(~3m#%NS)>y{2j25=a8L${qHuf0#6#a80TY=hdCgP48u@l+0jH%zUu4M%X$8$j7meq&}h z6B#h@eeS>U==flQVFTadz+k7I3#Zz>9;&}i4Lg3j159o8NmS{i=5oIM!IAgR5qouw zJA!u(c4%{FdE$qgpvy;cQRaS_4~e*vX9~3Qs*6{!MrEJHI|ELl4cOu(T|sVn#JL0G zzJ&FiS=ki+UCCy}CkM7g#&X~OYA!(Rs{-~Ig0*I8FyII_;US&3wqLMQhq}LV*{?Hn zn!aVKHU0XC&fEM;85`g3$}i)fdI($Pm(AGS1KBD=*eV;*%|N!wkj_sV{XCWD58P+6 zp1qOXq_c6_Y#dVQ7n0nL>%8H%3+A;ZId5^C&$PF(%X|(A3PL%l#9TIjY`2!oD+R>Fa)uJxInrz_4r; zd)qyj5j`{2^RfFu3OSnhv6<|oZil2UwrzzM2s`s}J08)_)FX%xl_X(^yWAmt_OoFY?<@F87@q+qeImukQJHlRJ)sGe^e(w+-Y4@b(m% zF9mtNEyUFy3s~^jTr zW0TG;iF>CwzrNQDzRnqKdgpEU<5M^w)0L$oH+(w}E%WNP`y_VdVuuitg;yfK_~3G9 zPv)F9XuxI+=U!eb8}cl`NV`TI@4heoI)9I2=VIYyUP8PXbKe=CYp;`63Dzt$St(0@M(%^Nrn){Rg?H-8T)aPy8nnw-q{w_C>o8+&903)y-gsmmwn7l{b_kV2;6k^v&?JSa%RZN{L{L2 zImb2EV7`>t83}{@_oux-@M-UmLGwDp9%NsTw-b-oUOBPOU)Qq+9_8b8lJ6-#%O4a{ zvHKw&w`Vrh&J*@r#f^7YDY47t7pTYYF`dN8b_h2y?1gCA!fWBJROe2|{cDiI&!svk zTw23EZREUaYx1PZ8g9M_J(P`TPZ`^L$rb$O8@ufP_fv7#{QIZk?%=251}^Bv*ySF)qUTz8d^uDOtWgPQBQ zj|$kZ?1s7X4WNfv$hwd6YYiK5@TNPyf#kkqrOqYjos7|0lY4BbfNhs&`R*F?K$pvoHVMK9mon2kpZyx`3k|ADjBz zx#2dQ!JboC%(uc<9ds%=K44&P(GKKx$e&;z?Xi735AzRl|3qi}O4qR-uIdK4@9Wy@ z6T;_s2f+K`4?4@P)v_m9HlT}N!tFh1@tj4AdzZ{e&s{VlHK%viIg5{4vM}8nTeR@V zIkT4Z?z?o^yoJ5<7B22xHfO=?g^PM;E?qEt{+!-LOJ^S2yVdBiqeHz%%teL-mDo*<}F;XxHmp);p{o1XQb1;6BjO6GH1b( z#q_#t&isYxIg5H@^JgrXyKoUL?lWW7ev{*)(<=CnI+J&u^zX%EwjI6g=*6>->YaS- z;w5uZy?f7_xoF0sV|#bE$sDtA(NT+g4`8IDJCn1x_h6>m83u#zUAlNt@4N-G<}aP? z%&5nikxlOZ;h;MM{*SKzi(U23+d4e@=FeX^ z%f;(#^eldoeQtQk%=!QEw`6BY(q)M}I_a9ec**Q}3+*qRP17lvcif!mOZeNI1-u;R zEjWU|E?hA0h*YQA;w6imqItYP7cJhN6 z8~JT?|3K-IKk@Htok{suIL_rty^2=vIr*e~6wjdi9<+KlB0q`mUx-I_x%@lgk+`D3 zzv<+1_1uM4em(Nj)TxDN^?%~u8{@aq{a@lgsP{ge%eZg3)aA+(UxkZUeum7-G%lw6 zNIVrMt9(zDPgMDEmH)`Ui)QV7Cf`BU?|TVt{VQ<-UZOZBGidA0lGBj&QU_p|@;&h- z+ypDQ9=?df@Im~Je|*cv`A@Wd-j^%T_U~+j(PgnT_m5)_<58g-Kt)ueaNJ7j1@8#F>5?sW1PQWb7 z50fM1I&u}X_5V2E@oV|Kyh>gm&z8HN=W>l@Dx>f;)*p)2&-YBuyjxx`&q3zdw;b*D zcr>0)y%}ij?2gYfua(i(Z=K7(k&Lg)io8xPN4o6Epl!c}NIU*Row#o@T0a{(<$Y_S zjdNv;Q2zNj&Ul(=_1-`${~KDp`{k8r<2xIlr@!6N#y1LWe8c1qXFKtGvWhmoyV2&I zM{75W*3UG>2cV668+?d*J!tKYKridB=al=0q4hgN%e&CF-ydf=?S73m&es&*g*LB? z6rb%Z_wVPF`?pc~nogYh7lX7sXvw$G+J6=8c>4m{_@72Qu0DV^kK57uz24D(8Cp9R z$m8$^;)Q6hk2&}p^GcxQ@ecAMI^lU%|28sDC!~V^EVT8Pvrl;VF5`8RZWs#<=Z6Z`ML6Iq_bW!NJ}$Zt3( zSoyoy#c^_ld=URm`Q2K6Ej~?r39ihLPgeN^xw-7d8ugx8?zDR~K0};AYyWULT+2V@ z;1Oc^3M2(nFCnSze+-|(yYNXYppEksv~i`;>dix2ZyMV8_D37v&S>?w)AB9Q+Vi2U z_bW+g?S6q4e~ecD9kllDl{e!6;>)!BMKOG14TVwwFkbjEVf2Yc?#ihhY<1si} z%MaJ`n6tcZD@XsYyhy0u*FtOeeYEyob;|vRqn$6~XzlHT)a%ZL)cpR=QZ#{v3qnUiZ7Wcu6aBs}vMCvUBCLu>a`#d8(!fMLcv0&V?aXzL9`tN%MY z-TYquQ+_I6laI;Ui^JCY9&P#KXzM?Ww*EEv zIOFWo@)PAEd6YavZi(k{+#88@Tv$itEt1mOUm>4D8^^7RZqyJO1 z{1}xlln0@Wb1yBQAjhC>*HLKOc{8+mcoh%U^51ze+4`TOZHJH0`dfikzlt{QyXDQY zh}Q0vX#HHG^0Uy|IZ5#nd8EpxD?SK2<5oODjzjBzloO{mQ282Y+iM8gdMl~?dkSrQ zpUAgl9r@#bj{jKwhg5zqTKgr%SIX1naWakk@gK>5Z2ie9-wSR1kmAkdj|{@LR}*dd ztH>h%i)icLgB)+yIvs7hWzn|VGNfK#60P30X!+NxcvB=F`us?})H*63B7ZsBDgOj1 z^1tuI{#O*&(As@e@oh4LHs1MY?S>uwAEljfJ%`p_6|LU=if@!hqK*Gxw0zwiZN3q- z{x)*rzJD%s=JOd^`5S2Sc^R#KO+KOJ56DZ=`aKtI9E;KF&)4$VX#Gxg%2Sh79+g`n z<4X-gt2YpBzkIpCY4<6#cJGiSc|BVFtI+n-WoYv}P0KS{otnjq_Brc8btXyd&BZM;{b^>ZoOc+W>0?MY`q8$>=V;sGL$rCkjkY~jply%m(6+}@XxrmawC!;}T03{Dyo5Hc>(JV{ z1Z{hqr}9&A9Px>`HKvj6lbVF~K43faP(BK+pMiKF*JHmO(J}P}ddc^9@L`s}f)C;I zI0K(T+Vh9e=DQl&cz&7d+*kPyyEy*7fwo_sL+kf6w0@3rOf5j`XFnXl_`aRvEPu~2 z^%&m6^4)P4mXF5=h(pK+o;@S+e&UtU-cL1V(;4G<9^?1~PQ?fD5WGX>H{*S*cNtp! z@w1%mu`cpY4D_swU5x+dnT}uKLdO3g?#Vdb!368wi8h}b9aDLyJarb@c3OzGU5-GT z$27bbC!uZkh}>3=lIx=#cUD8I{{xMg@1nK$qI^)^D9=ahXE|E^BUC+b{k543STjh07$L+kHe zEx#RYTqVU<$xG1cosBlG6k2~%(Z;up;!U*t_d}iKpJSHgFX5ex>j{j|?;Tp6$J;4C z6|G)ICbT?`o%R(E$2+LEVw%(blkz?!mHc<$ns^mjdl#auKM!rZhoBvY_CXuR2$ipn zHjV}_Qd@qXJPoa#S!nBzlL0MvYxym_$l1=RYtY7V8QM5bMmxSNMB8pN(e~dsw01Yf z+gScP2McTe3;8bE@@LSN-=OlmJV73X*56@x3-uV`%jvXzh$a>vt4dJL_oq_Xj%VpPDFlN_Mqj>&j&ci_kP)OOnrdX{)@!Ux{he{VBKy$t`UoU{{o7&!y=eUo#G|o4=J+{UKhLA}^Ca5#t2oR1?pAyjT6>Go z+L@1IF@W3RI%w;yhSuHyr##i%&uO=Y0hU*A6TAy;{I{TOhoZbho-L0| z`-dr>jP#${4Q>2m(CUxU@(t1Iuc>$tTK(Vlb?Uz>|BjrW{P&@)e+SxlZ$?}HYQ-0! zt$!}sxKENPwDsnqjdMEMdIu?obvb3+Ia)5|2kSbe^>knT08fl z^?$Rx6m7lp(fZG!t#^{*C1~r-MeF}Sxt;7rTYnW?2VH3E|G2jke}%UG8))l4F0YbH z(5`EabWF`cTmMkxfBv13_5ItUjeBeSD{hI)aWk}bH^dUIgQwtX*h{~wpsnY^oAKvK z&h_oLXzP86H{r*48oq_&Snp+w;PYtfKZQ5qqj&?}kGB4u_!lhU^>_{P5=#}(*1G_& z!?Ur7r=qQQ0$z(t@fth|_h7v_XzLx0SK}1C3S(&N?TJ_7E_eload+0+3T?eD@N(P~ zt-c=%I1G2A-fC#|2I9&1=Uz^|Hl9fQ4chVP3%m?J!e#gthOmxHIKMrIR_{r?6d%E3 z@NV3mes0t98}Sm#ufgN+VjRQr^R)a-yqNMVo`B16C6=ePd>&pz`Aj?(S zcp>GxVg`4>3AnA6kH!m#N8<6gJ`TY(F^{X^sWFUpz>cCw3UA=KSJwog?v%vPonkzkYnmrwDzxYOkJ$y=Vj4#ycz?4Rbu{(X^p{wOjI|Mt%E)Y>?acqksk_HpADcDx|@mvTM&1={lW z(Z<_AH|@WKHqNIVQ;(p{uZ&jjuW0qIb(Z&C>X_<7&XcLr&|a4rwE9P*)t`el-?(FH zf0gfrHqRXuk5jy*qkjb2yw<{9Sbrc|yMOXxw03_$8}C<+srQgP@xP2YtfH-Vg~~5h z`3blu+hrl{fz#2Be`B!^19%?WYnbd(`M-8^%0HB^q1Asx@tyKUm0zRyXvIh3MC#8% z>+euZ;6Zp4?u+MQ6wkq3a5Rp`vvDk*g(0-p-zc>6{HAF0-4Jd5K0Fgw$1`vco{nxj z4S(C!c|HDs%Za~6JDz`rcHC;B9k<>@JHEYwcHDX%?REAP+Ux95wByPBXs`P_(T+bQ zwByKiXvd2y(2iRdp&jSW#o2fYj%O1dk82Pw#T_w)JKzz>an3&jx5H_;6c0jDkNj`-uv;Jdf zd0atW2mZUzP5$1BbmhMhIi&cnMP91@%aK&~UxcKdzYp1U{xgx+m;V$Tj>jX%2mewe z&;4_8f3{}=hZ0Z4NjMof^!oR~F5Ck-{`)830P2rJJ1&nwUdR3|kn_5KGvqw&UmqjX zTMO;{G!!|%_*X^F6Mi?2z~33f*7zFQ^~Up#soT&)`Hjf<{AVjpAmdqUtm0ldT&^WQ zV{o>9Q$8;rLtFnA#aGL`JXJ1|hsizU_Gs&mQrsnfX0lfP1zNw)$!q0OEuW-#S2<3O zl5enaZ2h_{%bZNev2uufjTeEfcfGtso{Vi%t6bR_oJ=%30nDkXzlvYj@N6T9amS8zi}|L_zU^ITp^!9 zcCEjv_&)g;S&)5lwwx;Wm8+rk{}*25w*QYs+y9f%_SddBm%P~m{kV*i4abqxZ)}`- z#IK{(t7C%op2gYt2qszO66AQ7`kaG`)%ysivHTsJj{m?TsJ9BvBK|uEkC}KW9)>I7 z;rR7dPCFmqD)jp}4#eAW2Fs`6B-%d+Egx6MLn;4-gOrtjk5>LJa$HQkh&Hb2xGwE% zk2cTc9Ng@_a|RdVJhc3qj+TE1YWZGTzJr#J(eg7mXwIUa-$rwPn*MJ_etW>*hx_70 zWIOoBVmI#J<8sZR{L3wwH}TtO+o^&)N8fV`o{ZNc-+Jk}0xiEULL1lF@)Vho)8&40 zcR4|hKzqGxsCby-!HQjq+gmvOG|*m8FFB_EhW7fo1#LXn;;uA#IZkIg<`tifhp;?> zQ*kPuMZf!Cocep_SHo7YBo0^8e%wjEZ*6Y-Bx&UW|#C(_O*U?^I&m*tXzNgT}^*1N>--q@(ycz9vc>+?uZ!w<6`ZLkS9Y!1X7_@P3j5h9d za0+^H1Nt3=Hl9B>cexJ6H__r(EM~puFo#c|&G)aEA-)1_z8B%?#Ahj9uI0xlPHXvG z#nZL?K*jrL`9#IzwS0`?QCc2QysnmaD_#XH&;ATL+xHi=aeaq2&X(d2(CWR3mX9k` z{vukvClo)7R_`7>2k+4Gzi9bYT7EHFJLjuBht|%CikG3avjDB$JeAKxt2ae)46R-i zt=>eHk4LLFM)4@Ldc)D``BlC)T0M`JyR^K`$_Ia_}k5# z@+a{C>fNb$shogarma`Dol1H^Y5! z1Kb;jBJK2b;UvcK+a}KW;ydK}H}x5E-0OQE8IS)>C-&FT&GM(5^1g?h^1gdielzaL z@+&cl=i?rDD(;TQ;BGh{cctBZa3b!4_WpMe+UxY&;m&#eGqm!j(CR&aHs5QILrqU! z%X4V!Ex-ulo+%HOyP>VOCE9v^oIt(Rr5mmN-!^vo`wXqUcacS@JCIYP|7I=k!(CYa zaJd8SOuVHWj-0alhM|q;+kn&GD`@k18o7i_J%Dz7a6S&8UKVX!N6U!Hw?$4_ez(fM z*vNT)@g4cFW8clV1M8pW=wBwMs{8=tk|#9@xr9kY(8ep5lWQ@2_}A#oH;~MDd1-2P+<^_`CI;_P<7J|82#u zD}GY(V~TH8e3Rmf6rZQ~c*V;U&r*E2;z^2kSG=|2(TdksytZPu;y>1N#`h)K_V`rs ztBPMz{IKHt75_!?HHyzse1_u1iWexJrubmRM{*Hn`(YN^emxY2<3VWqbzihR9f5Wn z9EvH%_npsq4&ejjQmW@#`P@2Ac?m5))-X=9uR~4& zJ#&#maL?h$PFaxFOot=^Y3X5(9dHonKv+JDggL%c}w5%N$OLmS^7^7X;a_^N36 zcq!WZ`m>RjNY8P&GW8RRe_Yk&;w9owBfF|+3bKj)QKU(K7)f>iD8+-&-nYENMqtyW zUdMr~_XN^pUjc2sGZZgTd<0s(1697gZ1duoj(CtBv_uckp-fYit?3XRs zlnq&zHCdGvS(ZiQRMK6LN#u~B0)_wP!o+^~;uQ zN_#%8i~j1eCaba{%d#YkvLN#^C$lmm(=sU&GA?5>DkCy1Loz4>(kH#rBVDpROY@g4 z*^~`gmo-_H6>G9%M6DHAd-V=^iuGAu(fCL7{{$Jio-C15e(x_7{W0az#Y+t6VQvCYr8!-9$nar?L&Friv74f zws15yk$)GayN+S3;W(^f4~D1legQ+c1qN|*3}6tw$T_{+ZW@k6d(LrPtYZLcrknO~ zW8&OY&KsD;wK0QhVH#J%BzCp~+IEQI2n^sF=*3OZgR7(6l-vZ{anAeLk3+GA!?B5* zVHG#T@D#2aF@&QSR}eSH00z;E>$BW$YHmv0I9T(+&U{SDtJs;(L7ESC=7XL2U}rwq znGbg6gSI~d*qILwCiY-wKDZHa`#{YHJM+O+DQ{voR?+5@o2>q^(?53l$4>v)=^s1& zW2b-Y^pBnXvC}^evi=WH|JdmtJN;v)fAmu?yuY?5cD5&WwkLMBCw8_ccD83s+Y`C= z>#kvEd*XUFpZzo+?92x{^TE!1urnX*%m+L3!OncJGau~C2RrlGSM$Nne6TYg?92x} z^k2X|FpqY;&Enp~8O2G(3B@tRQN>}!A;kg3KE)oKM0ZUfh%V9>wiRPTY^SJ(`Leiff9i zipz@ac{;0KP@GqsRh&_rM9YtaVtY=`;;7;fZc0i8aT5%v+=m+zdoh3>mAi0#VtXEL z9qdONM+&<4I&m4Teo5s;v~~(A&#OF)@2<>o5Z}S} zp1eO{9{u<>u|0>zd$R5(c3}fo#yYyOh6AvQD`5rSV!blHi6vwr-9`M9xPX6P9)HIi z{)Sm>U;}9v1L%OycR7z}?WEJL|$2 z@?N<+il<@(55O>Ph#`EQdO=*D*oV&%d(lhm!Dor>!-pEScIS5tFo}Q11U`*%dLS3_sOsyAHfzrj7@w98~7mBv4S;x0IPUER`5P7;k{VI zd$53aV;=9q9F{SQcVY(bz%<^DNxTgccq_*77L4IvF^VOO;LRAun=phoVi0e@0R9Di zcs+XYI`m)>U3e|pb5+-1KVFS3yb7CmB{uL1tmEZa!vdDEIe_`%WyD3i6bpC>=J8_8 z;YFCm3o(P-W9d#~9+P-JCh$CrV;{!wT#Vv57{RkKjAvm8a~Q-kF@R^F4^Klco{An^ zjxIa}+q<}2S?tG?v4tmL6Hmkjo`7{c9&30UR`FP@U4CCe)!XO55BnEH<`fxM!;-=`qP0)qIvAq-Lf9%Hqws0eC;)d8j zKiczg8(vfVPooc?L@z#p9(){KSjF~u&hyxhk6{ZR#U?(24SX2u z_z>3cL9Aj0EBFAG@qR4feOSbMv4Hnr9`D8+-i28#V+QZUG~R(pyd4vG8^-ZgjNvU9 z#lK<%OBlwRF@!f^5O2f)-he**3wrT-^x$>q!XmbJ;5?80cn!AjYHZ?F*uX2Xj#pp} zFUKktu!5Ii885{WUV=ru7z=n2=J7(z;RTq*JZA8GOyhZC>mxfsWDFotJi6wks4 z<}i$BVhGQ`AfAo^JPm!g9KCo7dN7MFJQ>^DbAHEuJP})X0ygn@tl@E3#bdF887$&4 zSiohN#if|WC78g)7{^5z!=o{TX$;~*4B!IvVG2DsA6GGz#xvt0PcW3+#bES9eOZ~?Qxvnu^-1`3%A84Zi5Zn z8tb?f)^H3~F@zQD#WIe@682ybx5NT&fq5K-Iouqx7{m;Y#59h;ByNTY+!W)u35Ibv zhHzsHVgLiU5qi*%&9R)<(YGz6$fKs4A&Q!#24u=f!2Qo4B%Jj!!OZ`U!Vs+M;ErR-NW?__T#76!cVY?A7cYQ z!a9D4HT(d}*m)m{?-LjCJuKk6n8$Z8hi_vR-@**?*?M;x8<@m5FoCaQ9ACp2uD~e1 ziV=JT!}v0Wu#Q3GGy3iTzJxw}0loM-Z$r z@CmHq<5`!pE?Pk76Dl!5lt}S$qgH_#mdSf=PS;6L>$y@ji^pd8 zD|j82v4|zS7K?Zd7Vv7!<5if$D=~{#Ut z7{WXT@q7&6dFaD)(TnGx2hTfc*6}o~;i*`~ET%DoNjwG?)2aiG*9*OPExxT@EOkxXZ7?pbxi1FK&Sz z9EC329PK&&Aok-(Y~cuO;%3;uP0^m`-vnzo9ILo7Rxp5N+z3m!Ar{e(1>6AhxIX4^ zJKVSmC$2fk6G5i*z_zgy|AH(=B4B^)p#D8J{zd|2=iC+8yJ@`4gu!Zf- zIKN{*eu^#p1e^FVHt-{?F@kjr<3BKjFJTa0!~nj4K70O(cV*m^2!^_Z%edxg)y6{YFd%3>Aemosp zcp5hGRBYgKtm7$I!z@*B982bFhW8v5B*= zfitm=Gq8pUtm1U6;Ne)t!?1*hViBid0T01EPQ@I?F^f|$g9l?855goKhzXpGaXbKH zxIacQh7sHk!?-Voa32if-Wb43(TA6y7cWK+UW6{3gzavwL$Dvu#TH(OP23Y37{xkX zfHllx70<^Co`d$B|9Ke4voVHeVE`@fd}w*+Maw%6THf*hPTsXwbMmeqE$>=rdDleC zy9Qd`)zR{(#@A}d5 zu7#F&O|-mgpygd1E$?b*c~?cty9!#~mC^F9gqC+jw7e^zL2XnQwuGhYG`>=!9B2y zyJHD=!y@jA1)PX^+y!&EGiEV@8QclexFaTU0w!=>jH3@@xDG~fZH(Yr7{)a*gu^h1 zYhVCZM<068i$l?a-RQ#Ausw+THrS7Yv4w-MiK}7*Jy^$8u!aM%id|U2m9dO&Ea3nw z;!0RR7v}L#y3XMrn8n{QgTG-Kf5jyJf(iT?%lI*t@FOhZ zhgiT5Fpo{l;rp1y_b`L+VjADUB)*Lad<*0FCdROVQG5dk7GE3cB5!{96`(DFj^jm(DFElmd63KJocgGu@^0mJ!pCC zLd)a!Kqrs;(ek*3pJNkS*uc-Qj-O%;Esv{cd0auu<1$(vm(cRKh?d6%v^>tE<#7%z zkF#iboI%UuG+G`f(egNfmdA0lJdWXJHh+AbID%Uehp`7kxPtN^ZbBTuSBZT%oY;#S zqXz@%!i})q#rtRM$5*J|!coLc+#G9Yd0a)y;|f|Hm(lV#kCw+dv^>tD<#7frkJD&* zoJ7mx1X>=)(egNkmd8=FJdU8{aTqO+Luh#%M9bp#|gANj-%yq3@wkNXn7n#%i}Ow9*5BKIEa?V0kk~!q2;j`Ess5D$72^- z9=F|29`~c=aSJVvoA@a<@Dr@#$5_LUu!@$)6|_7qqvdf4Esu+6d0art<2+g(=g{&v zi9=8WLdEAed#|`vj9W9S*Xn9;k%i|(i9v9H^IFFXcIkY^^qUCW0EsxV^d7MPc z;{;kB$Ik7HaKw@JMW`yrJ^C;+o3#>f7r=`DZU{c!i-4@&P-KIU?ZAPU%=WVe)=WW_^-lje0ZQ66* zrak9v+H>BfJ?CxObKYh<>ew$^vMC#~E^D$XE3zz0vM38OFLN?0GcqlcG9lwKCZjSU z!!jg;G9Z1@D?QRB+k0sKvL&0cA?vaxtFj`?vLuVLAoDUOvoa&oGAR=>E@Lt(BQh*Q zGAIMmC%w`mU9!Eq<}dB}bjypTY{EXcgf$*j!Cv`or`jLVpe%7_fh zkPOOz^hvMuNSAEyruoa3Y|4hL%bKjpiY&{LEXsn+%bd*0j7-aWkSYfOh#oyhGj?wWkC9*S9+vN zws+S2WlJ_?L)K+YR%Jz&Wl0ugLFQ#nW@SdEWl|<&T*hQnMr2rqWKagAPkNR%cM-mxQxlDjL5JI$)F5KpY%$PbjkJv&0n@;Q#NE> z)?`&yWLcJEQ5Ixg=44i8WLhR=LdIoGMrA~XWk?2PK>DOtdZbIX$7}wwC7ZG#>#`=R zvLef}B#W{j^D-y1G9%M6DHAd-V=^iuGAu(fCstBFnNQi?Sf|GAFY#BhxY|6EZGiGAbi7EJHFV1JWnG(j#56y{+aiTe2w|(tfYL zlmD_RE3zz0vM38OFLN?0GcqlcG9lwKCZjSU!!jg;G9Z1@D?QRB+uLaV(!OtF^R(~V zboRfr@7r|dFYWs_7FVQw-^SvSEXsn+%bd*0j7-aC9hNWkuTedph%%MQPvnv2y#qk7?icG41<4W=5uEQYK_v z#$;4RWLSn|PzIz=dZkCYWP2-T9R0E-?R!WzKKmY$S(i0w-%GOciY&{LEXsn+%bd*0 zj7-ac zCS^j#WlTn8M22NZ24z6{q*r>ROSVIrzii2-Y{EXcgf$*j!Cv`or` zjLVpe%7_fhkPOOz^hvMuNSAE)YW}h%o3bJ6vL>stBFnNQi?Sf|GAFY#BhxY|6EZGi zGAbi7EJHFV1JWnG(j#56JzDdZE!mU}S(i0gl@(c*C0UdOnU^`4l^L0qNtuvw8Iw^N zkzpB6ISolIBRlAC7ZG#>#`=RvLef9{g%+S zS5X#Z9u*^qTv zlU20!E3zz0vM38^{pS_uWL9Qm8g0Hw#R(Z#c}#IsMr2rq(AEzs4oIK$N{@7*)o+i| z{zscnOEzUg)@4mr(ekN+Hovkg$)YUCyv)h0%*eD%%7l!|n2gGZ49k!V%7FAquk=Wl zY;Ugl%a&})hOEn)tjdZk%aSb0g3QaD%*u>R%cM-mxQwCgpQz%949k!V%7FAquk=Wl zYzH-e*^*7!kaby;Rauc`S&~Irka?Ly%bTp?j7-azu1)0ar@lR$|o>81uoJ4zFCKShIOh&alBEu>V z$)F5KpY)=&>rw2I?Getn`(+DlzD>08HgF(+>bMHl6j#yeRb*MqOR|Uq`BPAwN2{Nc zS(%Y(nUo0`moXWY5gC>t8I%F(lV0hOF4^A98CSn-$);?`x~$2ntjMw~$)YUCyv)h0 z%*eD%%7l!|n2gGZ49k!V%7FAquk=WlwD0-ZezEWQnf5(D)4u0tHe_AaWK~vVS(ao` z7Gz%LWL9QmS|)L2`b{W~%b1MHhz!e+49bA?Nw4%smuzpM`OB7U%7(1Vnyku-EX$HC z%7V3EScYU!2Bc4VrANACdt=RCwq#Q_WL?%|RaRtKmSj;D zWM1ZER%T>cCS^j#WlTn8M22NZ24z6{q*r>ROSS`=zii2-Y{EXcgf zVQ2p<&d9V(%7l!|n2gGZ49k!V%7FAquk=WlY;UCb%a&})hOEn)tjdZk%aSb0g3QaD z%*u>R%cM-mxQxlDjL5JI$)F5KpY%$PbjkLHn!jwxrfkT%tjVgZNc;EL+`O*s``M;_ zKie!w`+l~?Iqd9z#Tl8FNtuvw8Iw^NkzpB)ad+63ApHjPAzmw=-20Y(uCDiSXsK}3RxR1pj!mmne= z5v?K;n!~=D=F82CN1bgH>Q9 zSOLx-K>XkwI16qCV{itX2DgAy;3PN!j)P<1C^#bM@?aP~0QP_#;3_Zz+rS1e2iAf$ zU^TcHtO6^+3UGc2@q=^VEVvbn!5MHG+yYL4li&n64vvAN;0QPj4uCyi2e=B1z&5Y} z%z?FF4Ok5>2CKkIumW_SZ{X^3J2(fuokQVtHH%!6<7&Yfb;w7ytjjM;4HWmjKLXj z8r%X-fs^0_I1Y}1qu>ZQ3=V)jUO0WW)UrhXh?mo=H zXThyt49hzz%Q~7=dkI1DFGA z!5Xj{Tntu$m0$%p|7PL`=fGKTD;R?_;54`eoB}5WT|5);ac~TM6g~nDg9Bg>*a5B* zbmK+vHn0KAfwf?bple?ZUkp~ESHdg6`Tey0c0qT)=HRpNt?(E=15Sfmz$tJNoB+oK z-F(L2qu>ZQ3=V)jUO0WW)-e})`B%)HMkh80xQ7^aDE@+2j{?9a4Q&t zGvGA11$3XUh$d;%N?$G}l=1RMqjz#gyzTm?p88`uEmz*?{dtOgf@RbVAp0nWdP z_`x}F7TgNP;0!noZULvjNpJ!j2gkrsa0DC%2f!Y%16&10U>n!~=D=F82CN1bgH>Q9 zSOL!OP5j^-I16qCV{itX2DgAyf`$7Jp8&_fF>n+d0f)f>um|h_SAh}O1~z~>uokQV ztHH%!6<7&Yfb&(v56*$J;8rjOXTWK23pfQ%f)n64I0lY_Bj7MN0QP_#;3_Zz+rS1e z2iAf$U^TcHtO6^+3UGce;s@uzS#T>DgEQbXxCNXNEZl$i1UL?kfurCEI1CPeJzxj8 z3XH%uumQ}0wO|cc4K4<&z)G+JoPQ(ngYNT|-231xxD|Atx8!v9c}otb!7ZTsyd|ek zf)n64I0lY_Bj7MN0QP_#;3_Zz+rS1e2iAf$U^TcHtO6^+3UGc;o%eQd4x9zIf-yJ) zPJ>&(DR5HI<-r7e92^5j!4Ys68~}U34saD1fo)&|m;-CU8n7B%3|4`aUZQ3=V)j zUO0WW)uOxnO4x9zIf-yJ)PJ>&(DR2^;0LQ^Ga1ff3jSHh?*>7OVlQ!Np(|SP52u^YV|{?tN=JI0w#xTfrEd0jI$&;1oCs zPJrX!7&r=!fWzPb*aLQetH20s0~^2`SPRyG)!<^V3akVx!1+bQ56*$J;8rjOXTWK2 z3pfQ%f)n64I0lY_Bj7MN0QP_#;3_Zz+rS1e2iAf$U^TcHtO6^+3UK~)#1GDav*1=R z24}!&a0@sEPJ$EQI5-B5f+OHCH~{v59pEZ30^7g_FbCFxHDEQk7_0&-!3uC*7T-et zgLB|4xD|}S8E_ih0#1RG-~>1hj)9}#2sjK5fIVObxC)HGHn0KAfwf=_SPd=)tH4UI z0-TrN3-N<<;4HWmjKLXj8r%X-fs^0_I1Y}1qu>ZQ3=V)jUO0WW)-bcT1x|t!;5ax2j)EiLFgO7AfF0l}Faq1a z20**T;PVy4FX+abgU`aZ z!ejW1prp>CX>bcT1x^aOaVEfVa10y;N5Ell0PF!fz*U0od=c0NHh?+7!uh?m5`utUM1ooCYVr5wHVn0IR_Ya8{nD3jM(ea0KiC8^CI?0-TkJ z75ak{;0V|OHh|S&1vo43=Y{^@1ULeAfDK?ZSOLyTF%|lQ6W|Eg0XBfuU-lg*S|A`_IUD^0|Kt$1fy5-YEY~ zTqHMIj+-Ul-Y74}9*_$s$5oDtelh2eCF_n+i!(Y{K-FHS8`cKh+lRKZxZ4b8)$+1cPbKE`8x}!z@bNnPZhdW}acXz((&Dx+t zH0OUgIn4S6XEim zGllX0BEN5TM>q4E=X#&yu7{le3eNuI8`wH#%k$>-YN6NLA`PVT2|C85_kH9~~{5s%$@Ktd49PY-S zxLe168-9d;3H%KBWA6IO_}huMf%6aGA5QyC@IdS_H;O~R?!0+RJtcQQXaXIG< z`MHwzAH#oK=I;DE@NXpk58yYu_Tv8(|62Tu@qfkmKgPe0_-gTQrF{!`!*DAf5ofvdtc{&2foe4 zBmCcu>dSXn7x?u}%0I^SnkL@!n9qBd-&dut>wlZni960F-|CN2F5i(;@b725Z@Km| zW^|9{&kq?dX8!Ky7wTrjE+4iK|J|;>Wa=^N(^c?Uxchn5jdvvL)tgrv7>>%4gvJ>eT-3@A%#EM^_&*{$s3X&F=ond@GpmA-%$7egpEQp6+<8 zM|rLL0ZNX)!Kd&$&&P+K3f~U@shrD={}rzHzFeOP_*VSw@b}^W9exu2JUk_HaMv^D zdR`6R3jZ(oEPM(+2ba(AE%e_GUk0Ct|D5&}Kh}8vF7FHOdX23SLyq4&F6XbrAH;tW z{{#3{_}9Z1!`}+8hTre*hm2PP{~~@Zd@pzo-YVD9wQqnQ25*D!&-(XIuGg#NZ^cKX zlN_g#@4LcZ>Xh+hj7s=ixAHf@59WSU!FQMUF?T(Vl6LO+3Hh{YgYu`~=fRh{>nr~q zIjsJSfa8lUQvPjt?Ple_fZq<6&tNXJPhG73Ztx`^QT|oh4~{6GcGpYV-1sr&Y50%f z+qvEm*XvjKKf`|oe-*y_cM~_>|KMNYxLnE({BPs`6Mt9y9{fY`&;7X0=U?~(`0n44 z-1ryZUxGi3e<}S3N45W-;g`bK!ncj7{}cEgpHtol|M=&XH?f{R!u>nI<&XSVd#UEf z2i^Ua`TTsnwm%PE!~Oi7<8FOmJ&^BSE42UaT5bOYmv7SlL0JdfQGbN;2F`aGmgrK|LgD*;6FK7e3`=s@7MZWF#>Sd~RcYY4{)DJG=RdwwQXjk$9%LzSqKcb_-~1F-}~fT?s|^Nmn*yDGwTa69O15CE!XcfR}V7O81uazJ`Mjq<6Xvh z$FI}&17FtjUEZa<_AAO)%KMlbZ#(>2*+*Z9?>hC}epbf^Tw%-6E6=Hp*IuvuA8(>R z{K;PWPpJQZ#NG zrS$*0`g;)1z|G3fI)MI@%Ky1P{o&`lh5omw|FG<R)N`-=_SD)!M%HTgty=@xvc^2j{y;u2q;@uAa8u3our~dOx=>J3Iml1F6wDK3;tp0X* zJMm84um0@b^#76aYxYuJ`+)L&Eq>z`|Bux_+v0yvx%(W8LjC-g@>4B-_-8Eshtz-4 z;-67Ie=z+YR-U!^;p;8_pQ!(c#s7$Mw-38;{+}xUfyEC$(&B$q{d+C`pDEvD@js^g z8Mof-BI^hIg>L0jvHFKu{EsVt%B^S8zV_$J^UQZUe3JQ2J)!<_%y-}y%CBXAm!1gly9Rxsy?m!Rq7#zUr)V{eMbG? zay_Cel)r)dS#_oIv$>x!{5*-haJ`uSO8C?-HJ&%Y2Y#je@jba-Ta~{GA9FwG$kF+J z#>0Q;Eag+b*7kRup?u&s%C9(;@t#uNeKP&whpwdmZ`FV81o}U%{GJu`|DEz%8|e>! z_}%n>M*Tk>L;qRj&*$j>d*v^t=?{OVj{bj8e<^(6S><=0PXGT_{^^MR@Xha~|2FlH zIZ64zACHm`QCA^>3{-5%7Hh=gVZ2m8+|B<)Qe_r`>tS_~% zD8Kkk>TidqsIRGis6S=#zpDJJ7XLq$Kg;^E9sUiA|26fWq8>zpSSqsOLyF{lg01;!A_2Ti+^wB+j)Q44!_yr zf0Ozdi(kIv#~p`Q{O%VAa`amKaQC@UF5jo*OM=|dY4N)sT;=$R#V=nfI#vMs??;a_9@pE^?g&$0dw9Hso!lj#2r<$ImL`Qdjr zE1x=A{U;lg4=huD@Vn{%PUU-ZeYV5@l%;>I`b&s^?DNVWAU_-O%0ESZPQ&lv{x`f! z{r@9Br{VjtJ~SMo{yEgcG<-Gr8eOIS-Q-^k|0(qpeL?*bsh=3`_FK4oZ8%o_%Xog9 zhQA-)aGd&&zfs#y!=K}RHN0E>-N?Ub_{-d{hU3+LjQceWzl8hK(4hV{?#DFz2(EWS zqxwJO{zg|Tf1djl!;j&9MPF3^-`t-Vz6bdlU88=ZyZ*aYR7?-cMUdmPgEYSQM)f~I z{Y5t^e}eTshOg!QF8aFqe|`)7;b-lqJi1x^Iqqi+zk>I>Xj1))-Tim-xk%^Je*xp+ zpUd-hbc?pXVGTaKg?fv=q5hXxZ({h9M=_sU)&EBg{o&oLhtW6H|H8re@Q17Ef1CQd zupY+nFR~s+-%|hemXGiu*2Cy_^%vQC2EUf~gJ??q{Vaa?3+p)l9qONG@x!01#s9YY z%Pf9)uf>0-`d3=~@K<;~i@u}2`}`4CA2Iw~i~lb5Z#fVjeyqj+UG;BUj1OO8@!zff zH}}DZA8+w*QU9Lv@!{84{NGdmZ(aEC8!Z0stN%xy|6=%F7XLl!*IWGX>n;8tsQ)vo z2ly@)|Gny;V)4WOVD)gH`lnm`@cXSEeyILw7C(HO)x)&<$6NgHqb>gX)$g$Q;dzVy zN9vz%@xyOAQmPt4FsUTr5c_$GKJy_$zye=V5LCIjaYF%GQIQs6T4;0Dr*p z;Su%cEFa*f+j{U*^)EY^>jA&p^5IeSU$A_Df6VIPXX?LX`2g>-dU#Czzgs@QKVkI{ ztG|oI4}Zq;;c@k|7C-#gmJdHy{{V|0ewM}mg!&g-{O~_nKKw%cH(UJhl@|Y#>R)5= z!;iH1f2sbLEq?fJ7XPo*|B}TIKicAV|1c-VEmjZk%Psz2tN*ms1N?Iq|8La)h1CQ6 zHLHiG)IZ4LhhJgw|5p7USUtdBuzGk}{o^ctcx?6XJM|kae)#QH56`IY{tmQIZ}2Cq z9%j`)+Tw>VvG{+l{>c_U{BVnZPJQ?Jqi+1@56Z71{uuss)`RF-_5Xbc^MNlT{^-Be z?;`#femmVf$3 zwjTUh`(I-90AFhB!C%z>kkteH4y%Xf)c>XB1H94JgTJaj;N~M!iQzX@bA6vz{~5~% z_(rRT|55*0%Ln+WRu6wu{|}ZA@FA;*?drc^`2c^^^5F&b54HH=4_Q9^ull=N{O}fw z|3&rBxA@^tT0Q(-{ar17c;4cFN&U+$ez^Pml0yFdpZcG)_~9>GJ-n>`sKpOoV)4(b ze~rZtAGG*iQU8%H?hpJDi~k?$|H#$@_;b`l^s4&qb0!P-7rxoz|EK!ju=N1`jI9T+ zsehEk55LdWgMX?2PKzIYoyGre^_N-v@cXHUsA6ZA{uN6se)w({|4!;3Yw^SPv-o#b zzt!T0UuyBYjV^M0f%PDUKYs}KZ&&pXIEd>5Kh@%Yo%+|=^TF$t-)YYS_)9I`Me2Xs zo(JG(S-kW=e5ssoSE>IIDLOgw)PLkQg3EC@^&i7GkpIzc>hDGU$M7}ef3&;$*OUJ- z{Kwq?Xb<(@N&Uz0^T_|`4eDQ2&Gmpk%KeY_RNs9LP$8e-k8}T{H>!U;^&i7y?tiqG z`d#FI41b3EAGrE#7MNcd>Zk^;YkU*H66BQf+^k)jRwttM`M{ z-~AxY2S48G{b2P!ZS@X!pW{@>pF`CDn$vHi`5(hy<9b9#sDGNh|G}>y|Dz+-|2Fv_!w<+#t*fB32P{`XGxA0;1R_$}mrRIC0@ zR{u@Pms)+}w_1HKSN{&nZ`#iu#QnzK&*H1o_MH|V{O@+ZQ|fnHeDEjie%GtN#^Qs& z%>9ni>JM6c@KY?lX7z8je9tI9$MPNiRjco;`VW!sG5!B)`Hp{Knd?)%Uy9|FG3Je0QtwW7NOh@*Vy%zweBWRezh+JNyNHpBf#f z{y|pX@N=!c->ts;T zm)iA(pSW7j-*Ka!-+ix!n@`8rmH$P$Io|LI<*zv|FXIz+yhG)6q5Y)#eckYHC~r0X zP38B#5&v7tZ!tcly#E90Pk&1JwiATQ%lK41-;+7z(P_$Gd>`#UqwOE;#BW!>pY<@l zUY{oqcjLS9@NeSx*HMSIU-@2q_}33+ysv5hhg;!mwEYL0;hoAq+dzN#{`UJ%`hUXK zxBt}f+~+wJ=5vGcC+p#i|GG}b@7D3(dmcXgl5_A^tN+?6_*&&l-1Tws!e2ZMf1Ubw zo`Mhm^n37o)bBbGAHJK#->d%boABX(I-dULtAEV9@Zm>f@h?#SXp5KmpW8uu{F~0D z{d#S`!Q$&uK6obW@mE@W8`SS?!H1t^^XpUprepEpSLHchzxvl^@Zp!I@CVets~sPH z`&sxORR6j&@Zm$J;%`*{y(imTw=@_D@^B{fF|ssGsN(<+oaX!9VK8lcAy!_0NeoALFI0 zzVP=riT0Oj`#Z?57=B>`{$=VveH`P#pC!MdkE(yKIeP;`51jd{fC=~2c9OrXjJ`!t$yJ9 zS$v$Y#p3&9~M%Xh~AH2EHF*7lpp_ZWW1yP5CB>OXc2^M&6; zJwzW-{{iYDhTl#-MCAAPT)w(`7}I*V+Uns-?f;!Me?P1K6}+Fs@T)9;#?-%n z`iSAp)JOC=^_N(Ez+WVPqR*>;t}KM>O8s`~C5As}`Sb<#AF+Ibf6dn8tJS~B z@(cc?<<}S0KhWZbpJMS}qyD2-Kk(;RpQCa0AF%p?f7I&dTJ_JNeqwma;{THRzqa)p zen%7We_8#fcE{#_$`g9{*GQ6D@xD(k9}+LH*+`e)y2p>y7Gf=KU>(Uz(x+ zP3oU%@xw2-dj7il+gSf&_=y((&FWub^$y=)^**V7i`6?kZSmit{!6?c#PI7_52A0V zKWOiN@Gg7*yH)*bSr20P-K+=EH`Tv_^&p1d%6bsprv5do2QmB>SC4Kz_`I$MAF=h| zTiX6Ms|WZqRu8wUKV<6xe6y_wQ|g~?>jC^ITMzC~e-~R1;7?gSd|UlXZ9RZD+In!O z`X|_W0Kd)Z;XCTzY4rgAq}9V+>R(~&0sLO8hwrNYI*T8kwfOH=|1PTs_!CwSThzbR z>H&U%tq0#zzuDFU_!5i%`|96s^#H%NiG03C{kyFm;IFgzf1v)0RuAx3tRC)Ff1A|< zd_Rl-KK0MF^#J}utA`(|f1Je+Z?^cS)n8)q!ymAExL^G*+j;>1w5;Qhxc0i52}Bh#Sh%o7i|ER48@Z}c&L+Y=y^#FdRtp_ve zA8qRa{6LHUVfCN3^#Fdktp`6*{~TKn;45uCctrh6Z9RZrZ|lKN)gQ9;0DhIN2al?M ziLD3lUN;}N9(+O9gKk?7ex~iOwt9d+WcBcv`sdnu0PnK(AXfhvTMyv-*n04|`p;QC zz#p)B___MMwjRKbu=U^x_1|gh0sLyKhhM1wWm^y6AGG!0N%ezn`rK@Yh-Ve^&oNTMytHY(4mk`pvc;z*83g^Xh-X>i;?A z=UV;4H(UMxRsD5V|M0`z`CR>fQS1M`)PKzQAEExE|Iz-plm9Wih5C>Frv6ImKZYMn z{YTr?f0g`?;ZKnN(F^L|O8&?2Q>p*xf7Rcc`j6pnq5h*6)&B_fAHzRN{YQUS|7_|% zhM!CQM=z;=1@#}ppCtdI|5N|<7C-!Q@;`c6{Ts;t7`~bOkLJ}s#^Q(XWAVSD{&VDi z4F4SYAN@o9-X^X882$`^ z{i7{@c*^46RsFohzlZYUEMENUsQ2h~>hEOn!n4$Sv`GC!t=`|D{59U+V*KZM-i=VJ3jTde+>PZ#wcKXp3y`LSf{uB0o_7>$Iw)ZpmsTPm>AV4|#Egty2g!22Xp7EctdVah5`&m81msmYltH0Fh8NR2jXG_&T)ao04xz+bU>c5?MWB8s{ z&j+i&&FUHcq}B5w>R)a33_p%~j)`v{i`V_bk{r8Oyzo;k-ow;Ci+YaXM^n!c`LvRH zj*is!PcNr_zoh&ToBunM-(dF(evGZRN2|Y&t+$N#xUE0eb}|4qT}1z{-xDAUi{&m3fJQY?^Hf^k@5$Ya=y*V|GdBQs*9Dky@mep z&1>oZ5%n)*yy!oaPrifxmnc8w5chF{#NVR)(Y=Wu{xO?>tNJ_H z{7-<}{M(dgZ2s_G<~Met`rkfG$B#}@{^Y@&f2Hz$nQsg~k@=3jNBu2J=>J~jx7hqo zR({n5%>NqA*FTZJ(YW$02jjyJx9f4O`VE%<@QE7E_a*heX+Hc7#20;8{R!fW;ZIf5 z|10VrMZLxFU3&1ZQ-3q_jp2LP_4=y%@3Q&B`)z#wz5T8=j5nd}&vNUpT$&husa+rb zJ$yflpMMX(mHQvvsQo`EeGBz^;?9Nj@JHS7la$xOWB3=%U#b2#&4+*Fjr4zy`s?5^ z{224!tNvBy!?&4#vihf*58uoDQ`FzKC-K7%H9u0{eJ)|)`oM33N2jX)bSM64%D>F> zVsyIlgYEql{>f(IJ45~NW$6#!?`-@t)qms^eE8`+4@U1(e-HEF&#t8ZS?a%Z9{u6R z+w;RJ^&fa2K77!Azje0yT|6(u@ZYyG{`=Lxxq<%hm+blV9QB{C$A=%t^@={A{tfTJ zhi^WS@y}I%Dd&sf@3ryIQ~%TU^BVku*H={RC8>Fatkdo|P1dKqc9qY!n2puy9TI$E~Y52}dm5;%Xm2u5|-m*tCZg?_38M)dCLF8jlZa(qTxr%>vmUvmh*q!^_Mo^llLKa zEONdyoo>|m?1Aq-XT%-b*QmdJgZf*g9t-myQvMC;>(1Y>PS3a4`HuG~A7cK~ZXuB4 z2h4x^eC1a#|AryuUleftr$4T|g7Kz5sr+2VYxtD%n;5SFe~|H}zoNbyrZAuDl>Z#w z(W(4?+DB`Yw{tzJ>omSryFT#E?tId8{c`n};E%xPW$x+}!mU^?_oA48W{*-nnP~5} z-50lCE%{o^7bW`tL-MECe~Vn7V*XrW{9_V)PGTu;?{0H3zcDfY`*th!&wX7fZ%&NA zEYV&bcS^>8CNaJ{ck%iEn3xZrU#%Bc{=ZJ{M{#>s*2Vm!#Pyg;T(615{9j3250^W| z)yfsy4t$B^9S0ydb+zVK)-N#rrTcD*{i{YS8My%uUQzO zr*~r~WOe6Yccy;9QL3}*8px;Wdfk;+>;7vW*w`)T{#zseb;*DILz@PMHdV+~EP!0= zHQj4_`wC|tG+oA)Yp}l82^Vzso!?tHS@%Yv(xLBywF`WG`{0GWo4R_IZR%XTzI$21 zZST<#hWe!E!n6xaTFO+~``5}$+_2q)L+b^*hkFaGx37SDGM5eOx<%j6yP>;%b@#g7 zzIM6yy#0g&RQXb*}I2lvB7nB6n4;`-eK$4@pJ}^VI<- zY8JP5xz~kE)|Ug_8#nfApYFzu>spk#B53at*`<$5y3RFg+?|!l_7zfPZRh&+t2?DE z2ZvUxVavb{Vbj`FA%sHm7dp4gY}d#M2Q)!e4@tT83z1oOZBXnhywD1gG~d`?(cU@O z)!XZG-jTlb?dv=HB%Rj^X%}x$YOHbanOZD+3= z$E}9#Yx_6qa_fyoK-$dR`HFU3*O#pwTEG6n-Zh(gT)Osju3uXqGC*OuXI&`1jBAEA zZ1}LwRx)=XGYiu%2o|?wT7gTJi>dE!J6ef4G^n{zD!O%Mhf-KiCDSCt_6E``+_`!DG3a{{%!THgJI4Q*WS zU`_Yxp>+k`=L$^}Hyd6Sa!#sTs^>$J(cE1@c?*^_FGz(pBK576YcGzZ%xd?d@V+Y8 zxqhIh(+M)wTrQn=FZJy}UUUtlm&*k)&0f?lcZx1s?j5Z6qHgKm*QGCb&R7QO>c3nr zl6zl}85Av)%T-!?;l^HP6>g^Hje8eEad!b)ctcW$bdsf`zpJ;o#a{qwbAU8L6Vb}7C)mN@^U#D~A?5yg# zz*M+rkhQ(T?S%(~#N))W^9OqR<=LZqL%%#@tnJ+>SBG|e{TnyP`@%(?ZgDa(`TlHe z<^9=eq_nBLgAK`>z&g1wrN(mKSQxy2wjrFl-vSo$$L$?I$Oa_;CrmT%D%PQ7M z3KU+}Ei-|6y1O?t*uJKB&^;^_SH+H}!etxf4MDuM8@uKI)PhT5ms#@2)~>Iu7M1Dh zUS!EVDBS!Vjr9V_C@y#G!GjyUaGvf#sYZEV>i*!6Tn%YlytJ+x>fE@7eMna@_p)!tOBOn( zt~RxgwZ*twMeH?8iBY$L*lRgOVbLTEBW^PGT23uXL=m&e71q0$+ z%uPjKF%czh8v3diEL;th+yu;Yr`Ol+vJOiXtnZhT7#75h-KYyM^wMtZ?UyCw!-aSC zg_TKuL@F#Cy)ug3dAIu5b8BZpw4<32XUuTRtwLg=XZXn zv!eav3)Z%{2UU4|INd#ux1V(4=_P8*na%AdMJ3XSr=Qa9e&S5(ji)!Ccw%W9w6vDq zX2;#awd3i(eMO>4lIL2TlIYYdQgNC%UVMX-JlE=!#2`(HPL3B3DnBD7TI32!Nt>M4 zE9)s4Pf2@9y;F)qXiUx~?+S0JtgZY8Ba-j zimU>qSEr@LyPYdUD!zb8E{WuKY8I*ZemY(}NRmq;`GYhiIyqiEs3cONg(On4P2N*- zo|5&HjHjeMrQRvUK{a~k_LQ8bWIZM0DQQp1=ac8kc}mt(GMGf(^QOa|zPD!jLD-w;8T++|)BpWhI?o5(Py7`@&5}h1Rq+6neq+7C0-cxd( zlJ%5~r=&fl-YF&N=AFASspLE*>nRyeNqb5@?~Uv!Sx?D$O4?KMId5c7$$Co0Q_`N2 za!T>_YHjwCt3{;ZCP^+C>33R@=#=D=k$$J~}Pf2@9y;F)WU!!+!Psw>o)>AT`lJ=B*K6$R3r(``P<0)xR$>+S0JtgZY8Ba-j zO3G8}oKk!RTbukG6{)yMOM**|CX^KkE(s}0VqI+(sW_J$FFs9@OM?1?G$lGExuj#_ zG%a~g$$3h~Q_`MN@08*RHzs(l)hWdxw&Xn}=P6lF$#_cIQ}X%bxpJP8^^}aKq&+2{ z^G5cRtfyo=CGC{r>($!mxAQN=CBMfx^NiN^oS(`fmE3vZ#dk;k zCZvQ*D*J=1NHj`vNoBuNbD~p{ODg-Fni8FoTvAzDlmwLbl$@tzJtgBQX-}zlO7X>N zOrE>dQ}UjY^OUToWIQG9DfxWz>^V=#dP>Gq(wFpNO2$*to+7_gP29ga zQQp(OO#Ur=St=uD;(@Uxn`ke*_?|ewm`ehSk{Dz~qEV7d0{fksMJmoT$BWOD?98i>3sZG!><|8YE4VO3qWVo|5sDv{Q~LIOcv<)d zdiT;jM(DrR%iU~uO3^kyG?MH|CFdzwPsw;n+9|~oZcL7w_mrHcWIZM0DQQp1 z=ac8kc}mt(GM|&s zcP7atiTy!VBswLzB(dMAS)`IAP7LDw;+aSi`-3zk8YQ_Tv9u^YjU;hW$$3iFQ!<{C zc1rOC8PDw85oH&i7b5hB9O4d^{o|1M-@q`au$! zsMnX#Q)P77^Aa2Uq*NPLIf z#{|zRTV#T|Y?KM=vRx*qr^@KEnI_m?w$uc5*;o_QWqVCfmrXW7Jyk}REjYpUxiY$J z#|gHVO*uhbw&n!&x*dA)eQaG}t&3I3PPm=*yzQhw8*ZRpe}o7 zg1YRW3F@+sCaBA9nxLL4qc7i~7heV08ykE-+@Y65l`o^qJ{=pUq`mCc3F@+EC#cKL zouHm7qszXYVEbGdUH13{+sjU$pf3A;f_i-!Jyk}pE2GQqq2TzrGP>*}3bvR1L_uA4 z6$SPB9eQy#$RGLzvtfr`e0Q4{S{JKQDPdjq@!04k?PWJlP?tSDL0xwC1a;Zp6Vzpw zkLks+HU?E$^B44zS?0^=vLDDsFKI8kf`Yp24GQYALnx@%m(f#YblF!F97lE+1$EhD z6x3y>QBartMnS#4j9ynpmt9K1adKsJ*|8LCFZ-5)y6j#G>h)!G*~w(>i?gJ)DWuAK z$AVsb*PDZ?{CpYKW#f>IUOY;RY#$2hvWY0D%T^-Oi|5|Bpq7j-n~1D+i7s1-g1T%d z3hJ`0D5%TkqM)8Cqs!K#V0+ns6x3xKQc#!8NI_k;Bn95J!=(2e!*j~0U z1$EiT6x8d>=&3S#-44C@uD3SY=*6mJ?1El=*PDZ?WNcWM{YW-?@hB~_D=DbU-lU)| zJCuUD>{ANrsU3Q8RE^=*`7*lfUkZ*cyO@Hy>}3k-vZE=e*O$>{zf-Wi?0O37viB*d z%MPfZF8iQ@dVLu^RYsTHQ^9d^Wpvp|6>Km2se-!fstW3|w<@T+zorU2kF@4Ps$}?r zUXq(ZwK=HDvrAadm(gXflg*{%oU-F7sLQ^mpf0wwIk#L0$Gw1$Eg)71UE@blGDSY%e>lg1YRt3hJ`!DyYletDs(AMo*Q|Wye-< z9ND)O)N^HY*~1lVFFUz{y6oo)>h)#xR2f}%f!R34+0&W}sZv)9dP$ClRoO&kqm;HT zqsxY>V0+nC71U*ORZy2LRzW>gMqj=|FTMti;ZbCJmW^KAT7Fts&`Y9~&0E&KM3*gG zL0vX-1$EiZ71U)@S5U7nqsx}BV0+p471U+>S5TKtU_o8Bf(7;ZGJ2|vE*r>#;U3bvO$UO_#zLobfBG2B{qeFaC6y8*&xh=GP>+b3yveZ(}H@gj4nIXg6(C$T2Pl=YeBuf zj4qqkg6(Aso9V?_)tU*ZQa=lNNsb5A=AbI|6V_#`nVqv_Y}s%Y)MeXQP?ybTK|QrY zFOIY^+*-Dy1xJxhX+d4KrUiA`pcd3+n_5t>FQeC$(PeX6a2(m<7Sv^5wY*u%MUZ zY*1|us!|VOU3R0{IZMWtJ!wH*cBTb&*`F5F>&xh=9eVK4I$x}Yw*>4LiKsSE0|vo5IDm(f#YblH6u z97jH_DyYj&yr3@o@q)VS$_wiCWpvrIXYGscdux42l{#6_OL94=HV0Lyldvuu-t3$u zW6QR;pe~!=g1T&h3+nY{^wbW$_zEZvk%T^U`r>IKJ<4SPXdw(SLV*}NCj>&xh=GP-Q=3yve({DQh{_6zE= zvg zcId^iHZF`(tV-rD=p|P`cIE}oD*N+-y6n;m>atfasLPJMpq?tD%YMFKd)d_&)Mam9 zP?sHkLA}0=o+_i)mCHTf3Gri>g237fF ztk9m0TvJ%jmeDh1^z;tBc#iU^xS_M=%jmf>dbW(7DWj*$==EjvTs}O{Y#BXMMo*W~ z>&xh=GI~B2o=>ifo-Lzi%IN7bdVLu^RYtGdp%>qEc^X+ByzgN(-xSt!W%O(rJyS+c z@6bzU*%&@=zKotLqi4(LnKF91j9ydKYTvt{&589iM_uP>vg%INuA znR%Acvt{&589iM_uP>w5?a)i}p|v)6J@ZXrJy%B0meDh1^mG}$zKotKqvspT%(IN1 zEu&}3=;<AAK39p=c1QK~^L>CAs|JjNhqQq~bF>UVP>xmp`2G2Wd)lN^<$bnZ#*ilWS6uN2JoJ z$Y!RbB9BGhwQCfqc*aRC&+W-!GCH8xprSo`I`Jd>9?!%HF+%e+quWBkXjp1U6B{sF2q?V zRriVe?u!|gm*!fl@MI|`nzSUil&;@tg-FF!=y-8XC%KfeKS*<;Q<6*R`kk5*oswKi zS6UR$O@4|`D)MBRXd};*2}PbJ6N)@XmPXl_Y#~pMi9Yhom{8wFVnUH8#DpTx zdI?3I@)C+X-z5}zvP&rPOqWpP(~%R3Jg+5`oTtb$TB40Soh1}`E=wpWr?@|+ci$`^ z-{!HbOTNHnnbY`C?j6F8&*m=G_(bjnanODKzJ5r2duwg!{c*h5m!C^SN#=i|Q;XNh zDaFYx72yxFLZsrXbG*1yl1oMSgES{PCAn0D->E6lDaoZGq($-Eq#}}vJj*89$Wv@W zk>}ThB2TWRSGY03<-IJ~N1jp>qvSkAo=g*M|>UlJgXKmQ1vfr^tjN l&yNX3p7;_<&Qs(mFVRMx?-GhU*(DTtc1tL-pt~;{`+r*i>IMJ+ literal 0 HcmV?d00001 diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/nkf-0.2.0/lib/kconv.rb b/ios/vendor/bundle/ruby/2.6.0/gems/nkf-0.2.0/lib/kconv.rb new file mode 100644 index 0000000..f52b755 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/nkf-0.2.0/lib/kconv.rb @@ -0,0 +1,283 @@ +# frozen_string_literal: false +# +# kconv.rb - Kanji Converter. +# +# $Id$ +# +# ---- +# +# kconv.rb implements the Kconv class for Kanji Converter. Additionally, +# some methods in String classes are added to allow easy conversion. +# + +require 'nkf' + +# +# Kanji Converter for Ruby. +# +module Kconv + # + # Public Constants + # + + #Constant of Encoding + + # Auto-Detect + AUTO = NKF::AUTO + # ISO-2022-JP + JIS = NKF::JIS + # EUC-JP + EUC = NKF::EUC + # Shift_JIS + SJIS = NKF::SJIS + # BINARY + BINARY = NKF::BINARY + # NOCONV + NOCONV = NKF::NOCONV + # ASCII + ASCII = NKF::ASCII + # UTF-8 + UTF8 = NKF::UTF8 + # UTF-16 + UTF16 = NKF::UTF16 + # UTF-32 + UTF32 = NKF::UTF32 + # UNKNOWN + UNKNOWN = NKF::UNKNOWN + + # + # Public Methods + # + + # call-seq: + # Kconv.kconv(str, to_enc, from_enc=nil) + # + # Convert str to to_enc. + # to_enc and from_enc are given as constants of Kconv or Encoding objects. + def kconv(str, to_enc, from_enc=nil) + opt = '' + opt += ' --ic=' + from_enc.to_s if from_enc + opt += ' --oc=' + to_enc.to_s if to_enc + + ::NKF::nkf(opt, str) + end + module_function :kconv + + # + # Encode to + # + + # call-seq: + # Kconv.tojis(str) => string + # + # Convert str to ISO-2022-JP + def tojis(str) + kconv(str, JIS) + end + module_function :tojis + + # call-seq: + # Kconv.toeuc(str) => string + # + # Convert str to EUC-JP + def toeuc(str) + kconv(str, EUC) + end + module_function :toeuc + + # call-seq: + # Kconv.tosjis(str) => string + # + # Convert str to Shift_JIS + def tosjis(str) + kconv(str, SJIS) + end + module_function :tosjis + + # call-seq: + # Kconv.toutf8(str) => string + # + # Convert str to UTF-8 + def toutf8(str) + kconv(str, UTF8) + end + module_function :toutf8 + + # call-seq: + # Kconv.toutf16(str) => string + # + # Convert str to UTF-16 + def toutf16(str) + kconv(str, UTF16) + end + module_function :toutf16 + + # call-seq: + # Kconv.toutf32(str) => string + # + # Convert str to UTF-32 + def toutf32(str) + kconv(str, UTF32) + end + module_function :toutf32 + + # call-seq: + # Kconv.tolocale => string + # + # Convert self to locale encoding + def tolocale(str) + kconv(str, Encoding.locale_charmap) + end + module_function :tolocale + + # + # guess + # + + # call-seq: + # Kconv.guess(str) => encoding + # + # Guess input encoding by NKF.guess + def guess(str) + ::NKF::guess(str) + end + module_function :guess + + # + # isEncoding + # + + # call-seq: + # Kconv.iseuc(str) => true or false + # + # Returns whether input encoding is EUC-JP or not. + # + # *Note* don't expect this return value is MatchData. + def iseuc(str) + str.dup.force_encoding(EUC).valid_encoding? + end + module_function :iseuc + + # call-seq: + # Kconv.issjis(str) => true or false + # + # Returns whether input encoding is Shift_JIS or not. + def issjis(str) + str.dup.force_encoding(SJIS).valid_encoding? + end + module_function :issjis + + # call-seq: + # Kconv.isjis(str) => true or false + # + # Returns whether input encoding is ISO-2022-JP or not. + def isjis(str) + /\A [\t\n\r\x20-\x7E]* + (?: + (?:\x1b \x28 I [\x21-\x7E]* + |\x1b \x28 J [\x21-\x7E]* + |\x1b \x24 @ (?:[\x21-\x7E]{2})* + |\x1b \x24 B (?:[\x21-\x7E]{2})* + |\x1b \x24 \x28 D (?:[\x21-\x7E]{2})* + )* + \x1b \x28 B [\t\n\r\x20-\x7E]* + )* + \z/nox =~ str.dup.force_encoding('BINARY') ? true : false + end + module_function :isjis + + # call-seq: + # Kconv.isutf8(str) => true or false + # + # Returns whether input encoding is UTF-8 or not. + def isutf8(str) + str.dup.force_encoding(UTF8).valid_encoding? + end + module_function :isutf8 +end + +class String + # call-seq: + # String#kconv(to_enc, from_enc) + # + # Convert self to to_enc. + # to_enc and from_enc are given as constants of Kconv or Encoding objects. + def kconv(to_enc, from_enc=nil) + from_enc = self.encoding if !from_enc && self.encoding != Encoding.list[0] + Kconv::kconv(self, to_enc, from_enc) + end + + # + # to Encoding + # + + # call-seq: + # String#tojis => string + # + # Convert self to ISO-2022-JP + def tojis; Kconv.tojis(self) end + + # call-seq: + # String#toeuc => string + # + # Convert self to EUC-JP + def toeuc; Kconv.toeuc(self) end + + # call-seq: + # String#tosjis => string + # + # Convert self to Shift_JIS + def tosjis; Kconv.tosjis(self) end + + # call-seq: + # String#toutf8 => string + # + # Convert self to UTF-8 + def toutf8; Kconv.toutf8(self) end + + # call-seq: + # String#toutf16 => string + # + # Convert self to UTF-16 + def toutf16; Kconv.toutf16(self) end + + # call-seq: + # String#toutf32 => string + # + # Convert self to UTF-32 + def toutf32; Kconv.toutf32(self) end + + # call-seq: + # String#tolocale => string + # + # Convert self to locale encoding + def tolocale; Kconv.tolocale(self) end + + # + # is Encoding + # + + # call-seq: + # String#iseuc => true or false + # + # Returns whether self's encoding is EUC-JP or not. + def iseuc; Kconv.iseuc(self) end + + # call-seq: + # String#issjis => true or false + # + # Returns whether self's encoding is Shift_JIS or not. + def issjis; Kconv.issjis(self) end + + # call-seq: + # String#isjis => true or false + # + # Returns whether self's encoding is ISO-2022-JP or not. + def isjis; Kconv.isjis(self) end + + # call-seq: + # String#isutf8 => true or false + # + # Returns whether self's encoding is UTF-8 or not. + def isutf8; Kconv.isutf8(self) end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/nkf-0.2.0/lib/nkf.rb b/ios/vendor/bundle/ruby/2.6.0/gems/nkf-0.2.0/lib/nkf.rb new file mode 100644 index 0000000..d71717d --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/nkf-0.2.0/lib/nkf.rb @@ -0,0 +1,6 @@ +if RUBY_ENGINE == "jruby" + require 'nkf.jar' + JRuby::Util.load_ext('org.jruby.ext.nkf.NKFLibrary') +else + require 'nkf.so' +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/nkf-0.2.0/nkf.gemspec b/ios/vendor/bundle/ruby/2.6.0/gems/nkf-0.2.0/nkf.gemspec new file mode 100644 index 0000000..62a767c --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/nkf-0.2.0/nkf.gemspec @@ -0,0 +1,43 @@ +source_version = ["", "ext/nkf/"].find do |dir| + begin + break File.open(File.join(__dir__, "#{dir}nkf.c")) {|f| + f.gets("\n#define NKF_GEM_VERSION ") + f.gets[/\s*"(.+)"/, 1] + } + rescue Errno::ENOENT + end +end + +Gem::Specification.new do |spec| + spec.name = "nkf" + spec.version = source_version + spec.authors = ["NARUSE Yui", "Charles Oliver Nutter"] + spec.email = ["naruse@airemix.jp", "headius@headius.com"] + + spec.summary = %q{Ruby extension for Network Kanji Filter} + spec.description = %q{Ruby extension for Network Kanji Filter} + spec.homepage = "https://github.com/ruby/nkf" + spec.required_ruby_version = Gem::Requirement.new(">= 2.3.0") + spec.licenses = ["Ruby", "BSD-2-Clause"] + + spec.metadata["homepage_uri"] = spec.homepage + spec.metadata["source_code_uri"] = spec.homepage + + # Specify which files should be added to the gem when it is released. + # The `git ls-files -z` loads the files in the RubyGem that have been added into git. + spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do + `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) } + end + + if Gem::Platform === spec.platform and spec.platform =~ 'java' or RUBY_ENGINE == 'jruby' + spec.platform = 'java' + spec.licenses += ["EPL-2.0", "LGPL-2.1"] + spec.files += Dir["lib/nkf.jar"] + else + spec.extensions = ["ext/nkf/extconf.rb"] + end + + spec.bindir = "exe" + spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) } + spec.require_paths = ["lib"] +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/LICENSE.txt b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/LICENSE.txt new file mode 100644 index 0000000..a009cae --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/LICENSE.txt @@ -0,0 +1,22 @@ +Copyright (C) 1993-2013 Yukihiro Matsumoto. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in the +documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/NEWS.md b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/NEWS.md new file mode 100644 index 0000000..1462712 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/NEWS.md @@ -0,0 +1,843 @@ +# News + +## 3.4.4 - 2025-09-10 {#version-3-4-4} + +### Improvement + + * Accept `REXML::Document.new("")` for backward compatibility + * GH-296 + * GH-295 + * Patch by NAITOH Jun + * Reported by Joe Rafaniello + +### Thanks + + * NAITOH Jun + + * Joe Rafaniello + +## 3.4.3 - 2025-09-07 {#version-3-4-3} + +### Improvement + + * Reject no root element XML as an invalid XML + * GH-289 + * GH-291 + * Patch by NAITOH Jun + * Reported by Sutou Kouhei + +### Fixes + + * Fixed an issue with `IOSource#read_until` when reaching the end of a file + * GH-287 + * GH-288 + * Patch by NAITOH Jun + * Reported by Jason Thomas + +### Thanks + + * NAITOH Jun + + * Sutou Kouhei + + * Jason Thomas + +## 3.4.2 - 2025-08-26 {#version-3-4-2} + +### Improvement + + * Improved performance. + * GH-244 + * GH-245 + * GH-246 + * GH-249 + * GH-256 + * Patch by NAITOH Jun + + * Raise appropriate exception when failing to match start tag in DOCTYPE + * GH-247 + * Patch by NAITOH Jun + + * Deprecate accepting array as an element in XPath.match, first and each + * GH-252 + * Patch by tomoya ishida + + * Don't call needless encoding_updated + * GH-259 + * Patch by Sutou Kouhei + + * Reuse XPath::match + * GH-263 + * Patch by pboling + + * Cache redundant calls for doctype + * GH-264 + * Patch by pboling + + * Use Safe Navigation (&.) from Ruby 2.3 + * GH-265 + * Patch by pboling + + * Remove redundant return statements + * GH-266 + * Patch by pboling + + * Added XML declaration check & Source#skip_spaces method + * GH-282 + * Patch by NAITOH Jun + * Reported by Sofi Aberegg + +### Fixes + + * Fix docs typo + * GH-248 + * Patch by James Coleman + + * Fix reverse sort in xpath_parser + * GH-251 + * Patch by tomoya ishida + + * Fix duplicate responses in XPath following, following-sibling, preceding, preceding-sibling + * GH-255 + * Patch by NAITOH Jun + + * Fix wrong Encoding resolution + * GH-258 + * Patch by Sutou Kouhei + + * Handle nil when parsing fragment + * GH-267 + * GH-268 + * Patch by pboling + + * [Documentation] Use # to reference instance methods + * GH-269 + * GH-270 + * Patch by pboling + + * Fix & Deprecate REXML::Text#text_indent + * GH-273 + * GH-275 + * Patch by pboling + + * remove bundler from dev deps + * GH-276 + * GH-277 + * Patch by pboling + + * remove ostruct from dev deps + * GH-280 + * GH-281 + * Patch by pboling + +### Thanks + + * NAITOH Jun + + * tomoya ishida + + * James Coleman + + * pboling + + * Sutou Kouhei + + * Sofi Aberegg + +## 3.4.1 - 2025-02-16 {#version-3-4-1} + +### Improvement + + * Improved performance. + * GH-226 + * GH-227 + * GH-237 + * Patch by NAITOH Jun + +### Fixes + + * Fix serialization of ATTLIST is incorrect + * GH-233 + * GH-234 + * Patch by OlofKalufs + * Reported by OlofKalufs + +### Thanks + + * NAITOH Jun + + * OlofKalufs + +## 3.4.0 - 2024-12-15 {#version-3-4-0} + +### Improvement + + * Improved performance. + * GH-216 + * Patch by NAITOH Jun + + * JRuby: Improved parse performance. + * GH-219 + * Patch by João Duarte + + * Added support for reusing pull parser. + * GH-214 + * GH-220 + * Patch by Dmitry Pogrebnoy + + * Improved error handling when source is `IO`. + * GH-221 + * Patch by NAITOH Jun + +### Thanks + + * NAITOH Jun + + * João Duarte + + * Dmitry Pogrebnoy + +## 3.3.9 - 2024-10-24 {#version-3-3-9} + +### Improvements + + * Improved performance. + * GH-210 + * Patch by NAITOH Jun. + +### Fixes + + * Fixed a parse bug for text only invalid XML. + * GH-215 + * Patch by NAITOH Jun. + + * Fixed a parse bug that `�x...;` is accepted as a character + reference. + +### Thanks + + * NAITOH Jun + +## 3.3.8 - 2024-09-29 {#version-3-3-8} + +### Improvements + + * SAX2: Improve parse performance. + * GH-207 + * Patch by NAITOH Jun. + +### Fixes + + * Fixed a bug that unexpected attribute namespace conflict error for + the predefined "xml" namespace is reported. + * GH-208 + * Patch by KITAITI Makoto + +### Thanks + + * NAITOH Jun + + * KITAITI Makoto + +## 3.3.7 - 2024-09-04 {#version-3-3-7} + +### Improvements + + * Added local entity expansion limit methods + * GH-192 + * GH-202 + * Reported by takuya kodama. + * Patch by NAITOH Jun. + + * Removed explicit strscan dependency + * GH-204 + * Patch by Bo Anderson. + +### Thanks + + * takuya kodama + + * NAITOH Jun + + * Bo Anderson + +## 3.3.6 - 2024-08-22 {#version-3-3-6} + +### Improvements + + * Removed duplicated entity expansions for performance. + * GH-194 + * Patch by Viktor Ivarsson. + + * Improved namespace conflicted attribute check performance. It was + too slow for deep elements. + * Reported by l33thaxor. + +### Fixes + + * Fixed a bug that default entity expansions are counted for + security check. Default entity expansions should not be counted + because they don't have a security risk. + * GH-198 + * GH-199 + * Patch Viktor Ivarsson + + * Fixed a parser bug that parameter entity references in internal + subsets are expanded. It's not allowed in the XML specification. + * GH-191 + * Patch by NAITOH Jun. + + * Fixed a stream parser bug that user-defined entity references in + text aren't expanded. + * GH-200 + * Patch by NAITOH Jun. + +### Thanks + + * Viktor Ivarsson + + * NAITOH Jun + + * l33thaxor + +## 3.3.5 - 2024-08-12 {#version-3-3-5} + +### Fixes + + * Fixed a bug that `REXML::Security.entity_expansion_text_limit` + check has wrong text size calculation in SAX and pull parsers. + * GH-193 + * GH-195 + * Reported by Viktor Ivarsson. + * Patch by NAITOH Jun. + +### Thanks + + * Viktor Ivarsson + + * NAITOH Jun + +## 3.3.4 - 2024-08-01 {#version-3-3-4} + +### Fixes + + * Fixed a bug that `REXML::Security` isn't defined when + `REXML::Parsers::StreamParser` is used and + `rexml/parsers/streamparser` is only required. + * GH-189 + * Patch by takuya kodama. + +### Thanks + + * takuya kodama + +## 3.3.3 - 2024-08-01 {#version-3-3-3} + +### Improvements + + * Added support for detecting invalid XML that has unsupported + content before root element + * GH-184 + * Patch by NAITOH Jun. + + * Added support for `REXML::Security.entity_expansion_limit=` and + `REXML::Security.entity_expansion_text_limit=` in SAX2 and pull + parsers + * GH-187 + * Patch by NAITOH Jun. + + * Added more tests for invalid XMLs. + * GH-183 + * Patch by Watson. + + * Added more performance tests. + * Patch by Watson. + + * Improved parse performance. + * GH-186 + * Patch by tomoya ishida. + +### Thanks + + * NAITOH Jun + + * Watson + + * tomoya ishida + +## 3.3.2 - 2024-07-16 {#version-3-3-2} + +### Improvements + + * Improved parse performance. + * GH-160 + * Patch by NAITOH Jun. + + * Improved parse performance. + * GH-169 + * GH-170 + * GH-171 + * GH-172 + * GH-173 + * GH-174 + * GH-175 + * GH-176 + * GH-177 + * Patch by Watson. + + * Added support for raising a parse exception when an XML has extra + content after the root element. + * GH-161 + * Patch by NAITOH Jun. + + * Added support for raising a parse exception when an XML + declaration exists in wrong position. + * GH-162 + * Patch by NAITOH Jun. + + * Removed needless a space after XML declaration in pretty print mode. + * GH-164 + * Patch by NAITOH Jun. + + * Stopped to emit `:text` event after the root element. + * GH-167 + * Patch by NAITOH Jun. + +### Fixes + + * Fixed a bug that SAX2 parser doesn't expand predefined entities for + `characters` callback. + * GH-168 + * Patch by NAITOH Jun. + +### Thanks + + * NAITOH Jun + + * Watson + +## 3.3.1 - 2024-06-25 {#version-3-3-1} + +### Improvements + + * Added support for detecting malformed top-level comments. + * GH-145 + * Patch by Hiroya Fujinami. + + * Improved `REXML::Element#attribute` performance. + * GH-146 + * Patch by Hiroya Fujinami. + + * Added support for detecting malformed `` comments. + * GH-147 + * Patch by Hiroya Fujinami. + + * Added support for detecting unclosed `DOCTYPE`. + * GH-152 + * Patch by Hiroya Fujinami. + + * Added `changlog_uri` metadata to gemspec. + * GH-156 + * Patch by fynsta. + + * Improved parse performance. + * GH-157 + * GH-158 + * Patch by NAITOH Jun. + +### Fixes + + * Fixed a bug that large XML can't be parsed. + * GH-154 + * Patch by NAITOH Jun. + + * Fixed a bug that private constants are visible. + * GH-155 + * Patch by NAITOH Jun. + +### Thanks + + * Hiroya Fujinami + + * NAITOH Jun + + * fynsta + +## 3.3.0 - 2024-06-11 {#version-3-3-0} + +### Improvements + + * Added support for strscan 0.7.0 installed with Ruby 2.6. + * GH-142 + * Reported by Fernando Trigoso. + +### Thanks + + * Fernando Trigoso + +## 3.2.9 - 2024-06-09 {#version-3-2-9} + +### Improvements + + * Added support for old strscan. + * GH-132 + * Reported by Adam. + + * Improved attribute value parse performance. + * GH-135 + * Patch by NAITOH Jun. + + * Improved `REXML::Node#each_recursive` performance. + * GH-134 + * GH-139 + * Patch by Hiroya Fujinami. + + * Improved text parse performance. + * Reported by mprogrammer. + +### Thanks + + * Adam + * NAITOH Jun + * Hiroya Fujinami + * mprogrammer + +## 3.2.8 - 2024-05-16 {#version-3-2-8} + +### Fixes + + * Suppressed a warning + +## 3.2.7 - 2024-05-16 {#version-3-2-7} + +### Improvements + + * Improve parse performance by using `StringScanner`. + + * GH-106 + * GH-107 + * GH-108 + * GH-109 + * GH-112 + * GH-113 + * GH-114 + * GH-115 + * GH-116 + * GH-117 + * GH-118 + * GH-119 + * GH-121 + + * Patch by NAITOH Jun. + + * Improved parse performance when an attribute has many `>`s. + + * GH-126 + +### Fixes + + * XPath: Fixed a bug of `normalize_space(array)`. + + * GH-110 + * GH-111 + + * Patch by flatisland. + + * XPath: Fixed a bug that wrong position is used with nested path. + + * GH-110 + * GH-122 + + * Reported by jcavalieri. + * Patch by NAITOH Jun. + + * Fixed a bug that an exception message can't be generated for + invalid encoding XML. + + * GH-29 + * GH-123 + + * Reported by DuKewu. + * Patch by NAITOH Jun. + +### Thanks + + * NAITOH Jun + * flatisland + * jcavalieri + * DuKewu + +## 3.2.6 - 2023-07-27 {#version-3-2-6} + +### Improvements + + * Required Ruby 2.5 or later explicitly. + [GH-69][gh-69] + [Patch by Ivo Anjo] + + * Added documentation for maintenance cycle. + [GH-71][gh-71] + [Patch by Ivo Anjo] + + * Added tutorial. + [GH-77][gh-77] + [GH-78][gh-78] + [Patch by Burdette Lamar] + + * Improved performance and memory usage. + [GH-94][gh-94] + [Patch by fatkodima] + + * `REXML::Parsers::XPathParser#abbreviate`: Added support for + function arguments. + [GH-95][gh-95] + [Reported by pulver] + + * `REXML::Parsers::XPathParser#abbreviate`: Added support for string + literal that contains double-quote. + [GH-96][gh-96] + [Patch by pulver] + + * `REXML::Parsers::XPathParser#abbreviate`: Added missing `/` to + `:descendant_or_self/:self/:parent`. + [GH-97][gh-97] + [Reported by pulver] + + * `REXML::Parsers::XPathParser#abbreviate`: Added support for more patterns. + [GH-97][gh-97] + [Reported by pulver] + +### Fixes + + * Fixed a typo in NEWS. + [GH-72][gh-72] + [Patch by Spencer Goodman] + + * Fixed a typo in NEWS. + [GH-75][gh-75] + [Patch by Andrew Bromwich] + + * Fixed documents. + [GH-87][gh-87] + [Patch by Alexander Ilyin] + + * Fixed a bug that `Attriute` convert `'` and `'` even when + `attribute_quote: :quote` is used. + [GH-92][gh-92] + [Reported by Edouard Brière] + + * Fixed links in tutorial. + [GH-99][gh-99] + [Patch by gemmaro] + + +### Thanks + + * Ivo Anjo + + * Spencer Goodman + + * Andrew Bromwich + + * Burdette Lamar + + * Alexander Ilyin + + * Edouard Brière + + * fatkodima + + * pulver + + * gemmaro + +[gh-69]:https://github.com/ruby/rexml/issues/69 +[gh-71]:https://github.com/ruby/rexml/issues/71 +[gh-72]:https://github.com/ruby/rexml/issues/72 +[gh-75]:https://github.com/ruby/rexml/issues/75 +[gh-77]:https://github.com/ruby/rexml/issues/77 +[gh-87]:https://github.com/ruby/rexml/issues/87 +[gh-92]:https://github.com/ruby/rexml/issues/92 +[gh-94]:https://github.com/ruby/rexml/issues/94 +[gh-95]:https://github.com/ruby/rexml/issues/95 +[gh-96]:https://github.com/ruby/rexml/issues/96 +[gh-97]:https://github.com/ruby/rexml/issues/97 +[gh-98]:https://github.com/ruby/rexml/issues/98 +[gh-99]:https://github.com/ruby/rexml/issues/99 + +## 3.2.5 - 2021-04-05 {#version-3-2-5} + +### Improvements + + * Add more validations to XPath parser. + + * `require "rexml/document"` by default. + [GitHub#36][Patch by Koichi ITO] + + * Don't add `#dclone` method to core classes globally. + [GitHub#37][Patch by Akira Matsuda] + + * Add more documentations. + [Patch by Burdette Lamar] + + * Added `REXML::Elements#parent`. + [GitHub#52][Patch by Burdette Lamar] + +### Fixes + + * Fixed a bug that `REXML::DocType#clone` doesn't copy external ID + information. + + * Fixed round-trip vulnerability bugs. + See also: https://www.ruby-lang.org/en/news/2021/04/05/xml-round-trip-vulnerability-in-rexml-cve-2021-28965/ + [HackerOne#1104077][CVE-2021-28965][Reported by Juho Nurminen] + +### Thanks + + * Koichi ITO + + * Akira Matsuda + + * Burdette Lamar + + * Juho Nurminen + +## 3.2.4 - 2020-01-31 {#version-3-2-4} + +### Improvements + + * Don't use `taint` with Ruby 2.7 or later. + [GitHub#21][Patch by Jeremy Evans] + +### Fixes + + * Fixed a `elsif` typo. + [GitHub#22][Patch by Nobuyoshi Nakada] + +### Thanks + + * Jeremy Evans + + * Nobuyoshi Nakada + +## 3.2.3 - 2019-10-12 {#version-3-2-3} + +### Fixes + + * Fixed a bug that `REXML::XMLDecl#close` doesn't copy `@writethis`. + [GitHub#20][Patch by hirura] + +### Thanks + + * hirura + +## 3.2.2 - 2019-06-03 {#version-3-2-2} + +### Fixes + + * xpath: Fixed a bug for equality and relational expressions. + [GitHub#17][Reported by Mirko Budszuhn] + + * xpath: Fixed `boolean()` implementation. + + * xpath: Fixed `local_name()` with nonexistent node. + + * xpath: Fixed `number()` implementation with node set. + [GitHub#18][Reported by Mirko Budszuhn] + +### Thanks + + * Mirko Budszuhn + +## 3.2.1 - 2019-05-04 {#version-3-2-1} + +### Improvements + + * Improved error message. + [GitHub#12][Patch by FUJI Goro] + + * Improved error message. + [GitHub#16][Patch by ujihisa] + + * Improved documentation markup. + [GitHub#14][Patch by Alyssa Ross] + +### Fixes + + * Fixed a bug that `nil` variable value raises an unexpected exception. + [GitHub#13][Patch by Alyssa Ross] + +### Thanks + + * FUJI Goro + + * Alyssa Ross + + * ujihisa + +## 3.2.0 - 2019-01-01 {#version-3-2-0} + +### Fixes + + * Fixed a bug that no namespace attribute isn't matched with prefix. + + [ruby-list:50731][Reported by Yasuhiro KIMURA] + + * Fixed a bug that the default namespace is applied to attribute names. + + NOTE: It's a backward incompatible change. If your program has any + problem with this change, please report it. We may revert this fix. + + * `REXML::Attribute#prefix` returns `""` for no namespace attribute. + + * `REXML::Attribute#namespace` returns `""` for no namespace attribute. + +### Thanks + + * Yasuhiro KIMURA + +## 3.1.9 - 2018-12-20 {#version-3-1-9} + +### Improvements + + * Improved backward compatibility. + + Restored `REXML::Parsers::BaseParser::UNQME_STR` because it's used + by kramdown. + +## 3.1.8 - 2018-12-20 {#version-3-1-8} + +### Improvements + + * Added support for customizing quote character in prologue. + [GitHub#8][Bug #9367][Reported by Takashi Oguma] + + * You can use `"` as quote character by specifying `:quote` to + `REXML::Document#context[:prologue_quote]`. + + * You can use `'` as quote character by specifying `:apostrophe` + to `REXML::Document#context[:prologue_quote]`. + + * Added processing instruction target check. The target must not nil. + [GitHub#7][Reported by Ariel Zelivansky] + + * Added name check for element and attribute. + [GitHub#7][Reported by Ariel Zelivansky] + + * Stopped to use `Exception`. + [GitHub#9][Patch by Jean Boussier] + +### Fixes + + * Fixed a bug that `REXML::Text#clone` escapes value twice. + [ruby-dev:50626][Bug #15058][Reported by Ryosuke Nanba] + +### Thanks + + * Takashi Oguma + + * Ariel Zelivansky + + * Jean Boussier + + * Ryosuke Nanba diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/README.md b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/README.md new file mode 100644 index 0000000..e8ab508 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/README.md @@ -0,0 +1,57 @@ +# REXML + +REXML was inspired by the Electric XML library for Java, which features an easy-to-use API, small size, and speed. Hopefully, REXML, designed with the same philosophy, has these same features. I've tried to keep the API as intuitive as possible, and have followed the Ruby methodology for method naming and code flow, rather than mirroring the Java API. + +REXML supports both tree and stream document parsing. Stream parsing is faster (about 1.5 times as fast). However, with stream parsing, you don't get access to features such as XPath. + +## API + +See the [API documentation](https://ruby.github.io/rexml/). + +## Usage + +We'll start with parsing an XML document + +```ruby +require "rexml/document" +file = File.new( "mydoc.xml" ) +doc = REXML::Document.new file +``` + +Line 3 creates a new document and parses the supplied file. You can also do the following + +```ruby +require "rexml/document" +include REXML # so that we don't have to prefix everything with REXML::... +string = < + Text, text, text + +EOF +doc = Document.new string +``` + +So parsing a string is just as easy as parsing a file. + +## Support + +REXML support follows the same maintenance cycle as Ruby releases, as shown on . + +If you are running on an end-of-life Ruby, do not expect modern REXML releases to be compatible with it; in fact, it's recommended that you DO NOT use this gem, and instead use the REXML version that came bundled with your end-of-life Ruby version. + +The `required_ruby_version` on the gemspec is kept updated on a [best-effort basis](https://github.com/ruby/rexml/pull/70) by the community. +Up to version 3.2.5, this information was not set. That version [is known broken with at least Ruby < 2.3](https://github.com/ruby/rexml/issues/69). + +## Development + +After checking out the repo, run `rake test` to run the tests. + +To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org). + +## Contributing + +Bug reports and pull requests are welcome on GitHub at https://github.com/ruby/rexml. + +## License + +The gem is available as open source under the terms of the [BSD-2-Clause](LICENSE.txt). diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/doc/rexml/context.rdoc b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/doc/rexml/context.rdoc new file mode 100644 index 0000000..7ef01f7 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/doc/rexml/context.rdoc @@ -0,0 +1,143 @@ +== Element Context + +Notes: +- All code on this page presupposes that the following has been executed: + + require 'rexml/document' + +- For convenience, examples on this page use +REXML::Document.new+, not +REXML::Element.new+. + This is completely valid, because REXML::Document is a subclass of REXML::Element. + +The context for an element is a hash of processing directives +that influence the way \XML is read, stored, and written. +The context entries are: + +- +:respect_whitespace+: controls treatment of whitespace. +- +:compress_whitespace+: determines whether whitespace is compressed. +- +:ignore_whitespace_nodes+: determines whether whitespace-only nodes are to be ignored. +- +:raw+: controls treatment of special characters and entities. + +The default context for a new element is {}. +You can set the context at element-creation time: + + d = REXML::Document.new('', {compress_whitespace: :all, raw: :all}) + d.context # => {:compress_whitespace=>:all, :raw=>:all} + +You can reset the entire context by assigning a new hash: + + d.context = {ignore_whitespace_nodes: :all} + d.context # => {:ignore_whitespace_nodes=>:all} + +Or you can create or modify an individual entry: + + d.context[:raw] = :all + d.context # => {:ignore_whitespace_nodes=>:all, :raw=>:all} + +=== +:respect_whitespace+ + +Affects: +REXML::Element.new+, +REXML::Element.text=+. + +By default, all parsed whitespace is respected (that is, stored whitespace not compressed): + + xml_string = 'a b c d e f' + d = REXML::Document.new(xml_string) + d.to_s # => "a b c d e f" + +Use +:respect_whitespace+ with an array of element names +to specify the elements that _are_ to have their whitespace respected; +other elements' whitespace, and whitespace between elements, will be compressed. + +In this example: +foo+ and +baz+ will have their whitespace respected; ++bar+ and the space between elements will have their whitespace compressed: + + d = REXML::Document.new(xml_string, {respect_whitespace: ['foo', 'baz']}) + d.to_s # => "a b c d e f" + bar = d.root[2] # => ... + bar.text = 'X Y' + d.to_s # => "a b X Y e f" + +=== +:compress_whitespace+ + +Affects: +REXML::Element.new+, +REXML::Element.text=+. + +Use compress_whitespace: :all +to compress whitespace both within and between elements: + + xml_string = 'a b c d e f' + d = REXML::Document.new(xml_string, {compress_whitespace: :all}) + d.to_s # => "a b c d e f" + +Use +:compress_whitespace+ with an array of element names +to compress whitespace in those elements, +but not in other elements nor between elements. + +In this example, +foo+ and +baz+ will have their whitespace compressed; ++bar+ and the space between elements will not: + + d = REXML::Document.new(xml_string, {compress_whitespace: ['foo', 'baz']}) + d.to_s # => "a b c d e f" + foo = d.root[0] # => ... + foo.text= 'X Y' + d.to_s # => "X Y c d e f" + +=== +:ignore_whitespace_nodes+ + +Affects: +REXML::Element.new+. + +Use ignore_whitespace_nodes: :all to omit all whitespace-only elements. + +In this example, +bar+ has a text node, while nodes +foo+ and +baz+ do not: + + xml_string = ' BAR ' + d = REXML::Document.new(xml_string, {ignore_whitespace_nodes: :all}) + d.to_s # => " FOO BAZ " + root = d.root # => ... + foo = root[0] # => + bar = root[1] # => ... + baz = root[2] # => + foo.first.class # => NilClass + bar.first.class # => REXML::Text + baz.first.class # => NilClass + +Use +:ignore_whitespace_nodes+ with an array of element names +to specify the elements that are to have whitespace nodes ignored. + +In this example, +bar+ and +baz+ have text nodes, while node +foo+ does not. + + xml_string = ' BAR ' + d = REXML::Document.new(xml_string, {ignore_whitespace_nodes: ['foo']}) + d.to_s # => " BAR " + root = d.root # => ... + foo = root[0] # => + bar = root[1] # => ... + baz = root[2] # => ... + foo.first.class # => NilClass + bar.first.class # => REXML::Text + baz.first.class # => REXML::Text + +=== +:raw+ + +Affects: +Element.text=+, +Element.add_text+, +Text.to_s+. + +Parsing of +a+ elements is not affected by +raw+: + + xml_string = '0 < 11 > 0' + d = REXML::Document.new(xml_string, {:raw => ['a']}) + d.root.to_s # => "0 < 11 > 0" + a, b = *d.root.elements + a.to_s # => "0 < 1" + b.to_s # => "1 > 0" + +But Element#text= is affected: + + a.text = '0 < 1' + b.text = '1 > 0' + a.to_s # => "0 < 1" + b.to_s # => "1 &gt; 0" + +As is Element.add_text: + + a.add_text(' so 1 > 0') + b.add_text(' so 0 < 1') + a.to_s # => "0 < 1 so 1 > 0" + b.to_s # => "1 &gt; 0 so 0 &lt; 1" diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/doc/rexml/tasks/rdoc/child.rdoc b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/doc/rexml/tasks/rdoc/child.rdoc new file mode 100644 index 0000000..8953638 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/doc/rexml/tasks/rdoc/child.rdoc @@ -0,0 +1,87 @@ +== Class Child + +Class Child includes module Node; +see {Tasks for Node}[node_rdoc.html]. + +:include: ../tocs/child_toc.rdoc + +=== Relationships + +==== Task: Set the Parent + +Use method {Child#parent=}[../../../../REXML/Parent.html#method-i-parent-3D] +to set the parent: + + e0 = REXML::Element.new('foo') + e1 = REXML::Element.new('bar') + e1.parent # => nil + e1.parent = e0 + e1.parent # => + +==== Task: Insert Previous Sibling + +Use method {Child#previous_sibling=}[../../../../REXML/Parent.html#method-i-previous_sibling-3D] +to insert a previous sibling: + + xml_string = '' + d = REXML::Document.new(xml_string) + d.root.to_a # => [, ] + c = d.root[1] # => + b = REXML::Element.new('b') + c.previous_sibling = b + d.root.to_a # => [, , ] + +==== Task: Insert Next Sibling + +Use method {Child#next_sibling=}[../../../../REXML/Parent.html#method-i-next-sibling-3D] +to insert a previous sibling: + + xml_string = '' + d = REXML::Document.new(xml_string) + d.root.to_a # => [, ] + a = d.root[0] # => + b = REXML::Element.new('b') + a.next_sibling = b + d.root.to_a # => [, , ] + +=== Removal or Replacement + +==== Task: Remove Child from Parent + +Use method {Child#remove}[../../../../REXML/Parent.html#method-i-remove] +to remove a child from its parent; returns the removed child: + + xml_string = '' + d = REXML::Document.new(xml_string) + d.root.to_a # => [, , ] + b = d.root[1] # => + b.remove # => + d.root.to_a # => [, ] + +==== Task: Replace Child + +Use method {Child#replace_with}[../../../../REXML/Parent.html#method-i-replace] +to replace a child; +returns the replaced child: + + xml_string = '' + d = REXML::Document.new(xml_string) + d.root.to_a # => [, , ] + b = d.root[1] # => + d = REXML::Element.new('d') + b.replace_with(d) # => + d.root.to_a # => [, , ] + +=== Document + +==== Task: Get the Document + +Use method {Child#document}[../../../../REXML/Parent.html#method-i-document] +to get the document for the child: + + xml_string = '' + d = REXML::Document.new(xml_string) + d.root.to_a # => [, , ] + b = d.root[1] # => + b.document == d # => true + REXML::Child.new.document # => nil diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/doc/rexml/tasks/rdoc/document.rdoc b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/doc/rexml/tasks/rdoc/document.rdoc new file mode 100644 index 0000000..96d0335 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/doc/rexml/tasks/rdoc/document.rdoc @@ -0,0 +1,276 @@ +== Class Document + +Class Document has methods from its superclasses and included modules; +see: + +- {Tasks for Element}[element_rdoc.html]. +- {Tasks for Parent}[parent_rdoc.html]. +- {Tasks for Child}[child_rdoc.html]. +- {Tasks for Node}[node_rdoc.html]. +- {Module Enumerable}[https://docs.ruby-lang.org/en/master/Enumerable.html]. + +:include: ../tocs/document_toc.rdoc + +=== New Document + +==== Task: Create an Empty Document + +Use method {Document::new}[../../../../REXML/Document.html#method-c-new] +to create an empty document. + + d = REXML::Document.new + +==== Task: Parse a \String into a New Document + +Use method {Document::new}[../../../../REXML/Document.html#method-c-new] +to parse an XML string into a new document: + + xml_string = 'textmore' + d = REXML::Document.new(xml_string) + d.root # => ... + +==== Task: Parse an \IO Stream into a New Document + +Use method {Document::new}[../../../../REXML/Document.html#method-c-new] +to parse an XML \IO stream into a new document: + + xml_string = 'textmore' + File.write('t.xml', xml_string) + d = File.open('t.xml', 'r') do |file| + REXML::Document.new(file) + end + d.root # => ... + +==== Task: Create a Document from an Existing Document + +Use method {Document::new}[../../../../REXML/Document.html#method-c-new] +to create a document from an existing document. +The context and attributes are copied to the new document, +but not the children: + + xml_string = 'textmore' + d = REXML::Document.new(xml_string) + d.children # => [ ... ] + d.context = {raw: :all, compress_whitespace: :all} + d.add_attributes({'bar' => 0, 'baz' => 1}) + d1 = REXML::Document.new(d) + d1.context # => {:raw=>:all, :compress_whitespace=>:all} + d1.attributes # => {"bar"=>bar='0', "baz"=>baz='1'} + d1.children # => [] + +==== Task: Clone a Document + +Use method {Document#clone}[../../../../REXML/Document.html#method-i-clone] +to clone a document. +The context and attributes are copied to the new document, +but not the children: + + xml_string = 'textmore' + d = REXML::Document.new(xml_string) + d.children # => [ ... ] + d.context = {raw: :all, compress_whitespace: :all} + d.add_attributes({'bar' => 0, 'baz' => 1}) + d1 = d.clone # => < bar='0' baz='1'/> + d1.context # => {:raw=>:all, :compress_whitespace=>:all} + d1.attributes # => {"bar"=>bar='0', "baz"=>baz='1'} + d1.children # => [] + +=== Document Type + +==== Task: Get the Document Type + +Use method {Document#doctype}[../../../../REXML/Document.html#method-i-doctype] +to get the document type: + + d = REXML::Document.new('') + d.doctype.class # => REXML::DocType + d = REXML::Document.new('') + d.doctype.class # => nil + +==== Task: Set the Document Type + +Use method {document#add}[../../../../REXML/Document.html#method-i-add] +to add or replace the document type: + + d = REXML::Document.new('') + d.doctype.class # => nil + d.add(REXML::DocType.new('foo')) + d.doctype.class # => REXML::DocType + +=== XML Declaration + +==== Task: Get the XML Declaration + +Use method {document#xml_decl}[../../../../REXML/Document.html#method-i-xml_decl] +to get the XML declaration: + + d = REXML::Document.new('') + d.xml_decl.class # => REXML::XMLDecl + d.xml_decl # => + d = REXML::Document.new('') + d.xml_decl.class # => REXML::XMLDecl + d.xml_decl # => + +==== Task: Set the XML Declaration + +Use method {document#add}[../../../../REXML/Document.html#method-i-add] +to replace the XML declaration: + + d = REXML::Document.new('') + d.add(REXML::XMLDecl.new) + +=== Children + +==== Task: Add an Element Child + +Use method +{document#add_element}[../../../../REXML/Document.html#method-i-add_element] +to add an element to the document: + + d = REXML::Document.new('') + d.add_element(REXML::Element.new('root')) + d.children # => [] + +==== Task: Add a Non-Element Child + +Use method +{document#add}[../../../../REXML/Document.html#method-i-add] +to add a non-element to the document: + + xml_string = 'textmore' + d = REXML::Document.new(xml_string) + d.add(REXML::Text.new('foo')) + d.children # => [ ... , "foo"] + +=== Writing + +==== Task: Write to $stdout + +Use method +{document#write}[../../../../REXML/Document.html#method-i-write] +to write the document to $stdout: + + xml_string = 'textmore' + d = REXML::Document.new(xml_string) + d.write + +Output: + + textmore + +==== Task: Write to IO Stream + +Use method +{document#write}[../../../../REXML/Document.html#method-i-write] +to write the document to $stdout: + + xml_string = 'textmore' + d = REXML::Document.new(xml_string) + File.open('t.xml', 'w') do |file| + d.write(file) + end + p File.read('t.xml') + +Output: + + "textmore" + +==== Task: Write with No Indentation + +Use method +{document#write}[../../../../REXML/Document.html#method-i-write] +to write the document with no indentation: + + xml_string = '' + d = REXML::Document.new(xml_string) + d.write({indent: 0}) + +Output: + + + + + + + + + +==== Task: Write with Specified Indentation + +Use method +{document#write}[../../../../REXML/Document.html#method-i-write] +to write the document with a specified indentation: + + xml_string = '' + d = REXML::Document.new(xml_string) + d.write({indent: 2}) + +Output: + + + + + + + + + +=== Querying + +==== Task: Get the Document + +Use method +{document#document}[../../../../REXML/Document.html#method-i-document] +to get the document (+self+); overrides Element#document: + + xml_string = '' + d = REXML::Document.new(xml_string) + d.document == d # => true + +==== Task: Get the Encoding + +Use method +{document#document}[../../../../REXML/Document.html#method-i-document] +to get the document (+self+); overrides Element#document: + + xml_string = '' + d = REXML::Document.new(xml_string) + d.encoding # => "UTF-8" + +==== Task: Get the Node Type + +Use method +{document#node_type}[../../../../REXML/Document.html#method-i-node_type] +to get the node type (+:document+); overrides Element#node_type: + + xml_string = '' + d = REXML::Document.new(xml_string) + d.node_type # => :document + +==== Task: Get the Root Element + +Use method +{document#root}[../../../../REXML/Document.html#method-i-root] +to get the root element: + + xml_string = '' + d = REXML::Document.new(xml_string) + d.root # => ... + +==== Task: Determine Whether Stand-Alone + +Use method +{document#stand_alone?}[../../../../REXML/Document.html#method-i-stand_alone-3F] +to get the stand-alone value: + + d = REXML::Document.new('') + d.stand_alone? # => "yes" + +==== Task: Get the Version + +Use method +{document#version}[../../../../REXML/Document.html#method-i-version] +to get the version: + + d = REXML::Document.new('') + d.version # => "2.0" diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/doc/rexml/tasks/rdoc/element.rdoc b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/doc/rexml/tasks/rdoc/element.rdoc new file mode 100644 index 0000000..4b3609b --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/doc/rexml/tasks/rdoc/element.rdoc @@ -0,0 +1,602 @@ +== Class Element + +Class Element has methods from its superclasses and included modules; +see: + +- {Tasks for Parent}[parent_rdoc.html]. +- {Tasks for Child}[child_rdoc.html]. +- {Tasks for Node}[node_rdoc.html]. +- {Module Enumerable}[https://docs.ruby-lang.org/en/master/Enumerable.html]. + +:include: ../tocs/element_toc.rdoc + +=== New Element + +==== Task: Create a Default Element + +Use method +{Element::new}[../../../../REXML/Element.html#method-c-new] +with no arguments to create a default element: + + e = REXML::Element.new + e.name # => "UNDEFINED" + e.parent # => nil + e.context # => nil + +==== Task: Create a Named Element + +Use method +{Element::new}[../../../../REXML/Element.html#method-c-new] +with a string name argument +to create a named element: + + e = REXML::Element.new('foo') + e.name # => "foo" + e.parent # => nil + e.context # => nil + +==== Task: Create an Element with Name and Parent + +Use method +{Element::new}[../../../../REXML/Element.html#method-c-new] +with name and parent arguments +to create an element with name and parent: + + p = REXML::Parent.new + e = REXML::Element.new('foo', p) + e.name # => "foo" + e.parent # => #]> + e.context # => nil + +==== Task: Create an Element with Name, Parent, and Context + +Use method +{Element::new}[../../../../REXML/Element.html#method-c-new] +with name, parent, and context arguments +to create an element with name, parent, and context: + + p = REXML::Parent.new + e = REXML::Element.new('foo', p, {compress_whitespace: :all}) + e.name # => "foo" + e.parent # => #]> + e.context # => {:compress_whitespace=>:all} + +==== Task: Create a Shallow Clone + +Use method +{Element#clone}[../../../../REXML/Element.html#method-i-clone] +to create a shallow clone of an element, +copying only the name, attributes, and context: + + e0 = REXML::Element.new('foo', nil, {compress_whitespace: :all}) + e0.add_attribute(REXML::Attribute.new('bar', 'baz')) + e0.context = {compress_whitespace: :all} + e1 = e0.clone # => + e1.name # => "foo" + e1.context # => {:compress_whitespace=>:all} + +=== Attributes + +==== Task: Create and Add an Attribute + +Use method +{Element#add_attribute}[../../../../REXML/Element.html#method-i-add_attribute] +to create and add an attribute: + + e = REXML::Element.new + e.add_attribute('attr', 'value') # => "value" + e['attr'] # => "value" + e.add_attribute('attr', 'VALUE') # => "VALUE" + e['attr'] # => "VALUE" + +==== Task: Add an Existing Attribute + +Use method +{Element#add_attribute}[../../../../REXML/Element.html#method-i-add_attribute] +to add an existing attribute: + + e = REXML::Element.new + a = REXML::Attribute.new('attr', 'value') + e.add_attribute(a) + e['attr'] # => "value" + a = REXML::Attribute.new('attr', 'VALUE') + e.add_attribute(a) + e['attr'] # => "VALUE" + +==== Task: Add Multiple Attributes from a Hash + +Use method +{Element#add_attributes}[../../../../REXML/Element.html#method-i-add_attributes] +to add multiple attributes from a hash: + + e = REXML::Element.new + h = {'foo' => 0, 'bar' => 1} + e.add_attributes(h) + e['foo'] # => "0" + e['bar'] # => "1" + +==== Task: Add Multiple Attributes from an Array + +Use method +{Element#add_attributes}[../../../../REXML/Element.html#method-i-add_attributes] +to add multiple attributes from an array: + + e = REXML::Element.new + a = [['foo', 0], ['bar', 1]] + e.add_attributes(a) + e['foo'] # => "0" + e['bar'] # => "1" + +==== Task: Retrieve the Value for an Attribute Name + +Use method +{Element#[]}[../../../../REXML/Element.html#method-i-5B-5D] +to retrieve the value for an attribute name: + + e = REXML::Element.new + e.add_attribute('attr', 'value') # => "value" + e['attr'] # => "value" + +==== Task: Retrieve the Attribute Value for a Name and Namespace + +Use method +{Element#attribute}[../../../../REXML/Element.html#method-i-attribute] +to retrieve the value for an attribute name: + + xml_string = "" + d = REXML::Document.new(xml_string) + e = d.root + e.attribute("x") # => x='x' + e.attribute("x", "a") # => a:x='a:x' + +==== Task: Delete an Attribute + +Use method +{Element#delete_attribute}[../../../../REXML/Element.html#method-i-delete_attribute] +to remove an attribute: + + e = REXML::Element.new('foo') + e.add_attribute('bar', 'baz') + e.delete_attribute('bar') + e.delete_attribute('bar') + e['bar'] # => nil + +==== Task: Determine Whether the Element Has Attributes + +Use method +{Element#has_attributes?}[../../../../REXML/Element.html#method-i-has_attributes-3F] +to determine whether the element has attributes: + + e = REXML::Element.new('foo') + e.has_attributes? # => false + e.add_attribute('bar', 'baz') + e.has_attributes? # => true + +=== Children + +Element Children + +==== Task: Create and Add an Element + +Use method +{Element#add_element}[../../../../REXML/Element.html#method-i-add_element] +to create a new element and add it to this element: + + e0 = REXML::Element.new('foo') + e0.add_element('bar') + e0.children # => [] + +==== Task: Add an Existing Element + +Use method +{Element#add_element}[../../../../REXML/Element.html#method-i-add_element] +to add an element to this element: + + e0 = REXML::Element.new('foo') + e1 = REXML::Element.new('bar') + e0.add_element(e1) + e0.children # => [] + +==== Task: Create and Add an Element with Attributes + +Use method +{Element#add_element}[../../../../REXML/Element.html#method-i-add_element] +to create a new element with attributes, and add it to this element: + + e0 = REXML::Element.new('foo') + e0.add_element('bar', {'name' => 'value'}) + e0.children # => [] + +==== Task: Add an Existing Element with Added Attributes + +Use method +{Element#add_element}[../../../../REXML/Element.html#method-i-add_element] +to add an element to this element: + + e0 = REXML::Element.new('foo') + e1 = REXML::Element.new('bar') + e0.add_element(e1, {'name' => 'value'}) + e0.children # => [] + +==== Task: Delete a Specified Element + +Use method +{Element#delete_element}[../../../../REXML/Element.html#method-i-delete_element] +to remove a specified element from this element: + + e0 = REXML::Element.new('foo') + e1 = REXML::Element.new('bar') + e0.add_element(e1) + e0.children # => [] + e0.delete_element(e1) + e0.children # => [] + +==== Task: Delete an Element by Index + +Use method +{Element#delete_element}[../../../../REXML/Element.html#method-i-delete_element] +to remove an element from this element by index: + + e0 = REXML::Element.new('foo') + e1 = REXML::Element.new('bar') + e0.add_element(e1) + e0.children # => [] + e0.delete_element(1) + e0.children # => [] + +==== Task: Delete an Element by XPath + +Use method +{Element#delete_element}[../../../../REXML/Element.html#method-i-delete_element] +to remove an element from this element by XPath: + + e0 = REXML::Element.new('foo') + e1 = REXML::Element.new('bar') + e0.add_element(e1) + e0.children # => [] + e0.delete_element('//bar/') + e0.children # => [] + +==== Task: Determine Whether Element Children + +Use method +{Element#has_elements?}[../../../../REXML/Element.html#method-i-has_elements-3F] +to determine whether the element has element children: + + e0 = REXML::Element.new('foo') + e0.has_elements? # => false + e0.add_element(REXML::Element.new('bar')) + e0.has_elements? # => true + +==== Task: Get Element Descendants by XPath + +Use method +{Element#get_elements}[../../../../REXML/Element.html#method-i-get_elements] +to fetch all element descendant children by XPath: + + xml_string = <<-EOT + + + + + + EOT + d = REXML::Document.new(xml_string) + d.root.get_elements('//a') # => [ ... , ] + +==== Task: Get Next Element Sibling + +Use method +{Element#next_element}[../../../../REXML/Element.html#method-i-next_element] +to retrieve the next element sibling: + + d = REXML::Document.new 'text' + d.root.elements['b'].next_element #-> + d.root.elements['c'].next_element #-> nil + +==== Task: Get Previous Element Sibling + +Use method +{Element#previous_element}[../../../../REXML/Element.html#method-i-previous_element] +to retrieve the previous element sibling: + + d = REXML::Document.new 'text' + d.root.elements['c'].previous_element #-> + d.root.elements['b'].previous_element #-> nil + +Text Children + +==== Task: Add a Text Node + +Use method +{Element#add_text}[../../../../REXML/Element.html#method-i-add_text] +to add a text node to the element: + + d = REXML::Document.new('foobar') + e = d.root + e.add_text(REXML::Text.new('baz')) + e.to_a # => ["foo", , "bar", "baz"] + e.add_text(REXML::Text.new('baz')) + e.to_a # => ["foo", , "bar", "baz", "baz"] + +==== Task: Replace the First Text Node + +Use method +{Element#text=}[../../../../REXML/Element.html#method-i-text-3D] +to replace the first text node in the element: + + d = REXML::Document.new('textmore') + e = d.root + e.to_a # => [, "text", , "more", ] + e.text = 'oops' + e.to_a # => [, "oops", , "more", ] + +==== Task: Remove the First Text Node + +Use method +{Element#text=}[../../../../REXML/Element.html#method-i-text-3D] +to remove the first text node in the element: + + d = REXML::Document.new('textmore') + e = d.root + e.to_a # => [, "text", , "more", ] + e.text = nil + e.to_a # => [, , "more", ] + +==== Task: Retrieve the First Text Node + +Use method +{Element#get_text}[../../../../REXML/Element.html#method-i-get_text] +to retrieve the first text node in the element: + + d = REXML::Document.new('textmore') + e = d.root + e.to_a # => [, "text", , "more", ] + e.get_text # => "text" + +==== Task: Retrieve a Specific Text Node + +Use method +{Element#get_text}[../../../../REXML/Element.html#method-i-get_text] +to retrieve the first text node in a specified element: + + d = REXML::Document.new "some text this is bold! more text" + e = d.root + e.get_text('//root') # => "some text " + e.get_text('//b') # => "this is bold!" + +==== Task: Determine Whether the Element has Text Nodes + +Use method +{Element#has_text?}[../../../../REXML/Element.html#method-i-has_text-3F] +to determine whether the element has text: + + e = REXML::Element.new('foo') + e.has_text? # => false + e.add_text('bar') + e.has_text? # => true + +Other Children + +==== Task: Get the Child at a Given Index + +Use method +{Element#[]}[../../../../REXML/Element.html#method-i-5B-5D] +to retrieve the child at a given index: + + d = REXML::Document.new '>textmore' + e = d.root + e[0] # => + e[1] # => "text" + e[2] # => + +==== Task: Get All CDATA Children + +Use method +{Element#cdatas}[../../../../REXML/Element.html#method-i-cdatas] +to retrieve all CDATA children: + + xml_string = <<-EOT + + + + + EOT + d = REXML::Document.new(xml_string) + d.root.cdatas # => ["foo", "bar"] + +==== Task: Get All Comment Children + +Use method +{Element#comments}[../../../../REXML/Element.html#method-i-comments] +to retrieve all comment children: + + xml_string = <<-EOT + + + + + EOT + d = REXML::Document.new(xml_string) + d.root.comments.map {|comment| comment.to_s } # => ["foo", "bar"] + +==== Task: Get All Processing Instruction Children + +Use method +{Element#instructions}[../../../../REXML/Element.html#method-i-instructions] +to retrieve all processing instruction children: + + xml_string = <<-EOT + + + + + EOT + d = REXML::Document.new(xml_string) + instructions = d.root.instructions.map {|instruction| instruction.to_s } + instructions # => ["", ""] + +==== Task: Get All Text Children + +Use method +{Element#texts}[../../../../REXML/Element.html#method-i-texts] +to retrieve all text children: + + xml_string = 'textmore' + d = REXML::Document.new(xml_string) + d.root.texts # => ["text", "more"] + +=== Namespaces + +==== Task: Add a Namespace + +Use method +{Element#add_namespace}[../../../../REXML/Element.html#method-i-add_namespace] +to add a namespace to the element: + + e = REXML::Element.new('foo') + e.add_namespace('bar') + e.namespaces # => {"xmlns"=>"bar"} + +==== Task: Delete the Default Namespace + +Use method +{Element#delete_namespace}[../../../../REXML/Element.html#method-i-delete_namespace] +to remove the default namespace from the element: + + d = REXML::Document.new "" + d.to_s # => "" + d.root.delete_namespace # => + d.to_s # => "" + +==== Task: Delete a Specific Namespace + +Use method +{Element#delete_namespace}[../../../../REXML/Element.html#method-i-delete_namespace] +to remove a specific namespace from the element: + + d = REXML::Document.new "" + d.to_s # => "" + d.root.delete_namespace # => + d.to_s # => "" + d.root.delete_namespace('foo') + d.to_s # => "" + +==== Task: Get a Namespace URI + +Use method +{Element#namespace}[../../../../REXML/Element.html#method-i-namespace] +to retrieve a specific namespace URI for the element: + + xml_string = <<-EOT + + + + + + + EOT + d = REXML::Document.new(xml_string) + b = d.elements['//b'] + b.namespace # => "1" + b.namespace('y') # => "2" + +==== Task: Retrieve Namespaces + +Use method +{Element#namespaces}[../../../../REXML/Element.html#method-i-namespaces] +to retrieve all namespaces for the element: + + xml_string = '' + d = REXML::Document.new(xml_string) + d.root.attributes.namespaces # => {"xmlns"=>"foo", "x"=>"bar", "y"=>"twee"} + +==== Task: Retrieve Namespace Prefixes + +Use method +{Element#prefixes}[../../../../REXML/Element.html#method-i-prefixes] +to retrieve all prefixes (namespace names) for the element: + + xml_string = <<-EOT + + + + + + + EOT + d = REXML::Document.new(xml_string, {compress_whitespace: :all}) + d.elements['//a'].prefixes # => ["x", "y"] + d.elements['//b'].prefixes # => ["x", "y"] + d.elements['//c'].prefixes # => ["x", "y", "z"] + +=== Iteration + +==== Task: Iterate Over Elements + +Use method +{Element#each_element}[../../../../REXML/Element.html#method-i-each_element] +to iterate over element children: + + d = REXML::Document.new 'bbd' + d.root.each_element {|e| p e } + +Output: + + ... + ... + ... + + +==== Task: Iterate Over Elements Having a Specified Attribute + +Use method +{Element#each_element_with_attribute}[../../../../REXML/Element.html#method-i-each_element_with_attribute] +to iterate over element children that have a specified attribute: + + d = REXML::Document.new '' + a = d.root + a.each_element_with_attribute('id') {|e| p e } + +Output: + + + + + +==== Task: Iterate Over Elements Having a Specified Attribute and Value + +Use method +{Element#each_element_with_attribute}[../../../../REXML/Element.html#method-i-each_element_with_attribute] +to iterate over element children that have a specified attribute and value: + + d = REXML::Document.new '' + a = d.root + a.each_element_with_attribute('id', '1') {|e| p e } + +Output: + + + + +==== Task: Iterate Over Elements Having Specified Text + +Use method +{Element#each_element_with_text}[../../../../REXML/Element.html#method-i-each_element_with_text] +to iterate over element children that have specified text: + + +=== Context + +#whitespace +#ignore_whitespace_nodes +#raw + +=== Other Getters + +#document +#root +#root_node +#node_type +#xpath +#inspect diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/doc/rexml/tasks/rdoc/node.rdoc b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/doc/rexml/tasks/rdoc/node.rdoc new file mode 100644 index 0000000..d5d2e12 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/doc/rexml/tasks/rdoc/node.rdoc @@ -0,0 +1,97 @@ +== Module Node + +:include: ../tocs/node_toc.rdoc + +=== Siblings + +==== Task: Find Previous Sibling + +Use method +{Node.previous_sibling_node}[../../../../REXML/Node.html#method-i-previous_sibling] +to retrieve the previous sibling: + + d = REXML::Document.new('') + b = d.root[1] # => + b.previous_sibling_node # => + +==== Task: Find Next Sibling + +Use method +{Node.next_sibling_node}[../../../../REXML/Node.html#method-i-next_sibling] +to retrieve the next sibling: + + d = REXML::Document.new('') + b = d.root[1] # => + b.next_sibling_node # => + +=== Position + +==== Task: Find Own Index Among Siblings + +Use method +{Node.index_in_parent}[../../../../REXML/Node.html#method-i-index_in_parent] +to retrieve the 1-based index of this node among its siblings: + + d = REXML::Document.new('') + b = d.root[1] # => + b.index_in_parent # => 2 + +=== Recursive Traversal + +==== Task: Traverse Each Recursively + +Use method +{Node.each_recursive}[../../../../REXML/Node.html#method-i-each_recursive] +to traverse a tree of nodes recursively: + + xml_string = '' + d = REXML::Document.new(xml_string) + d.root.each_recursive {|node| p node } + +Output: + + ... + ... + + ... + + +=== Recursive Search + +==== Task: Traverse Each Recursively + +Use method +{Node.find_first_recursive}[../../../../REXML/Node.html#method-i-find_first_recursive] +to search a tree of nodes recursively: + + xml_string = '' + d = REXML::Document.new(xml_string) + d.root.find_first_recursive {|node| node.name == 'c' } # => + +=== Representation + +==== Task: Represent a String + +Use method {Node.to_s}[../../../../REXML/Node.html#method-i-to_s] +to represent the node as a string: + + xml_string = '' + d = REXML::Document.new(xml_string) + d.root.to_s # => "" + +=== Parent? + +==== Task: Determine Whether the Node is a Parent + +Use method {Node.parent?}[../../../../REXML/Node.html#method-i-parent-3F] +to determine whether the node is a parent; +class Text derives from Node: + + d = REXML::Document.new('textmore') + t = d.root[1] # => "text" + t.parent? # => false + +Class Parent also derives from Node, but overrides this method: + + p = REXML::Parent.new + p.parent? # => true diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/doc/rexml/tasks/rdoc/parent.rdoc b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/doc/rexml/tasks/rdoc/parent.rdoc new file mode 100644 index 0000000..54f1dbe --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/doc/rexml/tasks/rdoc/parent.rdoc @@ -0,0 +1,267 @@ +== Class Parent + +Class Parent has methods from its superclasses and included modules; +see: + +- {Tasks for Child}[child_rdoc.html]. +- {Tasks for Node}[node_rdoc.html]. +- {Module Enumerable}[https://docs.ruby-lang.org/en/master/Enumerable.html]. + +:include: ../tocs/parent_toc.rdoc + +=== Queries + +==== Task: Get the Count of Children + +Use method {Parent#size}[../../../../REXML/Parent.html#method-i-size] +(or its alias +length+) to get the count of the parent's children: + + p = REXML::Parent.new + p.size # => 0 + xml_string = '' + d = REXML::Document.new(xml_string) + d.root.size # => 3 + +==== Task: Get the Child at a Given Index + +Use method {Parent#[]}[../../../../REXML/Parent.html#method-i-5B-5D] +to get the child at a given index: + + xml_string = '' + d = REXML::Document.new(xml_string) + d.root[1] # => + d.root[-1] # => + d.root[50] # => nil + +==== Task: Get the Index of a Given Child + +Use method {Parent#index}[../../../../REXML/Parent.html#method-i-index] +to get the index (0-based offset) of a child: + + d = REXML::Document.new('') + root = d.root + e0 = REXML::Element.new('foo') + e1 = REXML::Element.new('bar') + root.add(e0) # => + root.add(e1) # => + root.add(e0) # => + root.add(e1) # => + root.index(e0) # => 0 + root.index(e1) # => 1 + +==== Task: Get the Children + +Use method {Parent#children}[../../../../REXML/Parent.html#method-i-children] +(or its alias +to_a+) to get the parent's children: + + xml_string = '' + d = REXML::Document.new(xml_string) + d.root.children # => [, , ] + +==== Task: Determine Whether the Node is a Parent + +Use method {Parent#parent?}[../../../../REXML/Parent.html#method-i-parent-3F] +to determine whether the node is a parent; +class Text derives from Node: + + d = REXML::Document.new('textmore') + t = d.root[1] # => "text" + t.parent? # => false + +Class Parent also derives from Node, but overrides this method: + + p = REXML::Parent.new + p.parent? # => true + +=== Additions + +==== Task: Add a Child at the Beginning + +Use method {Parent#unshift}[../../../../REXML/Parent.html#method-i-unshift] +to add a child as at the beginning of the children: + + xml_string = '' + d = REXML::Document.new(xml_string) + d.root.children # => [, , ] + d.root.unshift REXML::Element.new('d') + d.root.children # => [, , , ] + +==== Task: Add a Child at the End + +Use method {Parent#<<}[../../../../REXML/Parent.html#method-i-3C-3C] +(or an alias +push+ or +add+) to add a child as at the end of the children: + + xml_string = '' + d = REXML::Document.new(xml_string) + d.root.children # => [, , ] + d.root << REXML::Element.new('d') + d.root.children # => [, , , ] + +==== Task: Replace a Child with Another Child + +Use method {Parent#replace}[../../../../REXML/Parent.html#method-i-replace] + + xml_string = '' + d = REXML::Document.new(xml_string) + d.root.children # => [, , ] + b = d.root[1] # => + d.replace_child(b, REXML::Element.new('d')) + d.root.children # => [, ] + +==== Task: Replace Multiple Children with Another Child + +Use method {Parent#[]=}[../../../../REXML/Parent.html#method-i-parent-5B-5D-3D] +to replace multiple consecutive children with another child: + + xml_string = '' + d = REXML::Document.new(xml_string) + d.root.children # => [, , , ] + d.root[1, 2] = REXML::Element.new('x') + d.root.children # => [, , ] + d.root[1, 5] = REXML::Element.new('x') + d.root.children # => [, ] # BUG? + +==== Task: Insert Child Before a Given Child + +Use method {Parent#insert_before}[../../../../REXML/Parent.html#method-i-insert_before] +to insert a child immediately before a given child: + + xml_string = '' + d = REXML::Document.new(xml_string) + d.root.children # => [, , ] + b = d.root[1] # => + x = REXML::Element.new('x') + d.root.insert_before(b, x) + d.root.children # => [, , , ] + +==== Task: Insert Child After a Given Child + +Use method {Parent#insert_after}[../../../../REXML/Parent.html#method-i-insert_after] +to insert a child immediately after a given child: + + xml_string = '' + d = REXML::Document.new(xml_string) + d.root.children # => [, , ] + b = d.root[1] # => + x = REXML::Element.new('x') + d.root.insert_after(b, x) + d.root.children # => [, , , ] + +=== Deletions + +==== Task: Remove a Given Child + +Use method {Parent#delete}[../../../../REXML/Parent.html#method-i-delete] +to remove all occurrences of a given child: + + d = REXML::Document.new('') + a = REXML::Element.new('a') + b = REXML::Element.new('b') + d.root.add(a) + d.root.add(b) + d.root.add(a) + d.root.add(b) + d.root.children # => [, , , ] + d.root.delete(b) + d.root.children # => [, ] + +==== Task: Remove the Child at a Specified Offset + +Use method {Parent#delete_at}[../../../../REXML/Parent.html#method-i-delete_at] +to remove the child at a specified offset: + + d = REXML::Document.new('') + a = REXML::Element.new('a') + b = REXML::Element.new('b') + d.root.add(a) + d.root.add(b) + d.root.add(a) + d.root.add(b) + d.root.children # => [, , , ] + d.root.delete_at(2) + d.root.children # => [, , ] + +==== Task: Remove Children That Meet Specified Criteria + +Use method {Parent#delete_if}[../../../../REXML/Parent.html#method-i-delete_if] +to remove children that meet criteria specified in the given block: + + d = REXML::Document.new('') + d.root.add(REXML::Element.new('x')) + d.root.add(REXML::Element.new('xx')) + d.root.add(REXML::Element.new('xxx')) + d.root.add(REXML::Element.new('xxxx')) + d.root.children # => [, , , ] + d.root.delete_if {|child| child.name.size.odd? } + d.root.children # => [, ] + +=== Iterations + +==== Task: Iterate Over Children + +Use method {Parent#each_child}[../../../../REXML/Parent.html#method-i-each_child] +(or its alias +each+) to iterate over all children: + + xml_string = '' + d = REXML::Document.new(xml_string) + d.root.children # => [, , ] + d.root.each_child {|child| p child } + +Output: + + + + + +==== Task: Iterate Over Child Indexes + +Use method {Parent#each_index}[../../../../REXML/Parent.html#method-i-each_index] +to iterate over all child indexes: + + xml_string = '' + d = REXML::Document.new(xml_string) + d.root.children # => [, , ] + d.root.each_index {|child| p child } + +Output: + + 0 + 1 + 2 + +=== Clones + +==== Task: Clone Deeply + +Use method {Parent#deep_clone}[../../../../REXML/Parent.html#method-i-deep_clone] +to clone deeply; that is, to clone every nested node that is a Parent object: + + xml_string = <<-EOT + + + + Everyday Italian + Giada De Laurentiis + 2005 + 30.00 + + + Harry Potter + J K. Rowling + 2005 + 29.99 + + + Learning XML + Erik T. Ray + 2003 + 39.95 + + + EOT + d = REXML::Document.new(xml_string) + root = d.root + shallow = root.clone + deep = root.deep_clone + shallow.to_s.size # => 12 + deep.to_s.size # => 590 diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/doc/rexml/tasks/tocs/child_toc.rdoc b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/doc/rexml/tasks/tocs/child_toc.rdoc new file mode 100644 index 0000000..a2083a0 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/doc/rexml/tasks/tocs/child_toc.rdoc @@ -0,0 +1,12 @@ +Tasks on this page: + +- {Relationships}[#label-Relationships] + - {Task: Set the Parent}[#label-Task-3A+Set+the+Parent] + - {Task: Insert Previous Sibling}[#label-Task-3A+Insert+Previous+Sibling] + - {Task: Insert Next Sibling}[#label-Task-3A+Insert+Next+Sibling] +- {Removal or Replacement}[#label-Removal+or+Replacement] + - {Task: Remove Child from Parent}[#label-Task-3A+Remove+Child+from+Parent] + - {Task: Replace Child}[#label-Task-3A+Replace+Child] +- {Document}[#label-Document] + - {Task: Get the Document}[#label-Task-3A+Get+the+Document] + diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/doc/rexml/tasks/tocs/document_toc.rdoc b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/doc/rexml/tasks/tocs/document_toc.rdoc new file mode 100644 index 0000000..5db055f --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/doc/rexml/tasks/tocs/document_toc.rdoc @@ -0,0 +1,30 @@ +Tasks on this page: + +- {New Document}[#label-New+Document] + - {Task: Create an Empty Document}[#label-Task-3A+Create+an+Empty+Document] + - {Task: Parse a String into a New Document}[#label-Task-3A+Parse+a+String+into+a+New+Document] + - {Task: Parse an IO Stream into a New Document}[#label-Task-3A+Parse+an+IO+Stream+into+a+New+Document] + - {Task: Create a Document from an Existing Document}[#label-Task-3A+Create+a+Document+from+an+Existing+Document] + - {Task: Clone a Document}[#label-Task-3A+Clone+a+Document] +- {Document Type}[#label-Document+Type] + - {Task: Get the Document Type}[#label-Task-3A+Get+the+Document+Type] + - {Task: Set the Document Type}[#label-Task-3A+Set+the+Document+Type] +- {XML Declaration}[#label-XML+Declaration] + - {Task: Get the XML Declaration}[#label-Task-3A+Get+the+XML+Declaration] + - {Task: Set the XML Declaration}[#label-Task-3A+Set+the+XML+Declaration] +- {Children}[#label-Children] + - {Task: Add an Element Child}[#label-Task-3A+Add+an+Element+Child] + - {Task: Add a Non-Element Child}[#label-Task-3A+Add+a+Non-Element+Child] +- {Writing}[#label-Writing] + - {Task: Write to $stdout}[#label-Task-3A+Write+to+-24stdout] + - {Task: Write to IO Stream}[#label-Task-3A+Write+to+IO+Stream] + - {Task: Write with No Indentation}[#label-Task-3A+Write+with+No+Indentation] + - {Task: Write with Specified Indentation}[#label-Task-3A+Write+with+Specified+Indentation] +- {Querying}[#label-Querying] + - {Task: Get the Document}[#label-Task-3A+Get+the+Document] + - {Task: Get the Encoding}[#label-Task-3A+Get+the+Encoding] + - {Task: Get the Node Type}[#label-Task-3A+Get+the+Node+Type] + - {Task: Get the Root Element}[#label-Task-3A+Get+the+Root+Element] + - {Task: Determine Whether Stand-Alone}[#label-Task-3A+Determine+Whether+Stand-Alone] + - {Task: Get the Version}[#label-Task-3A+Get+the+Version] + diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/doc/rexml/tasks/tocs/element_toc.rdoc b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/doc/rexml/tasks/tocs/element_toc.rdoc new file mode 100644 index 0000000..60a504a --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/doc/rexml/tasks/tocs/element_toc.rdoc @@ -0,0 +1,55 @@ +Tasks on this page: + +- {New Element}[#label-New+Element] + - {Task: Create a Default Element}[#label-Task-3A+Create+a+Default+Element] + - {Task: Create a Named Element}[#label-Task-3A+Create+a+Named+Element] + - {Task: Create an Element with Name and Parent}[#label-Task-3A+Create+an+Element+with+Name+and+Parent] + - {Task: Create an Element with Name, Parent, and Context}[#label-Task-3A+Create+an+Element+with+Name-2C+Parent-2C+and+Context] + - {Task: Create a Shallow Clone}[#label-Task-3A+Create+a+Shallow+Clone] +- {Attributes}[#label-Attributes] + - {Task: Create and Add an Attribute}[#label-Task-3A+Create+and+Add+an+Attribute] + - {Task: Add an Existing Attribute}[#label-Task-3A+Add+an+Existing+Attribute] + - {Task: Add Multiple Attributes from a Hash}[#label-Task-3A+Add+Multiple+Attributes+from+a+Hash] + - {Task: Add Multiple Attributes from an Array}[#label-Task-3A+Add+Multiple+Attributes+from+an+Array] + - {Task: Retrieve the Value for an Attribute Name}[#label-Task-3A+Retrieve+the+Value+for+an+Attribute+Name] + - {Task: Retrieve the Attribute Value for a Name and Namespace}[#label-Task-3A+Retrieve+the+Attribute+Value+for+a+Name+and+Namespace] + - {Task: Delete an Attribute}[#label-Task-3A+Delete+an+Attribute] + - {Task: Determine Whether the Element Has Attributes}[#label-Task-3A+Determine+Whether+the+Element+Has+Attributes] +- {Children}[#label-Children] + - {Task: Create and Add an Element}[#label-Task-3A+Create+and+Add+an+Element] + - {Task: Add an Existing Element}[#label-Task-3A+Add+an+Existing+Element] + - {Task: Create and Add an Element with Attributes}[#label-Task-3A+Create+and+Add+an+Element+with+Attributes] + - {Task: Add an Existing Element with Added Attributes}[#label-Task-3A+Add+an+Existing+Element+with+Added+Attributes] + - {Task: Delete a Specified Element}[#label-Task-3A+Delete+a+Specified+Element] + - {Task: Delete an Element by Index}[#label-Task-3A+Delete+an+Element+by+Index] + - {Task: Delete an Element by XPath}[#label-Task-3A+Delete+an+Element+by+XPath] + - {Task: Determine Whether Element Children}[#label-Task-3A+Determine+Whether+Element+Children] + - {Task: Get Element Descendants by XPath}[#label-Task-3A+Get+Element+Descendants+by+XPath] + - {Task: Get Next Element Sibling}[#label-Task-3A+Get+Next+Element+Sibling] + - {Task: Get Previous Element Sibling}[#label-Task-3A+Get+Previous+Element+Sibling] + - {Task: Add a Text Node}[#label-Task-3A+Add+a+Text+Node] + - {Task: Replace the First Text Node}[#label-Task-3A+Replace+the+First+Text+Node] + - {Task: Remove the First Text Node}[#label-Task-3A+Remove+the+First+Text+Node] + - {Task: Retrieve the First Text Node}[#label-Task-3A+Retrieve+the+First+Text+Node] + - {Task: Retrieve a Specific Text Node}[#label-Task-3A+Retrieve+a+Specific+Text+Node] + - {Task: Determine Whether the Element has Text Nodes}[#label-Task-3A+Determine+Whether+the+Element+has+Text+Nodes] + - {Task: Get the Child at a Given Index}[#label-Task-3A+Get+the+Child+at+a+Given+Index] + - {Task: Get All CDATA Children}[#label-Task-3A+Get+All+CDATA+Children] + - {Task: Get All Comment Children}[#label-Task-3A+Get+All+Comment+Children] + - {Task: Get All Processing Instruction Children}[#label-Task-3A+Get+All+Processing+Instruction+Children] + - {Task: Get All Text Children}[#label-Task-3A+Get+All+Text+Children] +- {Namespaces}[#label-Namespaces] + - {Task: Add a Namespace}[#label-Task-3A+Add+a+Namespace] + - {Task: Delete the Default Namespace}[#label-Task-3A+Delete+the+Default+Namespace] + - {Task: Delete a Specific Namespace}[#label-Task-3A+Delete+a+Specific+Namespace] + - {Task: Get a Namespace URI}[#label-Task-3A+Get+a+Namespace+URI] + - {Task: Retrieve Namespaces}[#label-Task-3A+Retrieve+Namespaces] + - {Task: Retrieve Namespace Prefixes}[#label-Task-3A+Retrieve+Namespace+Prefixes] +- {Iteration}[#label-Iteration] + - {Task: Iterate Over Elements}[#label-Task-3A+Iterate+Over+Elements] + - {Task: Iterate Over Elements Having a Specified Attribute}[#label-Task-3A+Iterate+Over+Elements+Having+a+Specified+Attribute] + - {Task: Iterate Over Elements Having a Specified Attribute and Value}[#label-Task-3A+Iterate+Over+Elements+Having+a+Specified+Attribute+and+Value] + - {Task: Iterate Over Elements Having Specified Text}[#label-Task-3A+Iterate+Over+Elements+Having+Specified+Text] +- {Context}[#label-Context] +- {Other Getters}[#label-Other+Getters] + diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/doc/rexml/tasks/tocs/master_toc.rdoc b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/doc/rexml/tasks/tocs/master_toc.rdoc new file mode 100644 index 0000000..0214f6b --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/doc/rexml/tasks/tocs/master_toc.rdoc @@ -0,0 +1,135 @@ +== Tasks + +=== {Child}[../../tasks/rdoc/child_rdoc.html] +- {Relationships}[../../tasks/rdoc/child_rdoc.html#label-Relationships] + - {Task: Set the Parent}[../../tasks/rdoc/child_rdoc.html#label-Task-3A+Set+the+Parent] + - {Task: Insert Previous Sibling}[../../tasks/rdoc/child_rdoc.html#label-Task-3A+Insert+Previous+Sibling] + - {Task: Insert Next Sibling}[../../tasks/rdoc/child_rdoc.html#label-Task-3A+Insert+Next+Sibling] +- {Removal or Replacement}[../../tasks/rdoc/child_rdoc.html#label-Removal+or+Replacement] + - {Task: Remove Child from Parent}[../../tasks/rdoc/child_rdoc.html#label-Task-3A+Remove+Child+from+Parent] + - {Task: Replace Child}[../../tasks/rdoc/child_rdoc.html#label-Task-3A+Replace+Child] +- {Document}[../../tasks/rdoc/child_rdoc.html#label-Document] + - {Task: Get the Document}[../../tasks/rdoc/child_rdoc.html#label-Task-3A+Get+the+Document] + +=== {Document}[../../tasks/rdoc/document_rdoc.html] +- {New Document}[../../tasks/rdoc/document_rdoc.html#label-New+Document] + - {Task: Create an Empty Document}[../../tasks/rdoc/document_rdoc.html#label-Task-3A+Create+an+Empty+Document] + - {Task: Parse a String into a New Document}[../../tasks/rdoc/document_rdoc.html#label-Task-3A+Parse+a+String+into+a+New+Document] + - {Task: Parse an IO Stream into a New Document}[../../tasks/rdoc/document_rdoc.html#label-Task-3A+Parse+an+IO+Stream+into+a+New+Document] + - {Task: Create a Document from an Existing Document}[../../tasks/rdoc/document_rdoc.html#label-Task-3A+Create+a+Document+from+an+Existing+Document] + - {Task: Clone a Document}[../../tasks/rdoc/document_rdoc.html#label-Task-3A+Clone+a+Document] +- {Document Type}[../../tasks/rdoc/document_rdoc.html#label-Document+Type] + - {Task: Get the Document Type}[../../tasks/rdoc/document_rdoc.html#label-Task-3A+Get+the+Document+Type] + - {Task: Set the Document Type}[../../tasks/rdoc/document_rdoc.html#label-Task-3A+Set+the+Document+Type] +- {XML Declaration}[../../tasks/rdoc/document_rdoc.html#label-XML+Declaration] + - {Task: Get the XML Declaration}[../../tasks/rdoc/document_rdoc.html#label-Task-3A+Get+the+XML+Declaration] + - {Task: Set the XML Declaration}[../../tasks/rdoc/document_rdoc.html#label-Task-3A+Set+the+XML+Declaration] +- {Children}[../../tasks/rdoc/document_rdoc.html#label-Children] + - {Task: Add an Element Child}[../../tasks/rdoc/document_rdoc.html#label-Task-3A+Add+an+Element+Child] + - {Task: Add a Non-Element Child}[../../tasks/rdoc/document_rdoc.html#label-Task-3A+Add+a+Non-Element+Child] +- {Writing}[../../tasks/rdoc/document_rdoc.html#label-Writing] + - {Task: Write to $stdout}[../../tasks/rdoc/document_rdoc.html#label-Task-3A+Write+to+-24stdout] + - {Task: Write to IO Stream}[../../tasks/rdoc/document_rdoc.html#label-Task-3A+Write+to+IO+Stream] + - {Task: Write with No Indentation}[../../tasks/rdoc/document_rdoc.html#label-Task-3A+Write+with+No+Indentation] + - {Task: Write with Specified Indentation}[../../tasks/rdoc/document_rdoc.html#label-Task-3A+Write+with+Specified+Indentation] +- {Querying}[../../tasks/rdoc/document_rdoc.html#label-Querying] + - {Task: Get the Document}[../../tasks/rdoc/document_rdoc.html#label-Task-3A+Get+the+Document] + - {Task: Get the Encoding}[../../tasks/rdoc/document_rdoc.html#label-Task-3A+Get+the+Encoding] + - {Task: Get the Node Type}[../../tasks/rdoc/document_rdoc.html#label-Task-3A+Get+the+Node+Type] + - {Task: Get the Root Element}[../../tasks/rdoc/document_rdoc.html#label-Task-3A+Get+the+Root+Element] + - {Task: Determine Whether Stand-Alone}[../../tasks/rdoc/document_rdoc.html#label-Task-3A+Determine+Whether+Stand-Alone] + - {Task: Get the Version}[../../tasks/rdoc/document_rdoc.html#label-Task-3A+Get+the+Version] + +=== {Element}[../../tasks/rdoc/element_rdoc.html] +- {New Element}[../../tasks/rdoc/element_rdoc.html#label-New+Element] + - {Task: Create a Default Element}[../../tasks/rdoc/element_rdoc.html#label-Task-3A+Create+a+Default+Element] + - {Task: Create a Named Element}[../../tasks/rdoc/element_rdoc.html#label-Task-3A+Create+a+Named+Element] + - {Task: Create an Element with Name and Parent}[../../tasks/rdoc/element_rdoc.html#label-Task-3A+Create+an+Element+with+Name+and+Parent] + - {Task: Create an Element with Name, Parent, and Context}[../../tasks/rdoc/element_rdoc.html#label-Task-3A+Create+an+Element+with+Name-2C+Parent-2C+and+Context] + - {Task: Create a Shallow Clone}[../../tasks/rdoc/element_rdoc.html#label-Task-3A+Create+a+Shallow+Clone] +- {Attributes}[../../tasks/rdoc/element_rdoc.html#label-Attributes] + - {Task: Create and Add an Attribute}[../../tasks/rdoc/element_rdoc.html#label-Task-3A+Create+and+Add+an+Attribute] + - {Task: Add an Existing Attribute}[../../tasks/rdoc/element_rdoc.html#label-Task-3A+Add+an+Existing+Attribute] + - {Task: Add Multiple Attributes from a Hash}[../../tasks/rdoc/element_rdoc.html#label-Task-3A+Add+Multiple+Attributes+from+a+Hash] + - {Task: Add Multiple Attributes from an Array}[../../tasks/rdoc/element_rdoc.html#label-Task-3A+Add+Multiple+Attributes+from+an+Array] + - {Task: Retrieve the Value for an Attribute Name}[../../tasks/rdoc/element_rdoc.html#label-Task-3A+Retrieve+the+Value+for+an+Attribute+Name] + - {Task: Retrieve the Attribute Value for a Name and Namespace}[../../tasks/rdoc/element_rdoc.html#label-Task-3A+Retrieve+the+Attribute+Value+for+a+Name+and+Namespace] + - {Task: Delete an Attribute}[../../tasks/rdoc/element_rdoc.html#label-Task-3A+Delete+an+Attribute] + - {Task: Determine Whether the Element Has Attributes}[../../tasks/rdoc/element_rdoc.html#label-Task-3A+Determine+Whether+the+Element+Has+Attributes] +- {Children}[../../tasks/rdoc/element_rdoc.html#label-Children] + - {Task: Create and Add an Element}[../../tasks/rdoc/element_rdoc.html#label-Task-3A+Create+and+Add+an+Element] + - {Task: Add an Existing Element}[../../tasks/rdoc/element_rdoc.html#label-Task-3A+Add+an+Existing+Element] + - {Task: Create and Add an Element with Attributes}[../../tasks/rdoc/element_rdoc.html#label-Task-3A+Create+and+Add+an+Element+with+Attributes] + - {Task: Add an Existing Element with Added Attributes}[../../tasks/rdoc/element_rdoc.html#label-Task-3A+Add+an+Existing+Element+with+Added+Attributes] + - {Task: Delete a Specified Element}[../../tasks/rdoc/element_rdoc.html#label-Task-3A+Delete+a+Specified+Element] + - {Task: Delete an Element by Index}[../../tasks/rdoc/element_rdoc.html#label-Task-3A+Delete+an+Element+by+Index] + - {Task: Delete an Element by XPath}[../../tasks/rdoc/element_rdoc.html#label-Task-3A+Delete+an+Element+by+XPath] + - {Task: Determine Whether Element Children}[../../tasks/rdoc/element_rdoc.html#label-Task-3A+Determine+Whether+Element+Children] + - {Task: Get Element Descendants by XPath}[../../tasks/rdoc/element_rdoc.html#label-Task-3A+Get+Element+Descendants+by+XPath] + - {Task: Get Next Element Sibling}[../../tasks/rdoc/element_rdoc.html#label-Task-3A+Get+Next+Element+Sibling] + - {Task: Get Previous Element Sibling}[../../tasks/rdoc/element_rdoc.html#label-Task-3A+Get+Previous+Element+Sibling] + - {Task: Add a Text Node}[../../tasks/rdoc/element_rdoc.html#label-Task-3A+Add+a+Text+Node] + - {Task: Replace the First Text Node}[../../tasks/rdoc/element_rdoc.html#label-Task-3A+Replace+the+First+Text+Node] + - {Task: Remove the First Text Node}[../../tasks/rdoc/element_rdoc.html#label-Task-3A+Remove+the+First+Text+Node] + - {Task: Retrieve the First Text Node}[../../tasks/rdoc/element_rdoc.html#label-Task-3A+Retrieve+the+First+Text+Node] + - {Task: Retrieve a Specific Text Node}[../../tasks/rdoc/element_rdoc.html#label-Task-3A+Retrieve+a+Specific+Text+Node] + - {Task: Determine Whether the Element has Text Nodes}[../../tasks/rdoc/element_rdoc.html#label-Task-3A+Determine+Whether+the+Element+has+Text+Nodes] + - {Task: Get the Child at a Given Index}[../../tasks/rdoc/element_rdoc.html#label-Task-3A+Get+the+Child+at+a+Given+Index] + - {Task: Get All CDATA Children}[../../tasks/rdoc/element_rdoc.html#label-Task-3A+Get+All+CDATA+Children] + - {Task: Get All Comment Children}[../../tasks/rdoc/element_rdoc.html#label-Task-3A+Get+All+Comment+Children] + - {Task: Get All Processing Instruction Children}[../../tasks/rdoc/element_rdoc.html#label-Task-3A+Get+All+Processing+Instruction+Children] + - {Task: Get All Text Children}[../../tasks/rdoc/element_rdoc.html#label-Task-3A+Get+All+Text+Children] +- {Namespaces}[../../tasks/rdoc/element_rdoc.html#label-Namespaces] + - {Task: Add a Namespace}[../../tasks/rdoc/element_rdoc.html#label-Task-3A+Add+a+Namespace] + - {Task: Delete the Default Namespace}[../../tasks/rdoc/element_rdoc.html#label-Task-3A+Delete+the+Default+Namespace] + - {Task: Delete a Specific Namespace}[../../tasks/rdoc/element_rdoc.html#label-Task-3A+Delete+a+Specific+Namespace] + - {Task: Get a Namespace URI}[../../tasks/rdoc/element_rdoc.html#label-Task-3A+Get+a+Namespace+URI] + - {Task: Retrieve Namespaces}[../../tasks/rdoc/element_rdoc.html#label-Task-3A+Retrieve+Namespaces] + - {Task: Retrieve Namespace Prefixes}[../../tasks/rdoc/element_rdoc.html#label-Task-3A+Retrieve+Namespace+Prefixes] +- {Iteration}[../../tasks/rdoc/element_rdoc.html#label-Iteration] + - {Task: Iterate Over Elements}[../../tasks/rdoc/element_rdoc.html#label-Task-3A+Iterate+Over+Elements] + - {Task: Iterate Over Elements Having a Specified Attribute}[../../tasks/rdoc/element_rdoc.html#label-Task-3A+Iterate+Over+Elements+Having+a+Specified+Attribute] + - {Task: Iterate Over Elements Having a Specified Attribute and Value}[../../tasks/rdoc/element_rdoc.html#label-Task-3A+Iterate+Over+Elements+Having+a+Specified+Attribute+and+Value] + - {Task: Iterate Over Elements Having Specified Text}[../../tasks/rdoc/element_rdoc.html#label-Task-3A+Iterate+Over+Elements+Having+Specified+Text] +- {Context}[../../tasks/rdoc/element_rdoc.html#label-Context] +- {Other Getters}[../../tasks/rdoc/element_rdoc.html#label-Other+Getters] + +=== {Node}[../../tasks/rdoc/node_rdoc.html] +- {Siblings}[../../tasks/rdoc/node_rdoc.html#label-Siblings] + - {Task: Find Previous Sibling}[../../tasks/rdoc/node_rdoc.html#label-Task-3A+Find+Previous+Sibling] + - {Task: Find Next Sibling}[../../tasks/rdoc/node_rdoc.html#label-Task-3A+Find+Next+Sibling] +- {Position}[../../tasks/rdoc/node_rdoc.html#label-Position] + - {Task: Find Own Index Among Siblings}[../../tasks/rdoc/node_rdoc.html#label-Task-3A+Find+Own+Index+Among+Siblings] +- {Recursive Traversal}[../../tasks/rdoc/node_rdoc.html#label-Recursive+Traversal] + - {Task: Traverse Each Recursively}[../../tasks/rdoc/node_rdoc.html#label-Task-3A+Traverse+Each+Recursively] +- {Recursive Search}[../../tasks/rdoc/node_rdoc.html#label-Recursive+Search] + - {Task: Traverse Each Recursively}[../../tasks/rdoc/node_rdoc.html#label-Task-3A+Traverse+Each+Recursively] +- {Representation}[../../tasks/rdoc/node_rdoc.html#label-Representation] + - {Task: Represent a String}[../../tasks/rdoc/node_rdoc.html#label-Task-3A+Represent+a+String] +- {Parent?}[../../tasks/rdoc/node_rdoc.html#label-Parent-3F] + - {Task: Determine Whether the Node is a Parent}[../../tasks/rdoc/node_rdoc.html#label-Task-3A+Determine+Whether+the+Node+is+a+Parent] + +=== {Parent}[../../tasks/rdoc/parent_rdoc.html] +- {Queries}[../../tasks/rdoc/parent_rdoc.html#label-Queries] + - {Task: Get the Count of Children}[../../tasks/rdoc/parent_rdoc.html#label-Task-3A+Get+the+Count+of+Children] + - {Task: Get the Child at a Given Index}[../../tasks/rdoc/parent_rdoc.html#label-Task-3A+Get+the+Child+at+a+Given+Index] + - {Task: Get the Index of a Given Child}[../../tasks/rdoc/parent_rdoc.html#label-Task-3A+Get+the+Index+of+a+Given+Child] + - {Task: Get the Children}[../../tasks/rdoc/parent_rdoc.html#label-Task-3A+Get+the+Children] + - {Task: Determine Whether the Node is a Parent}[../../tasks/rdoc/parent_rdoc.html#label-Task-3A+Determine+Whether+the+Node+is+a+Parent] +- {Additions}[../../tasks/rdoc/parent_rdoc.html#label-Additions] + - {Task: Add a Child at the Beginning}[../../tasks/rdoc/parent_rdoc.html#label-Task-3A+Add+a+Child+at+the+Beginning] + - {Task: Add a Child at the End}[../../tasks/rdoc/parent_rdoc.html#label-Task-3A+Add+a+Child+at+the+End] + - {Task: Replace a Child with Another Child}[../../tasks/rdoc/parent_rdoc.html#label-Task-3A+Replace+a+Child+with+Another+Child] + - {Task: Replace Multiple Children with Another Child}[../../tasks/rdoc/parent_rdoc.html#label-Task-3A+Replace+Multiple+Children+with+Another+Child] + - {Task: Insert Child Before a Given Child}[../../tasks/rdoc/parent_rdoc.html#label-Task-3A+Insert+Child+Before+a+Given+Child] + - {Task: Insert Child After a Given Child}[../../tasks/rdoc/parent_rdoc.html#label-Task-3A+Insert+Child+After+a+Given+Child] +- {Deletions}[../../tasks/rdoc/parent_rdoc.html#label-Deletions] + - {Task: Remove a Given Child}[../../tasks/rdoc/parent_rdoc.html#label-Task-3A+Remove+a+Given+Child] + - {Task: Remove the Child at a Specified Offset}[../../tasks/rdoc/parent_rdoc.html#label-Task-3A+Remove+the+Child+at+a+Specified+Offset] + - {Task: Remove Children That Meet Specified Criteria}[../../tasks/rdoc/parent_rdoc.html#label-Task-3A+Remove+Children+That+Meet+Specified+Criteria] +- {Iterations}[../../tasks/rdoc/parent_rdoc.html#label-Iterations] + - {Task: Iterate Over Children}[../../tasks/rdoc/parent_rdoc.html#label-Task-3A+Iterate+Over+Children] + - {Task: Iterate Over Child Indexes}[../../tasks/rdoc/parent_rdoc.html#label-Task-3A+Iterate+Over+Child+Indexes] +- {Clones}[../../tasks/rdoc/parent_rdoc.html#label-Clones] + - {Task: Clone Deeply}[../../tasks/rdoc/parent_rdoc.html#label-Task-3A+Clone+Deeply] + diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/doc/rexml/tasks/tocs/node_toc.rdoc b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/doc/rexml/tasks/tocs/node_toc.rdoc new file mode 100644 index 0000000..d9114fa --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/doc/rexml/tasks/tocs/node_toc.rdoc @@ -0,0 +1,16 @@ +Tasks on this page: + +- {Siblings}[#label-Siblings] + - {Task: Find Previous Sibling}[#label-Task-3A+Find+Previous+Sibling] + - {Task: Find Next Sibling}[#label-Task-3A+Find+Next+Sibling] +- {Position}[#label-Position] + - {Task: Find Own Index Among Siblings}[#label-Task-3A+Find+Own+Index+Among+Siblings] +- {Recursive Traversal}[#label-Recursive+Traversal] + - {Task: Traverse Each Recursively}[#label-Task-3A+Traverse+Each+Recursively] +- {Recursive Search}[#label-Recursive+Search] + - {Task: Traverse Each Recursively}[#label-Task-3A+Traverse+Each+Recursively] +- {Representation}[#label-Representation] + - {Task: Represent a String}[#label-Task-3A+Represent+a+String] +- {Parent?}[#label-Parent-3F] + - {Task: Determine Whether the Node is a Parent}[#label-Task-3A+Determine+Whether+the+Node+is+a+Parent] + diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/doc/rexml/tasks/tocs/parent_toc.rdoc b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/doc/rexml/tasks/tocs/parent_toc.rdoc new file mode 100644 index 0000000..68fc0b7 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/doc/rexml/tasks/tocs/parent_toc.rdoc @@ -0,0 +1,25 @@ +Tasks on this page: + +- {Queries}[#label-Queries] + - {Task: Get the Count of Children}[#label-Task-3A+Get+the+Count+of+Children] + - {Task: Get the Child at a Given Index}[#label-Task-3A+Get+the+Child+at+a+Given+Index] + - {Task: Get the Index of a Given Child}[#label-Task-3A+Get+the+Index+of+a+Given+Child] + - {Task: Get the Children}[#label-Task-3A+Get+the+Children] + - {Task: Determine Whether the Node is a Parent}[#label-Task-3A+Determine+Whether+the+Node+is+a+Parent] +- {Additions}[#label-Additions] + - {Task: Add a Child at the Beginning}[#label-Task-3A+Add+a+Child+at+the+Beginning] + - {Task: Add a Child at the End}[#label-Task-3A+Add+a+Child+at+the+End] + - {Task: Replace a Child with Another Child}[#label-Task-3A+Replace+a+Child+with+Another+Child] + - {Task: Replace Multiple Children with Another Child}[#label-Task-3A+Replace+Multiple+Children+with+Another+Child] + - {Task: Insert Child Before a Given Child}[#label-Task-3A+Insert+Child+Before+a+Given+Child] + - {Task: Insert Child After a Given Child}[#label-Task-3A+Insert+Child+After+a+Given+Child] +- {Deletions}[#label-Deletions] + - {Task: Remove a Given Child}[#label-Task-3A+Remove+a+Given+Child] + - {Task: Remove the Child at a Specified Offset}[#label-Task-3A+Remove+the+Child+at+a+Specified+Offset] + - {Task: Remove Children That Meet Specified Criteria}[#label-Task-3A+Remove+Children+That+Meet+Specified+Criteria] +- {Iterations}[#label-Iterations] + - {Task: Iterate Over Children}[#label-Task-3A+Iterate+Over+Children] + - {Task: Iterate Over Child Indexes}[#label-Task-3A+Iterate+Over+Child+Indexes] +- {Clones}[#label-Clones] + - {Task: Clone Deeply}[#label-Task-3A+Clone+Deeply] + diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/doc/rexml/tutorial.rdoc b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/doc/rexml/tutorial.rdoc new file mode 100644 index 0000000..c85a70d --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/doc/rexml/tutorial.rdoc @@ -0,0 +1,1358 @@ += \REXML Tutorial + +== Why \REXML? + +- Ruby's \REXML library is part of the Ruby distribution, + so using it requires no gem installations. +- \REXML is fully maintained. +- \REXML is mature, having been in use for long years. + +== To Include, or Not to Include? + +REXML is a module. +To use it, you must require it: + + require 'rexml' # => true + +If you do not also include it, you must fully qualify references to REXML: + + REXML::Document # => REXML::Document + +If you also include the module, you may optionally omit REXML::: + + include REXML + Document # => REXML::Document + REXML::Document # => REXML::Document + +== Preliminaries + +All examples here assume that the following code has been executed: + + require 'rexml' + include REXML + +The source XML for many examples here is from file +{books.xml}[https://www.w3schools.com/xml/books.xml] at w3schools.com. +You may find it convenient to open that page in a new tab +(Ctrl-click in some browsers). + +Note that your browser may display the XML with modified whitespace +and without the XML declaration, which in this case is: + + + +For convenience, we capture the XML into a string variable: + + require 'open-uri' + source_string = URI.open('https://www.w3schools.com/xml/books.xml').read + +And into a file: + + File.write('source_file.xml', source_string) + +Throughout these examples, variable +doc+ will hold only the document +derived from these sources: + + doc = Document.new(source_string) + +== Parsing \XML \Source + +=== Parsing a Document + +Use method REXML::Document::new to parse XML source. + +The source may be a string: + + doc = Document.new(source_string) + +Or an \IO stream: + + doc = File.open('source_file.xml', 'r') do |io| + Document.new(io) + end + +Method URI.open returns a StringIO object, +so the source can be from a web page: + + require 'open-uri' + io = URI.open("https://www.w3schools.com/xml/books.xml") + io.class # => StringIO + doc = Document.new(io) + +For any of these sources, the returned object is an REXML::Document: + + doc # => ... + doc.class # => REXML::Document + +Note: 'UNDEFINED' is the "name" displayed for a document, +even though doc.name returns an empty string "". + +A parsed document may produce \REXML objects of many classes, +but the two that are likely to be of greatest interest are +REXML::Document and REXML::Element. +These two classes are covered in great detail in this tutorial. + +=== Context (Parsing Options) + +The context for parsing a document is a hash that influences +the way the XML is read and stored. + +The context entries are: + +- +:respect_whitespace+: controls treatment of whitespace. +- +:compress_whitespace+: determines whether whitespace is compressed. +- +:ignore_whitespace_nodes+: determines whether whitespace-only nodes are to be ignored. +- +:raw+: controls treatment of special characters and entities. + +See {Element Context}[../context_rdoc.html]. + +== Exploring the Document + +An REXML::Document object represents an XML document. + +The object inherits from its ancestor classes: + +- REXML::Child (includes module REXML::Node) + - REXML::Parent (includes module {Enumerable}[rdoc-ref:Enumerable]). + - REXML::Element (includes module REXML::Namespace). + - REXML::Document + +This section covers only those properties and methods that are unique to a document +(that is, not inherited or included). + +=== Document Properties + +A document has several properties (other than its children); + +- Document type. +- Node type. +- Name. +- Document. +- XPath + +[Document Type] + + A document may have a document type: + + my_xml = '' + my_doc = Document.new(my_xml) + doc_type = my_doc.doctype + doc_type.class # => REXML::DocType + doc_type.to_s # => "" + +[Node Type] + + A document also has a node type (always +:document+): + + doc.node_type # => :document + +[Name] + + A document has a name (always an empty string): + + doc.name # => "" + +[Document] + + \Method REXML::Document#document returns +self+: + + doc.document == doc # => true + + An object of a different class (\REXML::Element or \REXML::Child) + may have a document, which is the document to which the object belongs; + if so, that document will be an \REXML::Document object. + + doc.root.document.class # => REXML::Document + +[XPath] + + \method REXML::Element#xpath returns the string xpath to the element, + relative to its most distant ancestor: + + doc.root.class # => REXML::Element + doc.root.xpath # => "/bookstore" + doc.root.texts.first # => "\n\n" + doc.root.texts.first.xpath # => "/bookstore/text()" + + If there is no ancestor, returns the expanded name of the element: + + Element.new('foo').xpath # => "foo" + +=== Document Children + +A document may have children of these types: + +- XML declaration. +- Root element. +- Text. +- Processing instructions. +- Comments. +- CDATA. + +[XML Declaration] + + A document may an XML declaration, which is stored as an REXML::XMLDecl object: + + doc.xml_decl # => + doc.xml_decl.class # => REXML::XMLDecl + + Document.new('').xml_decl # => + + my_xml = '"' + my_doc = Document.new(my_xml) + xml_decl = my_doc.xml_decl + xml_decl.to_s # => "" + + The version, encoding, and stand-alone values may be retrieved separately: + + my_doc.version # => "1.0" + my_doc.encoding # => "UTF-8" + my_doc.stand_alone? # => "yes" + +[Root Element] + + A document may have a single element child, called the _root_ _element_, + which is stored as an REXML::Element object; + it may be retrieved with method +root+: + + doc.root # => ... + doc.root.class # => REXML::Element + + Document.new('').root # => nil + +[Text] + + A document may have text passages, each of which is stored + as an REXML::Text object: + + doc.texts.each {|t| p [t.class, t] } + + Output: + + [REXML::Text, "\n"] + +[Processing Instructions] + + A document may have processing instructions, which are stored + as REXML::Instruction objects: + + + + Output: + + [REXML::Instruction, ] + [REXML::Instruction, ] + +[Comments] + + A document may have comments, which are stored + as REXML::Comment objects: + + my_xml = <<-EOT + + + EOT + my_doc = Document.new(my_xml) + my_doc.comments.each {|c| p [c.class, c] } + + Output: + + [REXML::Comment, # ... , @string="foo">] + [REXML::Comment, # ... , @string="bar">] + +[CDATA] + + A document may have CDATA entries, which are stored + as REXML::CData objects: + + my_xml = <<-EOT + + + EOT + my_doc = Document.new(my_xml) + my_doc.cdatas.each {|cd| p [cd.class, cd] } + + Output: + + [REXML::CData, "foo"] + [REXML::CData, "bar"] + +The payload of a document is a tree of nodes, descending from the root element: + + doc.root.children.each do |child| + p [child, child.class] + end + +Output: + + [REXML::Text, "\n\n"] + [REXML::Element, ... ] + [REXML::Text, "\n\n"] + [REXML::Element, ... ] + [REXML::Text, "\n\n"] + [REXML::Element, ... ] + [REXML::Text, "\n\n"] + [REXML::Element, ... ] + [REXML::Text, "\n\n"] + +== Exploring an Element + +An REXML::Element object represents an XML element. + +The object inherits from its ancestor classes: + +- REXML::Child (includes module REXML::Node) + - REXML::Parent (includes module {Enumerable}[rdoc-ref:Enumerable]). + - REXML::Element (includes module REXML::Namespace). + +This section covers methods: + +- Defined in REXML::Element itself. +- Inherited from REXML::Parent and REXML::Child. +- Included from REXML::Node. + +=== Inside the Element + +[Brief String Representation] + + Use method REXML::Element#inspect to retrieve a brief string representation. + + doc.root.inspect # => " ... " + + The ellipsis (...) indicates that the element has children. + When there are no children, the ellipsis is omitted: + + Element.new('foo').inspect # => "" + + If the element has attributes, those are also included: + + doc.root.elements.first.inspect # => " ... " + +[Extended String Representation] + + Use inherited method REXML::Child.bytes to retrieve an extended + string representation. + + doc.root.bytes # => "\n\n\n Everyday Italian\n Giada De Laurentiis\n 2005\n 30.00\n\n\n\n Harry Potter\n J K. Rowling\n 2005\n 29.99\n\n\n\n XQuery Kick Start\n James McGovern\n Per Bothner\n Kurt Cagle\n James Linn\n Vaidyanathan Nagarajan\n 2003\n 49.99\n\n\n\n Learning XML\n Erik T. Ray\n 2003\n 39.95\n\n\n" + +[Node Type] + + Use method REXML::Element#node_type to retrieve the node type (always +:element+): + + doc.root.node_type # => :element + +[Raw Mode] + + Use method REXML::Element#raw to retrieve whether (+true+ or +nil+) + raw mode is set. + + doc.root.raw # => nil + +[Context] + + Use method REXML::Element#context to retrieve the context hash + (see {Element Context}[../context_rdoc.html]): + + doc.root.context # => {} + +=== Relationships + +An element may have: + +- Ancestors. +- Siblings. +- Children. + +==== Ancestors + +[Containing Document] + + Use method REXML::Element#document to retrieve the containing document, if any: + + ele = doc.root.elements.first # => ... + ele.document # => ... + ele = Element.new('foo') # => + ele.document # => nil + +[Root Element] + + Use method REXML::Element#root to retrieve the root element: + + ele = doc.root.elements.first # => ... + ele.root # => ... + ele = Element.new('foo') # => + ele.root # => + +[Root Node] + + Use method REXML::Element#root_node to retrieve the most distant ancestor, + which is the containing document, if any, otherwise the root element: + + ele = doc.root.elements.first # => ... + ele.root_node # => ... + ele = Element.new('foo') # => + ele.root_node # => + +[Parent] + + Use inherited method REXML::Child#parent to retrieve the parent + + ele = doc.root # => ... + ele.parent # => ... + ele = doc.root.elements.first # => ... + ele.parent # => ... + + Use included method REXML::Node#index_in_parent to retrieve the index + of the element among all of its parents children (not just the element children). + Note that while the index for doc.root.elements[n] is 1-based, + the returned index is 0-based. + + doc.root.children # => + # ["\n\n", + # ... , + # "\n\n", + # ... , + # "\n\n", + # ... , + # "\n\n", + # ... , + # "\n\n"] + ele = doc.root.elements[1] # => ... + ele.index_in_parent # => 2 + ele = doc.root.elements[2] # => ... + ele.index_in_parent# => 4 + +==== Siblings + +[Next Element] + + Use method REXML::Element#next_element to retrieve the first following + sibling that is itself an element (+nil+ if there is none): + + ele = doc.root.elements[1] + while ele do + p [ele.class, ele] + ele = ele.next_element + end + p ele + + Output: + + [REXML::Element, ... ] + [REXML::Element, ... ] + [REXML::Element, ... ] + [REXML::Element, ... ] + +[Previous Element] + + Use method REXML::Element#previous_element to retrieve the first preceding + sibling that is itself an element (+nil+ if there is none): + + ele = doc.root.elements[4] + while ele do + p [ele.class, ele] + ele = ele.previous_element + end + p ele + + Output: + + [REXML::Element, ... ] + [REXML::Element, ... ] + [REXML::Element, ... ] + [REXML::Element, ... ] + +[Next Node] + + Use included method REXML::Node.next_sibling_node + (or its alias next_sibling) to retrieve the first following node + regardless of its class: + + node = doc.root.children[0] + while node do + p [node.class, node] + node = node.next_sibling + end + p node + + Output: + + [REXML::Text, "\n\n"] + [REXML::Element, ... ] + [REXML::Text, "\n\n"] + [REXML::Element, ... ] + [REXML::Text, "\n\n"] + [REXML::Element, ... ] + [REXML::Text, "\n\n"] + [REXML::Element, ... ] + [REXML::Text, "\n\n"] + +[Previous Node] + + Use included method REXML::Node.previous_sibling_node + (or its alias previous_sibling) to retrieve the first preceding node + regardless of its class: + + node = doc.root.children[-1] + while node do + p [node.class, node] + node = node.previous_sibling + end + p node + + Output: + + [REXML::Text, "\n\n"] + [REXML::Element, ... ] + [REXML::Text, "\n\n"] + [REXML::Element, ... ] + [REXML::Text, "\n\n"] + [REXML::Element, ... ] + [REXML::Text, "\n\n"] + [REXML::Element, ... ] + [REXML::Text, "\n\n"] + +==== Children + +[Child Count] + + Use inherited method REXML::Parent.size to retrieve the count + of nodes (of all types) in the element: + + doc.root.size # => 9 + +[Child Nodes] + + Use inherited method REXML::Parent.children to retrieve an array + of the child nodes (of all types): + + doc.root.children # => + # ["\n\n", + # ... , + # "\n\n", + # ... , + # "\n\n", + # ... , + # "\n\n", + # ... , + # "\n\n"] + +[Child at Index] + + Use method REXML::Element#[] to retrieve the child at a given numerical index, + or +nil+ if there is no such child: + + doc.root[0] # => "\n\n" + doc.root[1] # => ... + doc.root[7] # => ... + doc.root[8] # => "\n\n" + + doc.root[-1] # => "\n\n" + doc.root[-2] # => ... + + doc.root[50] # => nil + +[Index of Child] + + Use method REXML::Parent#index to retrieve the zero-based child index + of the given object, or #size - 1 if there is no such child: + + ele = doc.root # => ... + ele.index(ele[0]) # => 0 + ele.index(ele[1]) # => 1 + ele.index(ele[7]) # => 7 + ele.index(ele[8]) # => 8 + + ele.index(ele[-1]) # => 8 + ele.index(ele[-2]) # => 7 + + ele.index(ele[50]) # => 8 + +[Element Children] + + Use method REXML::Element#has_elements? to retrieve whether the element + has element children: + + doc.root.has_elements? # => true + REXML::Element.new('foo').has_elements? # => false + + Use method REXML::Element#elements to retrieve the REXML::Elements object + containing the element children: + + eles = doc.root.elements + eles # => # ... > + eles.size # => 4 + eles.each {|e| p [e.class], e } + + Output: + + [ ... , + ... , + ... , + ... + ] + +Note that while in this example, all the element children of the root element are +elements of the same name, 'book', that is not true of all documents; +a root element (or any other element) may have any mixture of child elements. + +[CDATA Children] + + Use method REXML::Element#cdatas to retrieve a frozen array of CDATA children: + + my_xml = <<-EOT + + + + + EOT + my_doc = REXML::Document.new(my_xml) + cdatas my_doc.root.cdatas + cdatas.frozen? # => true + cdatas.map {|cd| cd.class } # => [REXML::CData, REXML::CData] + +[Comment Children] + + Use method REXML::Element#comments to retrieve a frozen array of comment children: + + my_xml = <<-EOT + + + + + EOT + my_doc = REXML::Document.new(my_xml) + comments = my_doc.root.comments + comments.frozen? # => true + comments.map {|c| c.class } # => [REXML::Comment, REXML::Comment] + comments.map {|c| c.to_s } # => ["foo", "bar"] + +[Processing Instruction Children] + + Use method REXML::Element#instructions to retrieve a frozen array + of processing instruction children: + + my_xml = <<-EOT + + + + + EOT + my_doc = REXML::Document.new(my_xml) + instrs = my_doc.root.instructions + instrs.frozen? # => true + instrs.map {|i| i.class } # => [REXML::Instruction, REXML::Instruction] + instrs.map {|i| i.to_s } # => ["", ""] + +[Text Children] + + Use method REXML::Element#has_text? to retrieve whether the element + has text children: + + doc.root.has_text? # => true + REXML::Element.new('foo').has_text? # => false + + Use method REXML::Element#texts to retrieve a frozen array of text children: + + my_xml = 'textmore' + my_doc = REXML::Document.new(my_xml) + texts = my_doc.root.texts + texts.frozen? # => true + texts.map {|t| t.class } # => [REXML::Text, REXML::Text] + texts.map {|t| t.to_s } # => ["text", "more"] + +[Parenthood] + + Use inherited method REXML::Parent.parent? to retrieve whether the element is a parent; + always returns +true+; only REXML::Child#parent returns +false+. + + doc.root.parent? # => true + +=== Element Attributes + +Use method REXML::Element#has_attributes? to return whether the element +has attributes: + + ele = doc.root # => ... + ele.has_attributes? # => false + ele = ele.elements.first # => ... + ele.has_attributes? # => true + +Use method REXML::Element#attributes to return the hash +containing the attributes for the element. +Each hash key is a string attribute name; +each hash value is an REXML::Attribute object. + + ele = doc.root # => ... + attrs = ele.attributes # => {} + + ele = ele.elements.first # => ... + attrs = ele.attributes # => {"category"=>category='cooking'} + attrs.size # => 1 + attr_name = attrs.keys.first # => "category" + attr_name.class # => String + attr_value = attrs.values.first # => category='cooking' + attr_value.class # => REXML::Attribute + +Use method REXML::Element#[] to retrieve the string value for a given attribute, +which may be given as either a string or a symbol: + + ele = doc.root.elements.first # => ... + attr_value = ele['category'] # => "cooking" + attr_value.class # => String + ele['nosuch'] # => nil + +Use method REXML::Element#attribute to retrieve the value of a named attribute: + + my_xml = "" + my_doc = REXML::Document.new(my_xml) + my_doc.root.attribute("x") # => x='x' + my_doc.root.attribute("x", "a") # => a:x='a:x' + +== Whitespace + +Use method REXML::Element#ignore_whitespace_nodes to determine whether +whitespace nodes were ignored when the XML was parsed; +returns +true+ if so, +nil+ otherwise. + +Use method REXML::Element#whitespace to determine whether whitespace +is respected for the element; returns +true+ if so, +false+ otherwise. + +== Namespaces + +Use method REXML::Element#namespace to retrieve the string namespace URI +for the element, which may derive from one of its ancestors: + + xml_string = <<-EOT + + + + + + + EOT + d = Document.new(xml_string) + b = d.elements['//b'] + b.namespace # => "1" + b.namespace('y') # => "2" + b.namespace('nosuch') # => nil + +Use method REXML::Element#namespaces to retrieve a hash of all defined namespaces +in the element and its ancestors: + + xml_string = <<-EOT + + + + + + + EOT + d = Document.new(xml_string) + d.elements['//a'].namespaces # => {"x"=>"1", "y"=>"2"} + d.elements['//b'].namespaces # => {"x"=>"1", "y"=>"2"} + d.elements['//c'].namespaces # => {"x"=>"1", "y"=>"2", "z"=>"3"} + +Use method REXML::Element#prefixes to retrieve an array of the string prefixes (names) +of all defined namespaces in the element and its ancestors: + + xml_string = <<-EOT + + + + + + + EOT + d = Document.new(xml_string, {compress_whitespace: :all}) + d.elements['//a'].prefixes # => ["x", "y"] + d.elements['//b'].prefixes # => ["x", "y"] + d.elements['//c'].prefixes # => ["x", "y", "z"] + +== Traversing + +You can use certain methods to traverse children of the element. +Each child that meets given criteria is yielded to the given block. + +[Traverse All Children] + + Use inherited method REXML::Parent#each (or its alias #each_child) to traverse + all children of the element: + + doc.root.each {|child| p [child.class, child] } + + Output: + + [REXML::Text, "\n\n"] + [REXML::Element, ... ] + [REXML::Text, "\n\n"] + [REXML::Element, ... ] + [REXML::Text, "\n\n"] + [REXML::Element, ... ] + [REXML::Text, "\n\n"] + [REXML::Element, ... ] + [REXML::Text, "\n\n"] + +[Traverse Element Children] + + Use method REXML::Element#each_element to traverse only the element children + of the element: + + doc.root.each_element {|e| p [e.class, e] } + + Output: + + [REXML::Element, ... ] + [REXML::Element, ... ] + [REXML::Element, ... ] + [REXML::Element, ... ] + +[Traverse Element Children with Attribute] + + Use method REXML::Element#each_element_with_attribute with the single argument + +attr_name+ to traverse each element child that has the given attribute: + + my_doc = Document.new '' + my_doc.root.each_element_with_attribute('id') {|e| p [e.class, e] } + + Output: + + [REXML::Element, ] + [REXML::Element, ] + [REXML::Element, ] + + Use the same method with a second argument +value+ to traverse + each element child element that has the given attribute and value: + + my_doc.root.each_element_with_attribute('id', '1') {|e| p [e.class, e] } + + Output: + + [REXML::Element, ] + [REXML::Element, ] + + Use the same method with a third argument +max+ to traverse + no more than the given number of element children: + + my_doc.root.each_element_with_attribute('id', '1', 1) {|e| p [e.class, e] } + + Output: + + [REXML::Element, ] + + Use the same method with a fourth argument +xpath+ to traverse + only those element children that match the given xpath: + + my_doc.root.each_element_with_attribute('id', '1', 2, '//d') {|e| p [e.class, e] } + + Output: + + [REXML::Element, ] + +[Traverse Element Children with Text] + + Use method REXML::Element#each_element_with_text with no arguments + to traverse those element children that have text: + + my_doc = Document.new 'bbd' + my_doc.root.each_element_with_text {|e| p [e.class, e] } + + Output: + + [REXML::Element, ... ] + [REXML::Element, ... ] + [REXML::Element, ... ] + + Use the same method with the single argument +text+ to traverse + those element children that have exactly that text: + + my_doc.root.each_element_with_text('b') {|e| p [e.class, e] } + + Output: + + [REXML::Element, ... ] + [REXML::Element, ... ] + + Use the same method with additional second argument +max+ to traverse + no more than the given number of element children: + + my_doc.root.each_element_with_text('b', 1) {|e| p [e.class, e] } + + Output: + + [REXML::Element, ... ] + + Use the same method with additional third argument +xpath+ to traverse + only those element children that also match the given xpath: + + my_doc.root.each_element_with_text('b', 2, '//c') {|e| p [e.class, e] } + + Output: + + [REXML::Element, ... ] + +[Traverse Element Children's Indexes] + + Use inherited method REXML::Parent#each_index to traverse all children's indexes + (not just those of element children): + + doc.root.each_index {|i| print i } + + Output: + + 012345678 + +[Traverse Children Recursively] + + Use included method REXML::Node#each_recursive to traverse all children recursively: + + doc.root.each_recursive {|child| p [child.class, child] } + + Output: + + [REXML::Element, ... ] + [REXML::Element, ... </>] + [REXML::Element, <author> ... </>] + [REXML::Element, <year> ... </>] + [REXML::Element, <price> ... </>] + [REXML::Element, <book category='children'> ... </>] + [REXML::Element, <title lang='en'> ... </>] + [REXML::Element, <author> ... </>] + [REXML::Element, <year> ... </>] + [REXML::Element, <price> ... </>] + [REXML::Element, <book category='web'> ... </>] + [REXML::Element, <title lang='en'> ... </>] + [REXML::Element, <author> ... </>] + [REXML::Element, <author> ... </>] + [REXML::Element, <author> ... </>] + [REXML::Element, <author> ... </>] + [REXML::Element, <author> ... </>] + [REXML::Element, <year> ... </>] + [REXML::Element, <price> ... </>] + [REXML::Element, <book category='web' cover='paperback'> ... </>] + [REXML::Element, <title lang='en'> ... </>] + [REXML::Element, <author> ... </>] + [REXML::Element, <year> ... </>] + [REXML::Element, <price> ... </>] + +== Searching + +You can use certain methods to search among the descendants of an element. + +Use method REXML::Element#get_elements to retrieve all element children of the element +that match the given +xpath+: + + xml_string = <<-EOT + <root> + <a level='1'> + <a level='2'/> + </a> + </root> + EOT + d = Document.new(xml_string) + d.root.get_elements('//a') # => [<a level='1'> ... </>, <a level='2'/>] + +Use method REXML::Element#get_text with no argument to retrieve the first text node +in the first child: + + my_doc = Document.new "<p>some text <b>this is bold!</b> more text</p>" + text_node = my_doc.root.get_text + text_node.class # => REXML::Text + text_node.to_s # => "some text " + +Use the same method with argument +xpath+ to retrieve the first text node +in the first child that matches the xpath: + + my_doc.root.get_text(1) # => "this is bold!" + +Use method REXML::Element#text with no argument to retrieve the text +from the first text node in the first child: + + my_doc = Document.new "<p>some text <b>this is bold!</b> more text</p>" + text_node = my_doc.root.text + text_node.class # => String + text_node # => "some text " + +Use the same method with argument +xpath+ to retrieve the text from the first text node +in the first child that matches the xpath: + + my_doc.root.text(1) # => "this is bold!" + +Use included method REXML::Node#find_first_recursive +to retrieve the first descendant element +for which the given block returns a truthy value, or +nil+ if none: + + doc.root.find_first_recursive do |ele| + ele.name == 'price' + end # => <price> ... </> + doc.root.find_first_recursive do |ele| + ele.name == 'nosuch' + end # => nil + +== Editing + +=== Editing a Document + +[Creating a Document] + + Create a new document with method REXML::Document::new: + + doc = Document.new(source_string) + empty_doc = REXML::Document.new + +[Adding to the Document] + + Add an XML declaration with method REXML::Document#add + and an argument of type REXML::XMLDecl: + + my_doc = Document.new + my_doc.xml_decl.to_s # => "" + my_doc.add(XMLDecl.new('2.0')) + my_doc.xml_decl.to_s # => "<?xml version='2.0'?>" + + Add a document type with method REXML::Document#add + and an argument of type REXML::DocType: + + my_doc = Document.new + my_doc.doctype.to_s # => "" + my_doc.add(DocType.new('foo')) + my_doc.doctype.to_s # => "<!DOCTYPE foo>" + + Add a node of any other REXML type with method REXML::Document#add and an argument + that is not of type REXML::XMLDecl or REXML::DocType: + + my_doc = Document.new + my_doc.add(Element.new('foo')) + my_doc.to_s # => "<foo/>" + + Add an existing element as the root element with method REXML::Document#add_element: + + ele = Element.new('foo') + my_doc = Document.new + my_doc.add_element(ele) + my_doc.root # => <foo/> + + Create and add an element as the root element with method REXML::Document#add_element: + + my_doc = Document.new + my_doc.add_element('foo') + my_doc.root # => <foo/> + +=== Editing an Element + +==== Creating an Element + +Create a new element with method REXML::Element::new: + + ele = Element.new('foo') # => <foo/> + +==== Setting Element Properties + +Set the context for an element with method REXML::Element#context= +(see {Element Context}[../context_rdoc.html]): + + ele.context # => nil + ele.context = {ignore_whitespace_nodes: :all} + ele.context # => {:ignore_whitespace_nodes=>:all} + +Set the parent for an element with inherited method REXML::Child#parent= + + ele.parent # => nil + ele.parent = Element.new('bar') + ele.parent # => <bar/> + +Set the text for an element with method REXML::Element#text=: + + ele.text # => nil + ele.text = 'bar' + ele.text # => "bar" + +==== Adding to an Element + +Add a node as the last child with inherited method REXML::Parent#add (or its alias #push): + + ele = Element.new('foo') # => <foo/> + ele.push(Text.new('bar')) + ele.push(Element.new('baz')) + ele.children # => ["bar", <baz/>] + +Add a node as the first child with inherited method REXML::Parent#unshift: + + ele = Element.new('foo') # => <foo/> + ele.unshift(Element.new('bar')) + ele.unshift(Text.new('baz')) + ele.children # => ["bar", <baz/>] + +Add an element as the last child with method REXML::Element#add_element: + + ele = Element.new('foo') # => <foo/> + ele.add_element('bar') + ele.add_element(Element.new('baz')) + ele.children # => [<bar/>, <baz/>] + +Add a text node as the last child with method REXML::Element#add_text: + + ele = Element.new('foo') # => <foo/> + ele.add_text('bar') + ele.add_text(Text.new('baz')) + ele.children # => ["bar", "baz"] + +Insert a node before a given node with method REXML::Parent#insert_before: + + ele = Element.new('foo') # => <foo/> + ele.add_text('bar') + ele.add_text(Text.new('baz')) + ele.children # => ["bar", "baz"] + target = ele[1] # => "baz" + ele.insert_before(target, Text.new('bat')) + ele.children # => ["bar", "bat", "baz"] + +Insert a node after a given node with method REXML::Parent#insert_after: + + ele = Element.new('foo') # => <foo/> + ele.add_text('bar') + ele.add_text(Text.new('baz')) + ele.children # => ["bar", "baz"] + target = ele[0] # => "bar" + ele.insert_after(target, Text.new('bat')) + ele.children # => ["bar", "bat", "baz"] + +Add an attribute with method REXML::Element#add_attribute: + + ele = Element.new('foo') # => <foo/> + ele.add_attribute('bar', 'baz') + ele.add_attribute(Attribute.new('bat', 'bam')) + ele.attributes # => {"bar"=>bar='baz', "bat"=>bat='bam'} + +Add multiple attributes with method REXML::Element#add_attributes: + + ele = Element.new('foo') # => <foo/> + ele.add_attributes({'bar' => 'baz', 'bat' => 'bam'}) + ele.add_attributes([['ban', 'bap'], ['bah', 'bad']]) + ele.attributes # => {"bar"=>bar='baz', "bat"=>bat='bam', "ban"=>ban='bap', "bah"=>bah='bad'} + +Add a namespace with method REXML::Element#add_namespace: + + ele = Element.new('foo') # => <foo/> + ele.add_namespace('bar') + ele.add_namespace('baz', 'bat') + ele.namespaces # => {"xmlns"=>"bar", "baz"=>"bat"} + +==== Deleting from an Element + +Delete a specific child object with inherited method REXML::Parent#delete: + + ele = Element.new('foo') # => <foo/> + ele.add_element('bar') + ele.add_text('baz') + ele.children # => [<bar/>, "baz"] + target = ele[1] # => "baz" + ele.delete(target) # => "baz" + ele.children # => [<bar/>] + target = ele[0] # => <baz/> + ele.delete(target) # => <baz/> + ele.children # => [] + +Delete a child at a specific index with inherited method REXML::Parent#delete_at: + + ele = Element.new('foo') # => <foo/> + ele.add_element('bar') + ele.add_text('baz') + ele.children # => [<bar/>, "baz"] + ele.delete_at(1) + ele.children # => [<bar/>] + ele.delete_at(0) + ele.children # => [] + +Delete all children meeting a specified criterion with inherited method +REXML::Parent#delete_if: + + ele = Element.new('foo') # => <foo/> + ele.add_element('bar') + ele.add_text('baz') + ele.add_element('bat') + ele.add_text('bam') + ele.children # => [<bar/>, "baz", <bat/>, "bam"] + ele.delete_if {|child| child.instance_of?(Text) } + ele.children # => [<bar/>, <bat/>] + +Delete an element at a specific 1-based index with method REXML::Element#delete_element: + + ele = Element.new('foo') # => <foo/> + ele.add_element('bar') + ele.add_text('baz') + ele.add_element('bat') + ele.add_text('bam') + ele.children # => [<bar/>, "baz", <bat/>, "bam"] + ele.delete_element(2) # => <bat/> + ele.children # => [<bar/>, "baz", "bam"] + ele.delete_element(1) # => <bar/> + ele.children # => ["baz", "bam"] + +Delete a specific element with the same method: + + ele = Element.new('foo') # => <foo/> + ele.add_element('bar') + ele.add_text('baz') + ele.add_element('bat') + ele.add_text('bam') + ele.children # => [<bar/>, "baz", <bat/>, "bam"] + target = ele.elements[2] # => <bat/> + ele.delete_element(target) # => <bat/> + ele.children # => [<bar/>, "baz", "bam"] + +Delete an element matching an xpath using the same method: + + ele = Element.new('foo') # => <foo/> + ele.add_element('bar') + ele.add_text('baz') + ele.add_element('bat') + ele.add_text('bam') + ele.children # => [<bar/>, "baz", <bat/>, "bam"] + ele.delete_element('./bat') # => <bat/> + ele.children # => [<bar/>, "baz", "bam"] + ele.delete_element('./bar') # => <bar/> + ele.children # => ["baz", "bam"] + +Delete an attribute by name with method REXML::Element#delete_attribute: + + ele = Element.new('foo') # => <foo/> + ele.add_attributes({'bar' => 'baz', 'bam' => 'bat'}) + ele.attributes # => {"bar"=>bar='baz', "bam"=>bam='bat'} + ele.delete_attribute('bam') + ele.attributes # => {"bar"=>bar='baz'} + +Delete a namespace with method REXML::Element#delete_namespace: + + ele = Element.new('foo') # => <foo/> + ele.add_namespace('bar') + ele.add_namespace('baz', 'bat') + ele.namespaces # => {"xmlns"=>"bar", "baz"=>"bat"} + ele.delete_namespace('xmlns') + ele.namespaces # => {} # => {"baz"=>"bat"} + ele.delete_namespace('baz') + ele.namespaces # => {} # => {} + +Remove an element from its parent with inherited method REXML::Child#remove: + + ele = Element.new('foo') # => <foo/> + parent = Element.new('bar') # => <bar/> + parent.add_element(ele) # => <foo/> + parent.children.size # => 1 + ele.remove # => <foo/> + parent.children.size # => 0 + +==== Replacing Nodes + +Replace the node at a given 0-based index with inherited method REXML::Parent#[]=: + + ele = Element.new('foo') # => <foo/> + ele.add_element('bar') + ele.add_text('baz') + ele.add_element('bat') + ele.add_text('bam') + ele.children # => [<bar/>, "baz", <bat/>, "bam"] + ele[2] = Text.new('bad') # => "bad" + ele.children # => [<bar/>, "baz", "bad", "bam"] + +Replace a given node with another node with inherited method REXML::Parent#replace_child: + + ele = Element.new('foo') # => <foo/> + ele.add_element('bar') + ele.add_text('baz') + ele.add_element('bat') + ele.add_text('bam') + ele.children # => [<bar/>, "baz", <bat/>, "bam"] + target = ele[2] # => <bat/> + ele.replace_child(target, Text.new('bah')) + ele.children # => [<bar/>, "baz", "bah", "bam"] + +Replace +self+ with a given node with inherited method REXML::Child#replace_with: + + ele = Element.new('foo') # => <foo/> + ele.add_element('bar') + ele.add_text('baz') + ele.add_element('bat') + ele.add_text('bam') + ele.children # => [<bar/>, "baz", <bat/>, "bam"] + target = ele[2] # => <bat/> + target.replace_with(Text.new('bah')) + ele.children # => [<bar/>, "baz", "bah", "bam"] + +=== Cloning + +Create a shallow clone of an element with method REXML::Element#clone. +The clone contains the name and attributes, but not the parent or children: + + ele = Element.new('foo') + ele.add_attributes({'bar' => 0, 'baz' => 1}) + ele.clone # => <foo bar='0' baz='1'/> + +Create a shallow clone of a document with method REXML::Document#clone. +The XML declaration is copied; the document type and root element are not cloned: + + my_xml = '<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE foo><root/>' + my_doc = Document.new(my_xml) + clone_doc = my_doc.clone + + my_doc.xml_decl # => <?xml ... ?> + clone_doc.xml_decl # => <?xml ... ?> + + my_doc.doctype.to_s # => "<?xml version='1.0' encoding='UTF-8'?>" + clone_doc.doctype.to_s # => "" + + my_doc.root # => <root/> + clone_doc.root # => nil + +Create a deep clone of an element with inherited method REXML::Parent#deep_clone. +All nodes and attributes are copied: + + doc.to_s.size # => 825 + clone = doc.deep_clone + clone.to_s.size # => 825 + +== Writing the Document + +Write a document to an \IO stream (defaults to <tt>$stdout</tt>) +with method REXML::Document#write: + + doc.write + +Output: + + <?xml version='1.0' encoding='UTF-8'?> + <bookstore> + + <book category='cooking'> + <title lang='en'>Everyday Italian + Giada De Laurentiis + 2005 + 30.00 + + + + Harry Potter + J K. Rowling + 2005 + 29.99 + + + + XQuery Kick Start + James McGovern + Per Bothner + Kurt Cagle + James Linn + Vaidyanathan Nagarajan + 2003 + 49.99 + + + + Learning XML + Erik T. Ray + 2003 + 39.95 + + + diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml.rb b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml.rb new file mode 100644 index 0000000..eee246e --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml.rb @@ -0,0 +1,3 @@ +# frozen_string_literal: true + +require_relative "rexml/document" diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/attlistdecl.rb b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/attlistdecl.rb new file mode 100644 index 0000000..44a91d6 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/attlistdecl.rb @@ -0,0 +1,63 @@ +# frozen_string_literal: false +#vim:ts=2 sw=2 noexpandtab: +require_relative 'child' +require_relative 'source' + +module REXML + # This class needs: + # * Documentation + # * Work! Not all types of attlists are intelligently parsed, so we just + # spew back out what we get in. This works, but it would be better if + # we formatted the output ourselves. + # + # AttlistDecls provide *just* enough support to allow namespace + # declarations. If you need some sort of generalized support, or have an + # interesting idea about how to map the hideous, terrible design of DTD + # AttlistDecls onto an intuitive Ruby interface, let me know. I'm desperate + # for anything to make DTDs more palateable. + class AttlistDecl < Child + include Enumerable + + # What is this? Got me. + attr_reader :element_name + + # Create an AttlistDecl, pulling the information from a Source. Notice + # that this isn't very convenient; to create an AttlistDecl, you basically + # have to format it yourself, and then have the initializer parse it. + # Sorry, but for the foreseeable future, DTD support in REXML is pretty + # weak on convenience. Have I mentioned how much I hate DTDs? + def initialize(source) + super() + if (source.kind_of? Array) + @element_name, @pairs, @contents = *source + end + end + + # Access the attlist attribute/value pairs. + # value = attlist_decl[ attribute_name ] + def [](key) + @pairs[key] + end + + # Whether an attlist declaration includes the given attribute definition + # if attlist_decl.include? "xmlns:foobar" + def include?(key) + @pairs.keys.include? key + end + + # Iterate over the key/value pairs: + # attlist_decl.each { |attribute_name, attribute_value| ... } + def each(&block) + @pairs.each(&block) + end + + # Write out exactly what we got in. + def write out, indent=-1 + out << @contents + end + + def node_type + :attlistdecl + end + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/attribute.rb b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/attribute.rb new file mode 100644 index 0000000..c567324 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/attribute.rb @@ -0,0 +1,210 @@ +# frozen_string_literal: true +require_relative "namespace" +require_relative 'text' + +module REXML + # Defines an Element Attribute; IE, a attribute=value pair, as in: + # . Attributes can be in their own + # namespaces. General users of REXML will not interact with the + # Attribute class much. + class Attribute + include Node + include Namespace + + # The element to which this attribute belongs + attr_reader :element + PATTERN = /\s*(#{NAME_STR})\s*=\s*(["'])(.*?)\2/um + + NEEDS_A_SECOND_CHECK = /(<|&((#{Entity::NAME});|(#0*((?:\d+)|(?:x[a-fA-F0-9]+)));)?)/um + + # Constructor. + # FIXME: The parser doesn't catch illegal characters in attributes + # + # first:: + # Either: an Attribute, which this new attribute will become a + # clone of; or a String, which is the name of this attribute + # second:: + # If +first+ is an Attribute, then this may be an Element, or nil. + # If nil, then the Element parent of this attribute is the parent + # of the +first+ Attribute. If the first argument is a String, + # then this must also be a String, and is the content of the attribute. + # If this is the content, it must be fully normalized (contain no + # illegal characters). + # parent:: + # Ignored unless +first+ is a String; otherwise, may be the Element + # parent of this attribute, or nil. + # + # + # Attribute.new( attribute_to_clone ) + # Attribute.new( attribute_to_clone, parent_element ) + # Attribute.new( "attr", "attr_value" ) + # Attribute.new( "attr", "attr_value", parent_element ) + def initialize( first, second=nil, parent=nil ) + @normalized = @unnormalized = @element = nil + if first.kind_of? Attribute + self.name = first.expanded_name + @unnormalized = first.value + if second.kind_of? Element + @element = second + else + @element = first.element + end + elsif first.kind_of? String + @element = parent + self.name = first + @normalized = second.to_s + else + raise "illegal argument #{first.class.name} to Attribute constructor" + end + end + + # Returns the namespace of the attribute. + # + # e = Element.new( "elns:myelement" ) + # e.add_attribute( "nsa:a", "aval" ) + # e.add_attribute( "b", "bval" ) + # e.attributes.get_attribute( "a" ).prefix # -> "nsa" + # e.attributes.get_attribute( "b" ).prefix # -> "" + # a = Attribute.new( "x", "y" ) + # a.prefix # -> "" + def prefix + super + end + + # Returns the namespace URL, if defined, or nil otherwise + # + # e = Element.new("el") + # e.add_namespace("ns", "http://url") + # e.add_attribute("ns:a", "b") + # e.add_attribute("nsx:a", "c") + # e.attribute("ns:a").namespace # => "http://url" + # e.attribute("nsx:a").namespace # => nil + # + # This method always returns "" for no namespace attribute. Because + # the default namespace doesn't apply to attribute names. + # + # From https://www.w3.org/TR/xml-names/#uniqAttrs + # + # > the default namespace does not apply to attribute names + # + # e = REXML::Element.new("el") + # e.add_namespace("", "http://example.com/") + # e.namespace # => "http://example.com/" + # e.add_attribute("a", "b") + # e.attribute("a").namespace # => "" + def namespace arg=nil + arg = prefix if arg.nil? + if arg == "" + "" + else + @element.namespace(arg) + end + end + + # Returns true if other is an Attribute and has the same name and value, + # false otherwise. + def ==( other ) + other.kind_of?(Attribute) and other.name==name and other.value==value + end + + # Creates (and returns) a hash from both the name and value + def hash + name.hash + value.hash + end + + # Returns this attribute out as XML source, expanding the name + # + # a = Attribute.new( "x", "y" ) + # a.to_string # -> "x='y'" + # b = Attribute.new( "ns:x", "y" ) + # b.to_string # -> "ns:x='y'" + def to_string + value = to_s + if @element and @element.context and @element.context[:attribute_quote] == :quote + value = value.gsub('"', '"') if value.include?('"') + %Q^#@expanded_name="#{value}"^ + else + value = value.gsub("'", ''') if value.include?("'") + "#@expanded_name='#{value}'" + end + end + + def doctype + @element&.document&.doctype + end + + # Returns the attribute value, with entities replaced + def to_s + return @normalized if @normalized + + @normalized = Text::normalize( @unnormalized, doctype ) + @normalized + end + + # Returns the UNNORMALIZED value of this attribute. That is, entities + # have been expanded to their values + def value + return @unnormalized if @unnormalized + + @unnormalized = Text::unnormalize(@normalized, doctype, + entity_expansion_text_limit: @element&.document&.entity_expansion_text_limit) + end + + # The normalized value of this attribute. That is, the attribute with + # entities intact. + def normalized=(new_normalized) + @normalized = new_normalized + @unnormalized = nil + end + + # Returns a copy of this attribute + def clone + Attribute.new self + end + + # Sets the element of which this object is an attribute. Normally, this + # is not directly called. + # + # Returns this attribute + def element=( element ) + @element = element + + if @normalized + Text.check( @normalized, NEEDS_A_SECOND_CHECK ) + end + + self + end + + # Removes this Attribute from the tree, and returns true if successful + # + # This method is usually not called directly. + def remove + @element.attributes.delete self.name unless @element.nil? + end + + # Writes this attribute (EG, puts 'key="value"' to the output) + def write( output, indent=-1 ) + output << to_string + end + + def node_type + :attribute + end + + def inspect + rv = +"" + write( rv ) + rv + end + + def xpath + @element.xpath + "/@#{self.expanded_name}" + end + + def document + @element&.document + end + end +end +#vim:ts=2 sw=2 noexpandtab: diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/cdata.rb b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/cdata.rb new file mode 100644 index 0000000..264ad64 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/cdata.rb @@ -0,0 +1,68 @@ +# frozen_string_literal: false +require_relative "text" + +module REXML + class CData < Text + START = '' + ILLEGAL = /(\]\]>)/ + + # Constructor. CData is data between + # + # _Examples_ + # CData.new( source ) + # CData.new( "Here is some CDATA" ) + # CData.new( "Some unprocessed data", respect_whitespace_TF, parent_element ) + def initialize( first, whitespace=true, parent=nil ) + super( first, whitespace, parent, false, true, ILLEGAL ) + end + + # Make a copy of this object + # + # _Examples_ + # c = CData.new( "Some text" ) + # d = c.clone + # d.to_s # -> "Some text" + def clone + CData.new self + end + + # Returns the content of this CData object + # + # _Examples_ + # c = CData.new( "Some text" ) + # c.to_s # -> "Some text" + def to_s + @string + end + + def value + @string + end + + # == DEPRECATED + # See the rexml/formatters package + # + # Generates XML output of this object + # + # output:: + # Where to write the string. Defaults to $stdout + # indent:: + # The amount to indent this node by + # transitive:: + # Ignored + # ie_hack:: + # Ignored + # + # _Examples_ + # c = CData.new( " Some text " ) + # c.write( $stdout ) #-> + def write( output=$stdout, indent=-1, transitive=false, ie_hack=false ) + Kernel.warn( "#{self.class.name}#write is deprecated", uplevel: 1) + indent( output, indent ) + output << START + output << @string + output << STOP + end + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/child.rb b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/child.rb new file mode 100644 index 0000000..2718040 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/child.rb @@ -0,0 +1,96 @@ +# frozen_string_literal: false +require_relative "node" + +module REXML + ## + # A Child object is something contained by a parent, and this class + # contains methods to support that. Most user code will not use this + # class directly. + class Child + include Node + attr_reader :parent # The Parent of this object + + # Constructor. Any inheritors of this class should call super to make + # sure this method is called. + # parent:: + # if supplied, the parent of this child will be set to the + # supplied value, and self will be added to the parent + def initialize( parent = nil ) + @parent = nil + # Declare @parent, but don't define it. The next line sets the + # parent. + parent.add( self ) if parent + end + + # Replaces this object with another object. Basically, calls + # Parent.replace_child + # + # Returns:: self + def replace_with( child ) + @parent.replace_child( self, child ) + self + end + + # Removes this child from the parent. + # + # Returns:: self + def remove + unless @parent.nil? + @parent.delete self + end + self + end + + # Sets the parent of this child to the supplied argument. + # + # other:: + # Must be a Parent object. If this object is the same object as the + # existing parent of this child, no action is taken. Otherwise, this + # child is removed from the current parent (if one exists), and is added + # to the new parent. + # Returns:: The parent added + def parent=( other ) + return @parent if @parent == other + @parent.delete self if defined? @parent and @parent + @parent = other + end + + alias :next_sibling :next_sibling_node + alias :previous_sibling :previous_sibling_node + + # Sets the next sibling of this child. This can be used to insert a child + # after some other child. + # a = Element.new("a") + # b = a.add_element("b") + # c = Element.new("c") + # b.next_sibling = c + # # => + def next_sibling=( other ) + parent.insert_after self, other + end + + # Sets the previous sibling of this child. This can be used to insert a + # child before some other child. + # a = Element.new("a") + # b = a.add_element("b") + # c = Element.new("c") + # b.previous_sibling = c + # # => + def previous_sibling=(other) + parent.insert_before self, other + end + + # Returns:: the document this child belongs to, or nil if this child + # belongs to no document + def document + parent&.document + end + + # This doesn't yet handle encodings + def bytes + document&.encoding + + to_s + end + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/comment.rb b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/comment.rb new file mode 100644 index 0000000..e7e104d --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/comment.rb @@ -0,0 +1,80 @@ +# frozen_string_literal: false +require_relative "child" + +module REXML + ## + # Represents an XML comment; that is, text between \ + class Comment < Child + include Comparable + START = "" + + # The content text + + attr_accessor :string + + ## + # Constructor. The first argument can be one of three types: + # @param first If String, the contents of this comment are set to the + # argument. If Comment, the argument is duplicated. If + # Source, the argument is scanned for a comment. + # @param second If the first argument is a Source, this argument + # should be nil, not supplied, or a Parent to be set as the parent + # of this object + def initialize( first, second = nil ) + super(second) + if first.kind_of? String + @string = first + elsif first.kind_of? Comment + @string = first.string + end + end + + def clone + Comment.new self + end + + # == DEPRECATED + # See REXML::Formatters + # + # output:: + # Where to write the string + # indent:: + # An integer. If -1, no indenting will be used; otherwise, the + # indentation will be this number of spaces, and children will be + # indented an additional amount. + # transitive:: + # Ignored by this class. The contents of comments are never modified. + # ie_hack:: + # Needed for conformity to the child API, but not used by this class. + def write( output, indent=-1, transitive=false, ie_hack=false ) + Kernel.warn("#{self.class.name}#write is deprecated. See REXML::Formatters", uplevel: 1) + indent( output, indent ) + output << START + output << @string + output << STOP + end + + alias :to_s :string + + ## + # Compares this Comment to another; the contents of the comment are used + # in the comparison. + def <=>(other) + other.to_s <=> @string + end + + ## + # Compares this Comment to another; the contents of the comment are used + # in the comparison. + def ==( other ) + other.kind_of? Comment and + (other <=> self) == 0 + end + + def node_type + :comment + end + end +end +#vim:ts=2 sw=2 noexpandtab: diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/doctype.rb b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/doctype.rb new file mode 100644 index 0000000..a9cf9f7 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/doctype.rb @@ -0,0 +1,306 @@ +# frozen_string_literal: false +require_relative "parent" +require_relative "parseexception" +require_relative "namespace" +require_relative 'entity' +require_relative 'attlistdecl' +require_relative 'xmltokens' + +module REXML + class ReferenceWriter + def initialize(id_type, + public_id_literal, + system_literal, + context=nil) + @id_type = id_type + @public_id_literal = public_id_literal + @system_literal = system_literal + if context and context[:prologue_quote] == :apostrophe + @default_quote = "'" + else + @default_quote = "\"" + end + end + + def write(output) + output << " #{@id_type}" + if @public_id_literal + if @public_id_literal.include?("'") + quote = "\"" + else + quote = @default_quote + end + output << " #{quote}#{@public_id_literal}#{quote}" + end + if @system_literal + if @system_literal.include?("'") + quote = "\"" + elsif @system_literal.include?("\"") + quote = "'" + else + quote = @default_quote + end + output << " #{quote}#{@system_literal}#{quote}" + end + end + end + + # Represents an XML DOCTYPE declaration; that is, the contents of . DOCTYPES can be used to declare the DTD of a document, as well as + # being used to declare entities used in the document. + class DocType < Parent + include XMLTokens + START = "" + SYSTEM = "SYSTEM" + PUBLIC = "PUBLIC" + DEFAULT_ENTITIES = { + 'gt'=>EntityConst::GT, + 'lt'=>EntityConst::LT, + 'quot'=>EntityConst::QUOT, + "apos"=>EntityConst::APOS + } + + # name is the name of the doctype + # external_id is the referenced DTD, if given + attr_reader :name, :external_id, :entities, :namespaces + + # Constructor + # + # dt = DocType.new( 'foo', '-//I/Hate/External/IDs' ) + # # + # dt = DocType.new( doctype_to_clone ) + # # Incomplete. Shallow clone of doctype + # + # +Note+ that the constructor: + # + # Doctype.new( Source.new( "" ) ) + # + # is _deprecated_. Do not use it. It will probably disappear. + def initialize( first, parent=nil ) + @entities = DEFAULT_ENTITIES + @long_name = @uri = nil + if first.kind_of? String + super() + @name = first + @external_id = parent + elsif first.kind_of? DocType + super( parent ) + @name = first.name + @external_id = first.external_id + @long_name = first.instance_variable_get(:@long_name) + @uri = first.instance_variable_get(:@uri) + elsif first.kind_of? Array + super( parent ) + @name = first[0] + @external_id = first[1] + @long_name = first[2] + @uri = first[3] + elsif first.kind_of? Source + super( parent ) + parser = Parsers::BaseParser.new( first ) + event = parser.pull + if event[0] == :start_doctype + @name, @external_id, @long_name, @uri, = event[1..-1] + end + else + super() + end + end + + def node_type + :doctype + end + + def attributes_of element + rv = [] + each do |child| + child.each do |key,val| + rv << Attribute.new(key,val) + end if child.kind_of? AttlistDecl and child.element_name == element + end + rv + end + + def attribute_of element, attribute + att_decl = find do |child| + child.kind_of? AttlistDecl and + child.element_name == element and + child.include? attribute + end + return nil unless att_decl + att_decl[attribute] + end + + def clone + DocType.new self + end + + # output:: + # Where to write the string + # indent:: + # An integer. If -1, no indentation will be used; otherwise, the + # indentation will be this number of spaces, and children will be + # indented an additional amount. + # transitive:: + # Ignored + # ie_hack:: + # Ignored + def write( output, indent=0, transitive=false, ie_hack=false ) + f = REXML::Formatters::Default.new + indent( output, indent ) + output << START + output << ' ' + output << @name + if @external_id + reference_writer = ReferenceWriter.new(@external_id, + @long_name, + @uri, + context) + reference_writer.write(output) + end + unless @children.empty? + output << ' [' + @children.each { |child| + output << "\n" + f.write( child, output ) + } + output << "\n]" + end + output << STOP + end + + def context + @parent&.context + end + + def entity( name ) + @entities[name]&.unnormalized + end + + def add child + super(child) + @entities = DEFAULT_ENTITIES.clone if @entities == DEFAULT_ENTITIES + @entities[ child.name ] = child if child.kind_of? Entity + end + + # This method retrieves the public identifier identifying the document's + # DTD. + # + # Method contributed by Henrik Martensson + def public + case @external_id + when "SYSTEM" + nil + when "PUBLIC" + @long_name + end + end + + # This method retrieves the system identifier identifying the document's DTD + # + # Method contributed by Henrik Martensson + def system + case @external_id + when "SYSTEM" + @long_name + when "PUBLIC" + @uri.kind_of?(String) ? @uri : nil + end + end + + # This method returns a list of notations that have been declared in the + # _internal_ DTD subset. Notations in the external DTD subset are not + # listed. + # + # Method contributed by Henrik Martensson + def notations + children().select {|node| node.kind_of?(REXML::NotationDecl)} + end + + # Retrieves a named notation. Only notations declared in the internal + # DTD subset can be retrieved. + # + # Method contributed by Henrik Martensson + def notation(name) + notations.find { |notation_decl| + notation_decl.name == name + } + end + end + + # We don't really handle any of these since we're not a validating + # parser, so we can be pretty dumb about them. All we need to be able + # to do is spew them back out on a write() + + # This is an abstract class. You never use this directly; it serves as a + # parent class for the specific declarations. + class Declaration < Child + def initialize src + super() + @string = src + end + + def to_s + @string+'>' + end + + # == DEPRECATED + # See REXML::Formatters + # + def write( output, indent ) + output << to_s + end + end + + public + class ElementDecl < Declaration + def initialize( src ) + super + end + end + + class ExternalEntity < Child + def initialize( src ) + super() + @entity = src + end + def to_s + @entity + end + def write( output, indent ) + output << @entity + end + end + + class NotationDecl < Child + attr_accessor :public, :system + def initialize name, middle, pub, sys + super(nil) + @name = name + @middle = middle + @public = pub + @system = sys + end + + def to_s + context = parent&.context + notation = "" + notation + end + + def write( output, indent=-1 ) + output << to_s + end + + # This method retrieves the name of the notation. + # + # Method contributed by Henrik Martensson + def name + @name + end + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/document.rb b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/document.rb new file mode 100644 index 0000000..bd3a004 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/document.rb @@ -0,0 +1,471 @@ +# frozen_string_literal: false +require_relative "security" +require_relative "element" +require_relative "xmldecl" +require_relative "source" +require_relative "comment" +require_relative "doctype" +require_relative "instruction" +require_relative "rexml" +require_relative "parseexception" +require_relative "output" +require_relative "parsers/baseparser" +require_relative "parsers/streamparser" +require_relative "parsers/treeparser" + +module REXML + # Represents an XML document. + # + # A document may have: + # + # - A single child that may be accessed via method #root. + # - An XML declaration. + # - A document type. + # - Processing instructions. + # + # == In a Hurry? + # + # If you're somewhat familiar with XML + # and have a particular task in mind, + # you may want to see the + # {tasks pages}[../doc/rexml/tasks/tocs/master_toc_rdoc.html], + # and in particular, the + # {tasks page for documents}[../doc/rexml/tasks/tocs/document_toc_rdoc.html]. + # + class Document < Element + # A convenient default XML declaration. Use: + # + # mydoc << XMLDecl.default + # + DECLARATION = XMLDecl.default + + # :call-seq: + # new(string = nil, context = {}) -> new_document + # new(io_stream = nil, context = {}) -> new_document + # new(document = nil, context = {}) -> new_document + # + # Returns a new \REXML::Document object. + # + # When no arguments are given, + # returns an empty document: + # + # d = REXML::Document.new + # d.to_s # => "" + # + # When argument +string+ is given, it must be a string + # containing a valid XML document: + # + # xml_string = 'FooBar' + # d = REXML::Document.new(xml_string) + # d.to_s # => "FooBar" + # + # When argument +io_stream+ is given, it must be an \IO object + # that is opened for reading, and when read must return a valid XML document: + # + # File.write('t.xml', xml_string) + # d = File.open('t.xml', 'r') do |io| + # REXML::Document.new(io) + # end + # d.to_s # => "FooBar" + # + # When argument +document+ is given, it must be an existing + # document object, whose context and attributes (but not children) + # are cloned into the new document: + # + # d = REXML::Document.new(xml_string) + # d.children # => [ ... ] + # d.context = {raw: :all, compress_whitespace: :all} + # d.add_attributes({'bar' => 0, 'baz' => 1}) + # d1 = REXML::Document.new(d) + # d1.children # => [] + # d1.context # => {:raw=>:all, :compress_whitespace=>:all} + # d1.attributes # => {"bar"=>bar='0', "baz"=>baz='1'} + # + # When argument +context+ is given, it must be a hash + # containing context entries for the document; + # see {Element Context}[../doc/rexml/context_rdoc.html]: + # + # context = {raw: :all, compress_whitespace: :all} + # d = REXML::Document.new(xml_string, context) + # d.context # => {:raw=>:all, :compress_whitespace=>:all} + # + def initialize( source = nil, context = {} ) + @entity_expansion_count = 0 + @entity_expansion_limit = Security.entity_expansion_limit + @entity_expansion_text_limit = Security.entity_expansion_text_limit + super() + @context = context + # `source = ""` is an invalid usage because no root element XML is an invalid XML. + # But we accept `""` for backward compatibility. + return if source.nil? or source == "" + if source.kind_of? Document + @context = source.context + super source + else + build( source ) + end + end + + # :call-seq: + # node_type -> :document + # + # Returns the symbol +:document+. + # + def node_type + :document + end + + # :call-seq: + # clone -> new_document + # + # Returns the new document resulting from executing + # Document.new(self). See Document.new. + # + def clone + Document.new self + end + + # :call-seq: + # expanded_name -> empty_string + # + # Returns an empty string. + # + def expanded_name + '' + #d = doc_type + #d ? d.name : "UNDEFINED" + end + alias :name :expanded_name + + # :call-seq: + # add(xml_decl) -> self + # add(doc_type) -> self + # add(object) -> self + # + # Adds an object to the document; returns +self+. + # + # When argument +xml_decl+ is given, + # it must be an REXML::XMLDecl object, + # which becomes the XML declaration for the document, + # replacing the previous XML declaration if any: + # + # d = REXML::Document.new + # d.xml_decl.to_s # => "" + # d.add(REXML::XMLDecl.new('2.0')) + # d.xml_decl.to_s # => "" + # + # When argument +doc_type+ is given, + # it must be an REXML::DocType object, + # which becomes the document type for the document, + # replacing the previous document type, if any: + # + # d = REXML::Document.new + # d.doctype.to_s # => "" + # d.add(REXML::DocType.new('foo')) + # d.doctype.to_s # => "" + # + # When argument +object+ (not an REXML::XMLDecl or REXML::DocType object) + # is given it is added as the last child: + # + # d = REXML::Document.new + # d.add(REXML::Element.new('foo')) + # d.to_s # => "" + # + def add( child ) + if child.kind_of? XMLDecl + if @children[0].kind_of? XMLDecl + @children[0] = child + else + @children.unshift child + end + child.parent = self + elsif child.kind_of? DocType + # Find first Element or DocType node and insert the decl right + # before it. If there is no such node, just insert the child at the + # end. If there is a child and it is an DocType, then replace it. + insert_before_index = @children.find_index { |x| + x.kind_of?(Element) || x.kind_of?(DocType) + } + if insert_before_index # Not null = not end of list + if @children[ insert_before_index ].kind_of? DocType + @children[ insert_before_index ] = child + else + @children[ insert_before_index-1, 0 ] = child + end + else # Insert at end of list + @children << child + end + child.parent = self + else + rv = super + raise "attempted adding second root element to document" if @elements.size > 1 + rv + end + end + alias :<< :add + + # :call-seq: + # add_element(name_or_element = nil, attributes = nil) -> new_element + # + # Adds an element to the document by calling REXML::Element.add_element: + # + # REXML::Element.add_element(name_or_element, attributes) + def add_element(arg=nil, arg2=nil) + rv = super + raise "attempted adding second root element to document" if @elements.size > 1 + rv + end + + # :call-seq: + # root -> root_element or nil + # + # Returns the root element of the document, if it exists, otherwise +nil+: + # + # d = REXML::Document.new('') + # d.root # => + # d = REXML::Document.new('') + # d.root # => nil + # + def root + elements[1] + #self + #@children.find { |item| item.kind_of? Element } + end + + # :call-seq: + # doctype -> doc_type or nil + # + # Returns the DocType object for the document, if it exists, otherwise +nil+: + # + # d = REXML::Document.new('') + # d.doctype.class # => REXML::DocType + # d = REXML::Document.new('') + # d.doctype.class # => nil + # + def doctype + @children.find { |item| item.kind_of? DocType } + end + + # :call-seq: + # xml_decl -> xml_decl + # + # Returns the XMLDecl object for the document, if it exists, + # otherwise the default XMLDecl object: + # + # d = REXML::Document.new('') + # d.xml_decl.class # => REXML::XMLDecl + # d.xml_decl.to_s # => "" + # d = REXML::Document.new('') + # d.xml_decl.class # => REXML::XMLDecl + # d.xml_decl.to_s # => "" + # + def xml_decl + rv = @children[0] + return rv if rv.kind_of? XMLDecl + @children.unshift(XMLDecl.default)[0] + end + + # :call-seq: + # version -> version_string + # + # Returns the XMLDecl version of this document as a string, + # if it has been set, otherwise the default version: + # + # d = REXML::Document.new('') + # d.version # => "2.0" + # d = REXML::Document.new('') + # d.version # => "1.0" + # + def version + xml_decl().version + end + + # :call-seq: + # encoding -> encoding_string + # + # Returns the XMLDecl encoding of the document, + # if it has been set, otherwise the default encoding: + # + # d = REXML::Document.new('') + # d.encoding # => "UTF-16" + # d = REXML::Document.new('') + # d.encoding # => "UTF-8" + # + def encoding + xml_decl().encoding + end + + # :call-seq: + # stand_alone? + # + # Returns the XMLDecl standalone value of the document as a string, + # if it has been set, otherwise the default standalone value: + # + # d = REXML::Document.new('') + # d.stand_alone? # => "yes" + # d = REXML::Document.new('') + # d.stand_alone? # => nil + # + def stand_alone? + xml_decl().stand_alone? + end + + # :call-seq: + # doc.write(output=$stdout, indent=-1, transitive=false, ie_hack=false, encoding=nil) + # doc.write(options={:output => $stdout, :indent => -1, :transitive => false, :ie_hack => false, :encoding => nil}) + # + # Write the XML tree out, optionally with indent. This writes out the + # entire XML document, including XML declarations, doctype declarations, + # and processing instructions (if any are given). + # + # A controversial point is whether Document should always write the XML + # declaration () whether or not one is given by the + # user (or source document). REXML does not write one if one was not + # specified, because it adds unnecessary bandwidth to applications such + # as XML-RPC. + # + # Accept Nth argument style and options Hash style as argument. + # The recommended style is options Hash style for one or more + # arguments case. + # + # _Examples_ + # Document.new("").write + # + # output = "" + # Document.new("").write(output) + # + # output = "" + # Document.new("").write(:output => output, :indent => 2) + # + # See also the classes in the rexml/formatters package for the proper way + # to change the default formatting of XML output. + # + # _Examples_ + # + # output = "" + # tr = Transitive.new + # tr.write(Document.new(""), output) + # + # output:: + # output an object which supports '<< string'; this is where the + # document will be written. + # indent:: + # An integer. If -1, no indenting will be used; otherwise, the + # indentation will be twice this number of spaces, and children will be + # indented an additional amount. For a value of 3, every item will be + # indented 3 more levels, or 6 more spaces (2 * 3). Defaults to -1 + # transitive:: + # If transitive is true and indent is >= 0, then the output will be + # pretty-printed in such a way that the added whitespace does not affect + # the absolute *value* of the document -- that is, it leaves the value + # and number of Text nodes in the document unchanged. + # ie_hack:: + # This hack inserts a space before the /> on empty tags to address + # a limitation of Internet Explorer. Defaults to false + # encoding:: + # Encoding name as String. Change output encoding to specified encoding + # instead of encoding in XML declaration. + # Defaults to nil. It means encoding in XML declaration is used. + def write(*arguments) + if arguments.size == 1 and arguments[0].class == Hash + options = arguments[0] + + output = options[:output] + indent = options[:indent] + transitive = options[:transitive] + ie_hack = options[:ie_hack] + encoding = options[:encoding] + else + output, indent, transitive, ie_hack, encoding, = *arguments + end + + output ||= $stdout + indent ||= -1 + transitive = false if transitive.nil? + ie_hack = false if ie_hack.nil? + encoding ||= xml_decl.encoding + + if encoding != 'UTF-8' && !output.kind_of?(Output) + output = Output.new( output, encoding ) + end + formatter = if indent > -1 + if transitive + require_relative "formatters/transitive" + REXML::Formatters::Transitive.new( indent, ie_hack ) + else + REXML::Formatters::Pretty.new( indent, ie_hack ) + end + else + REXML::Formatters::Default.new( ie_hack ) + end + formatter.write( self, output ) + end + + + def Document::parse_stream( source, listener ) + Parsers::StreamParser.new( source, listener ).parse + end + + # Set the entity expansion limit. By default the limit is set to 10000. + # + # Deprecated. Use REXML::Security.entity_expansion_limit= instead. + def Document::entity_expansion_limit=( val ) + Security.entity_expansion_limit = val + end + + # Get the entity expansion limit. By default the limit is set to 10000. + # + # Deprecated. Use REXML::Security.entity_expansion_limit= instead. + def Document::entity_expansion_limit + Security.entity_expansion_limit + end + + # Set the entity expansion limit. By default the limit is set to 10240. + # + # Deprecated. Use REXML::Security.entity_expansion_text_limit= instead. + def Document::entity_expansion_text_limit=( val ) + Security.entity_expansion_text_limit = val + end + + # Get the entity expansion limit. By default the limit is set to 10240. + # + # Deprecated. Use REXML::Security.entity_expansion_text_limit instead. + def Document::entity_expansion_text_limit + Security.entity_expansion_text_limit + end + + attr_reader :entity_expansion_count + attr_writer :entity_expansion_limit + attr_accessor :entity_expansion_text_limit + + def record_entity_expansion + @entity_expansion_count += 1 + if @entity_expansion_count > @entity_expansion_limit + raise "number of entity expansions exceeded, processing aborted." + end + end + + def document + self + end + + private + + attr_accessor :namespaces_cache + + # New document level cache is created and available in this block. + # This API is thread unsafe. Users can't change this document in this block. + def enable_cache + @namespaces_cache = {} + begin + yield + ensure + @namespaces_cache = nil + end + end + + def build( source ) + Parsers::TreeParser.new( source, self ).parse + end + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/dtd/attlistdecl.rb b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/dtd/attlistdecl.rb new file mode 100644 index 0000000..1326cb2 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/dtd/attlistdecl.rb @@ -0,0 +1,11 @@ +# frozen_string_literal: false +require_relative "../child" +module REXML + module DTD + class AttlistDecl < Child + START = ")/um + end + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/dtd/dtd.rb b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/dtd/dtd.rb new file mode 100644 index 0000000..8b0f2d7 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/dtd/dtd.rb @@ -0,0 +1,47 @@ +# frozen_string_literal: false +require_relative "elementdecl" +require_relative "entitydecl" +require_relative "../comment" +require_relative "notationdecl" +require_relative "attlistdecl" +require_relative "../parent" + +module REXML + module DTD + class Parser + def Parser.parse( input ) + case input + when String + parse_helper input + when File + parse_helper input.read + end + end + + # Takes a String and parses it out + def Parser.parse_helper( input ) + contents = Parent.new + while input.size > 0 + case input + when ElementDecl.PATTERN_RE + match = $& + contents << ElementDecl.new( match ) + when AttlistDecl.PATTERN_RE + matchdata = $~ + contents << AttlistDecl.new( matchdata ) + when EntityDecl.PATTERN_RE + matchdata = $~ + contents << EntityDecl.new( matchdata ) + when Comment.PATTERN_RE + matchdata = $~ + contents << Comment.new( matchdata ) + when NotationDecl.PATTERN_RE + matchdata = $~ + contents << NotationDecl.new( matchdata ) + end + end + contents + end + end + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/dtd/elementdecl.rb b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/dtd/elementdecl.rb new file mode 100644 index 0000000..20ed023 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/dtd/elementdecl.rb @@ -0,0 +1,18 @@ +# frozen_string_literal: false +require_relative "../child" +module REXML + module DTD + class ElementDecl < Child + START = "/um + PATTERN_RE = /^\s*#{START}\s+((?:[:\w][-\.\w]*:)?[-!\*\.\w]*)(.*?)>/ + #\s*((((["']).*?\5)|[^\/'">]*)*?)(\/)?>/um, true) + + def initialize match + @name = match[1] + @rest = match[2] + end + end + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/dtd/entitydecl.rb b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/dtd/entitydecl.rb new file mode 100644 index 0000000..312df65 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/dtd/entitydecl.rb @@ -0,0 +1,57 @@ +# frozen_string_literal: false +require_relative "../child" +module REXML + module DTD + class EntityDecl < Child + START = "/um + SYSTEM = /^\s*#{START}\s+(?:%\s+)?(\w+)\s+SYSTEM\s+((["']).*?\3)(?:\s+NDATA\s+\w+)?\s*>/um + PLAIN = /^\s*#{START}\s+(\w+)\s+((["']).*?\3)\s*>/um + PERCENT = /^\s*#{START}\s+%\s+(\w+)\s+((["']).*?\3)\s*>/um + # + # + def initialize src + super() + md = nil + if src.match( PUBLIC ) + md = src.match( PUBLIC, true ) + @middle = "PUBLIC" + @content = "#{md[2]} #{md[4]}" + elsif src.match( SYSTEM ) + md = src.match( SYSTEM, true ) + @middle = "SYSTEM" + @content = md[2] + elsif src.match( PLAIN ) + md = src.match( PLAIN, true ) + @middle = "" + @content = md[2] + elsif src.match( PERCENT ) + md = src.match( PERCENT, true ) + @middle = "" + @content = md[2] + end + raise ParseException.new("failed Entity match", src) if md.nil? + @name = md[1] + end + + def to_s + rv = " 0 + rv << @content + rv + end + + def write( output, indent ) + indent( output, indent ) + output << to_s + end + + def EntityDecl.parse_source source, listener + md = source.match( PATTERN_RE, true ) + thing = md[0].squeeze(" \t\n\r") + listener.send inspect.downcase, thing + end + end + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/dtd/notationdecl.rb b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/dtd/notationdecl.rb new file mode 100644 index 0000000..04a9b08 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/dtd/notationdecl.rb @@ -0,0 +1,40 @@ +# frozen_string_literal: false +require_relative "../child" +module REXML + module DTD + class NotationDecl < Child + START = "/um + SYSTEM = /^\s*#{START}\s+(\w[\w-]*)\s+(SYSTEM)\s+((["']).*?\4)\s*>/um + def initialize src + super() + if src.match( PUBLIC ) + md = src.match( PUBLIC, true ) + elsif src.match( SYSTEM ) + md = src.match( SYSTEM, true ) + else + raise ParseException.new( "error parsing notation: no matching pattern", src ) + end + @name = md[1] + @middle = md[2] + @rest = md[3] + end + + def to_s + "" + end + + def write( output, indent ) + indent( output, indent ) + output << to_s + end + + def NotationDecl.parse_source source, listener + md = source.match( PATTERN_RE, true ) + thing = md[0].squeeze(" \t\n\r") + listener.send inspect.downcase, thing + end + end + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/element.rb b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/element.rb new file mode 100644 index 0000000..0d74811 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/element.rb @@ -0,0 +1,2578 @@ +# frozen_string_literal: false +require_relative "parent" +require_relative "namespace" +require_relative "attribute" +require_relative "cdata" +require_relative "xpath" +require_relative "parseexception" + +module REXML + # An \REXML::Element object represents an XML element. + # + # An element: + # + # - Has a name (string). + # - May have a parent (another element). + # - Has zero or more children + # (other elements, text, CDATA, processing instructions, and comments). + # - Has zero or more siblings + # (other elements, text, CDATA, processing instructions, and comments). + # - Has zero or more named attributes. + # + # == In a Hurry? + # + # If you're somewhat familiar with XML + # and have a particular task in mind, + # you may want to see the + # {tasks pages}[../doc/rexml/tasks/tocs/master_toc_rdoc.html], + # and in particular, the + # {tasks page for elements}[../doc/rexml/tasks/tocs/element_toc_rdoc.html]. + # + # === Name + # + # An element has a name, which is initially set when the element is created: + # + # e = REXML::Element.new('foo') + # e.name # => "foo" + # + # The name may be changed: + # + # e.name = 'bar' + # e.name # => "bar" + # + # + # === \Parent + # + # An element may have a parent. + # + # Its parent may be assigned explicitly when the element is created: + # + # e0 = REXML::Element.new('foo') + # e1 = REXML::Element.new('bar', e0) + # e1.parent # => ... + # + # Note: the representation of an element always shows the element's name. + # If the element has children, the representation indicates that + # by including an ellipsis (...). + # + # The parent may be assigned explicitly at any time: + # + # e2 = REXML::Element.new('baz') + # e1.parent = e2 + # e1.parent # => + # + # When an element is added as a child, its parent is set automatically: + # + # e1.add_element(e0) + # e0.parent # => ... + # + # For an element that has no parent, method +parent+ returns +nil+. + # + # === Children + # + # An element has zero or more children. + # The children are an ordered collection + # of all objects whose parent is the element itself. + # + # The children may include any combination of elements, text, comments, + # processing instructions, and CDATA. + # (This example keeps things clean by controlling whitespace + # via a +context+ setting.) + # + # xml_string = <<-EOT + # + # + # text 0 + # + # + # + # + # text 1 + # + # + # + # + # EOT + # context = {ignore_whitespace_nodes: :all, compress_whitespace: :all} + # d = REXML::Document.new(xml_string, context) + # root = d.root + # root.children.size # => 10 + # root.each {|child| p "#{child.class}: #{child}" } + # + # Output: + # + # "REXML::Element: " + # "REXML::Text: \n text 0\n " + # "REXML::Comment: comment 0" + # "REXML::Instruction: " + # "REXML::CData: cdata 0" + # "REXML::Element: " + # "REXML::Text: \n text 1\n " + # "REXML::Comment: comment 1" + # "REXML::Instruction: " + # "REXML::CData: cdata 1" + # + # A child may be added using inherited methods + # Parent#insert_before or Parent#insert_after: + # + # xml_string = '' + # d = REXML::Document.new(xml_string) + # root = d.root + # c = d.root[1] # => + # root.insert_before(c, REXML::Element.new('b')) + # root.to_a # => [, , , ] + # + # A child may be replaced using Parent#replace_child: + # + # root.replace_child(c, REXML::Element.new('x')) + # root.to_a # => [, , , ] + # + # A child may be removed using Parent#delete: + # + # x = root[2] # => + # root.delete(x) + # root.to_a # => [, , ] + # + # === Siblings + # + # An element has zero or more siblings, + # which are the other children of the element's parent. + # + # In the example above, element +ele_1+ is between a CDATA sibling + # and a text sibling: + # + # ele_1 = root[5] # => + # ele_1.previous_sibling # => "cdata 0" + # ele_1.next_sibling # => "\n text 1\n " + # + # === \Attributes + # + # An element has zero or more named attributes. + # + # A new element has no attributes: + # + # e = REXML::Element.new('foo') + # e.attributes # => {} + # + # Attributes may be added: + # + # e.add_attribute('bar', 'baz') + # e.add_attribute('bat', 'bam') + # e.attributes.size # => 2 + # e['bar'] # => "baz" + # e['bat'] # => "bam" + # + # An existing attribute may be modified: + # + # e.add_attribute('bar', 'bad') + # e.attributes.size # => 2 + # e['bar'] # => "bad" + # + # An existing attribute may be deleted: + # + # e.delete_attribute('bar') + # e.attributes.size # => 1 + # e['bar'] # => nil + # + # == What's Here + # + # To begin with, what's elsewhere? + # + # \Class \REXML::Element inherits from its ancestor classes: + # + # - REXML::Child + # - REXML::Parent + # + # \REXML::Element itself and its ancestors also include modules: + # + # - {Enumerable}[https://docs.ruby-lang.org/en/master/Enumerable.html] + # - REXML::Namespace + # - REXML::Node + # - REXML::XMLTokens + # + # === Methods for Creating an \Element + # + # ::new:: Returns a new empty element. + # #clone:: Returns a clone of another element. + # + # === Methods for Attributes + # + # {[attribute_name]}[#method-i-5B-5D]:: Returns an attribute value. + # #add_attribute:: Adds a new attribute. + # #add_attributes:: Adds multiple new attributes. + # #attribute:: Returns the attribute value for a given name and optional namespace. + # #delete_attribute:: Removes an attribute. + # + # === Methods for Children + # + # {[index]}[#method-i-5B-5D]:: Returns the child at the given offset. + # #add_element:: Adds an element as the last child. + # #delete_element:: Deletes a child element. + # #each_element:: Calls the given block with each child element. + # #each_element_with_attribute:: Calls the given block with each child element + # that meets given criteria, + # which can include the attribute name. + # #each_element_with_text:: Calls the given block with each child element + # that meets given criteria, + # which can include text. + # #get_elements:: Returns an array of element children that match a given xpath. + # + # === Methods for \Text Children + # + # #add_text:: Adds a text node to the element. + # #get_text:: Returns a text node that meets specified criteria. + # #text:: Returns the text string from the first node that meets specified criteria. + # #texts:: Returns an array of the text children of the element. + # #text=:: Adds, removes, or replaces the first text child of the element + # + # === Methods for Other Children + # + # #cdatas:: Returns an array of the cdata children of the element. + # #comments:: Returns an array of the comment children of the element. + # #instructions:: Returns an array of the instruction children of the element. + # + # === Methods for Namespaces + # + # #add_namespace:: Adds a namespace to the element. + # #delete_namespace:: Removes a namespace from the element. + # #namespace:: Returns the string namespace URI for the element. + # #namespaces:: Returns a hash of all defined namespaces in the element. + # #prefixes:: Returns an array of the string prefixes (names) + # of all defined namespaces in the element + # + # === Methods for Querying + # + # #document:: Returns the document, if any, that the element belongs to. + # #root:: Returns the most distant element (not document) ancestor of the element. + # #root_node:: Returns the most distant ancestor of the element. + # #xpath:: Returns the string xpath to the element + # relative to the most distant parent + # #has_attributes?:: Returns whether the element has attributes. + # #has_elements?:: Returns whether the element has elements. + # #has_text?:: Returns whether the element has text. + # #next_element:: Returns the next sibling that is an element. + # #previous_element:: Returns the previous sibling that is an element. + # #raw:: Returns whether raw mode is set for the element. + # #whitespace:: Returns whether whitespace is respected for the element. + # #ignore_whitespace_nodes:: Returns whether whitespace nodes + # are to be ignored for the element. + # #node_type:: Returns symbol :element. + # + # === One More Method + # + # #inspect:: Returns a string representation of the element. + # + # === Accessors + # + # #elements:: Returns the REXML::Elements object for the element. + # #attributes:: Returns the REXML::Attributes object for the element. + # #context:: Returns or sets the context hash for the element. + # + class Element < Parent + include Namespace + + UNDEFINED = "UNDEFINED"; # The default name + + # Mechanisms for accessing attributes and child elements of this + # element. + attr_reader :attributes, :elements + # The context holds information about the processing environment, such as + # whitespace handling. + attr_accessor :context + + # :call-seq: + # Element.new(name = 'UNDEFINED', parent = nil, context = nil) -> new_element + # Element.new(element, parent = nil, context = nil) -> new_element + # + # Returns a new \REXML::Element object. + # + # When no arguments are given, + # returns an element with name 'UNDEFINED': + # + # e = REXML::Element.new # => + # e.class # => REXML::Element + # e.name # => "UNDEFINED" + # + # When only argument +name+ is given, + # returns an element of the given name: + # + # REXML::Element.new('foo') # => + # + # When only argument +element+ is given, it must be an \REXML::Element object; + # returns a shallow copy of the given element: + # + # e0 = REXML::Element.new('foo') + # e1 = REXML::Element.new(e0) # => + # + # When argument +parent+ is also given, it must be an REXML::Parent object: + # + # e = REXML::Element.new('foo', REXML::Parent.new) + # e.parent # => #]> + # + # When argument +context+ is also given, it must be a hash + # representing the context for the element; + # see {Element Context}[../doc/rexml/context_rdoc.html]: + # + # e = REXML::Element.new('foo', nil, {raw: :all}) + # e.context # => {:raw=>:all} + # + def initialize( arg = UNDEFINED, parent=nil, context=nil ) + super(parent) + + @elements = Elements.new(self) + @attributes = Attributes.new(self) + @context = context + + if arg.kind_of? String + self.name = arg + elsif arg.kind_of? Element + self.name = arg.expanded_name + arg.attributes.each_attribute{ |attribute| + @attributes << Attribute.new( attribute ) + } + @context = arg.context + end + end + + # :call-seq: + # inspect -> string + # + # Returns a string representation of the element. + # + # For an element with no attributes and no children, shows the element name: + # + # REXML::Element.new.inspect # => "" + # + # Shows attributes, if any: + # + # e = REXML::Element.new('foo') + # e.add_attributes({'bar' => 0, 'baz' => 1}) + # e.inspect # => "" + # + # Shows an ellipsis (...), if there are child elements: + # + # e.add_element(REXML::Element.new('bar')) + # e.add_element(REXML::Element.new('baz')) + # e.inspect # => " ... " + # + def inspect + rv = "<#@expanded_name" + + @attributes.each_attribute do |attr| + rv << " " + attr.write( rv, 0 ) + end + + if children.size > 0 + rv << "> ... " + else + rv << "/>" + end + end + + # :call-seq: + # clone -> new_element + # + # Returns a shallow copy of the element, containing the name and attributes, + # but not the parent or children: + # + # e = REXML::Element.new('foo') + # e.add_attributes({'bar' => 0, 'baz' => 1}) + # e.clone # => + # + def clone + self.class.new self + end + + # :call-seq: + # root_node -> document or element + # + # Returns the most distant ancestor of +self+. + # + # When the element is part of a document, + # returns the root node of the document. + # Note that the root node is different from the document element; + # in this example +a+ is document element and the root node is its parent: + # + # d = REXML::Document.new('') + # top_element = d.first # => ... + # child = top_element.first # => ... + # d.root_node == d # => true + # top_element.root_node == d # => true + # child.root_node == d # => true + # + # When the element is not part of a document, but does have ancestor elements, + # returns the most distant ancestor element: + # + # e0 = REXML::Element.new('foo') + # e1 = REXML::Element.new('bar') + # e1.parent = e0 + # e2 = REXML::Element.new('baz') + # e2.parent = e1 + # e2.root_node == e0 # => true + # + # When the element has no ancestor elements, + # returns +self+: + # + # e = REXML::Element.new('foo') + # e.root_node == e # => true + # + # Related: #root, #document. + # + def root_node + parent.nil? ? self : parent.root_node + end + + # :call-seq: + # root -> element + # + # Returns the most distant _element_ (not document) ancestor of the element: + # + # d = REXML::Document.new('') + # top_element = d.first + # child = top_element.first + # top_element.root == top_element # => true + # child.root == top_element # => true + # + # For a document, returns the topmost element: + # + # d.root == top_element # => true + # + # Related: #root_node, #document. + # + def root + target = self + while target + return target.elements[1] if target.kind_of? Document + parent = target.parent + return target if parent.kind_of? Document or parent.nil? + target = parent + end + nil + end + + # :call-seq: + # document -> document or nil + # + # If the element is part of a document, returns that document: + # + # d = REXML::Document.new('') + # top_element = d.first + # child = top_element.first + # top_element.document == d # => true + # child.document == d # => true + # + # If the element is not part of a document, returns +nil+: + # + # REXML::Element.new.document # => nil + # + # For a document, returns +self+: + # + # d.document == d # => true + # + # Related: #root, #root_node. + # + def document + root&.parent + end + + # :call-seq: + # whitespace + # + # Returns +true+ if whitespace is respected for this element, + # +false+ otherwise. + # + # See {Element Context}[../doc/rexml/context_rdoc.html]. + # + # The evaluation is tested against the element's +expanded_name+, + # and so is namespace-sensitive. + def whitespace + @whitespace = nil + if @context + if @context[:respect_whitespace] + @whitespace = (@context[:respect_whitespace] == :all or + @context[:respect_whitespace].include? expanded_name) + end + @whitespace = false if (@context[:compress_whitespace] and + (@context[:compress_whitespace] == :all or + @context[:compress_whitespace].include? expanded_name) + ) + end + @whitespace = true unless @whitespace == false + @whitespace + end + + # :call-seq: + # ignore_whitespace_nodes + # + # Returns +true+ if whitespace nodes are ignored for the element. + # + # See {Element Context}[../doc/rexml/context_rdoc.html]. + # + def ignore_whitespace_nodes + @ignore_whitespace_nodes = false + if @context + if @context[:ignore_whitespace_nodes] + @ignore_whitespace_nodes = + (@context[:ignore_whitespace_nodes] == :all or + @context[:ignore_whitespace_nodes].include? expanded_name) + end + end + end + + # :call-seq: + # raw + # + # Returns +true+ if raw mode is set for the element. + # + # See {Element Context}[../doc/rexml/context_rdoc.html]. + # + # The evaluation is tested against +expanded_name+, and so is namespace + # sensitive. + def raw + @raw = (@context and @context[:raw] and + (@context[:raw] == :all or + @context[:raw].include? expanded_name)) + @raw + end + + #once :whitespace, :raw, :ignore_whitespace_nodes + + ################################################# + # Namespaces # + ################################################# + + # :call-seq: + # prefixes -> array_of_namespace_prefixes + # + # Returns an array of the string prefixes (names) of all defined namespaces + # in the element and its ancestors: + # + # xml_string = <<-EOT + # + # + # + # + # + # + # EOT + # d = REXML::Document.new(xml_string, {compress_whitespace: :all}) + # d.elements['//a'].prefixes # => ["x", "y"] + # d.elements['//b'].prefixes # => ["x", "y"] + # d.elements['//c'].prefixes # => ["x", "y", "z"] + # + def prefixes + prefixes = [] + prefixes = parent.prefixes if parent + prefixes |= attributes.prefixes + prefixes + end + + # :call-seq: + # namespaces -> array_of_namespace_names + # + # Returns a hash of all defined namespaces + # in the element and its ancestors: + # + # xml_string = <<-EOT + # + # + # + # + # + # + # EOT + # d = REXML::Document.new(xml_string) + # d.elements['//a'].namespaces # => {"x"=>"1", "y"=>"2"} + # d.elements['//b'].namespaces # => {"x"=>"1", "y"=>"2"} + # d.elements['//c'].namespaces # => {"x"=>"1", "y"=>"2", "z"=>"3"} + # + def namespaces + namespaces_cache = document&.__send__(:namespaces_cache) + if namespaces_cache + namespaces_cache[self] ||= calculate_namespaces + else + calculate_namespaces + end + end + + # :call-seq: + # namespace(prefix = nil) -> string_uri or nil + # + # Returns the string namespace URI for the element, + # possibly deriving from one of its ancestors. + # + # xml_string = <<-EOT + # + # + # + # + # + # + # EOT + # d = REXML::Document.new(xml_string) + # b = d.elements['//b'] + # b.namespace # => "1" + # b.namespace('y') # => "2" + # b.namespace('nosuch') # => nil + # + def namespace(prefix=nil) + if prefix.nil? + prefix = prefix() + end + prefix = (prefix == '') ? 'xmlns' : prefix.delete_prefix("xmlns:") + ns = namespaces[prefix] + + ns = '' if ns.nil? and prefix == 'xmlns' + ns + end + + # :call-seq: + # add_namespace(prefix, uri = nil) -> self + # + # Adds a namespace to the element; returns +self+. + # + # With the single argument +prefix+, + # adds a namespace using the given +prefix+ and the namespace URI: + # + # e = REXML::Element.new('foo') + # e.add_namespace('bar') + # e.namespaces # => {"xmlns"=>"bar"} + # + # With both arguments +prefix+ and +uri+ given, + # adds a namespace using both arguments: + # + # e.add_namespace('baz', 'bat') + # e.namespaces # => {"xmlns"=>"bar", "baz"=>"bat"} + # + def add_namespace( prefix, uri=nil ) + unless uri + @attributes["xmlns"] = prefix + else + prefix = "xmlns:#{prefix}" unless prefix =~ /^xmlns:/ + @attributes[ prefix ] = uri + end + self + end + + # :call-seq: + # delete_namespace(namespace = 'xmlns') -> self + # + # Removes a namespace from the element. + # + # With no argument, removes the default namespace: + # + # d = REXML::Document.new "" + # d.to_s # => "" + # d.root.delete_namespace # => + # d.to_s # => "" + # + # With argument +namespace+, removes the specified namespace: + # + # d.root.delete_namespace('foo') + # d.to_s # => "" + # + # Does nothing if no such namespace is found: + # + # d.root.delete_namespace('nosuch') + # d.to_s # => "" + # + def delete_namespace namespace="xmlns" + namespace = "xmlns:#{namespace}" unless namespace == 'xmlns' + attribute = attributes.get_attribute(namespace) + attribute.remove unless attribute.nil? + self + end + + ################################################# + # Elements # + ################################################# + + # :call-seq: + # add_element(name, attributes = nil) -> new_element + # add_element(element, attributes = nil) -> element + # + # Adds a child element, optionally setting attributes + # on the added element; returns the added element. + # + # With string argument +name+, creates a new element with that name + # and adds the new element as a child: + # + # e0 = REXML::Element.new('foo') + # e0.add_element('bar') + # e0[0] # => + # + # + # With argument +name+ and hash argument +attributes+, + # sets attributes on the new element: + # + # e0.add_element('baz', {'bat' => '0', 'bam' => '1'}) + # e0[1] # => + # + # With element argument +element+, adds that element as a child: + # + # e0 = REXML::Element.new('foo') + # e1 = REXML::Element.new('bar') + # e0.add_element(e1) + # e0[0] # => + # + # With argument +element+ and hash argument +attributes+, + # sets attributes on the added element: + # + # e0.add_element(e1, {'bat' => '0', 'bam' => '1'}) + # e0[1] # => + # + def add_element element, attrs=nil + raise "First argument must be either an element name, or an Element object" if element.nil? + el = @elements.add(element) + attrs.each do |key, value| + el.attributes[key]=value + end if attrs.kind_of? Hash + el + end + + # :call-seq: + # delete_element(index) -> removed_element or nil + # delete_element(element) -> removed_element or nil + # delete_element(xpath) -> removed_element or nil + # + # Deletes a child element. + # + # When 1-based integer argument +index+ is given, + # removes and returns the child element at that offset if it exists; + # indexing does not include text nodes; + # returns +nil+ if the element does not exist: + # + # d = REXML::Document.new 'text' + # a = d.root # => ... + # a.delete_element(1) # => + # a.delete_element(1) # => + # a.delete_element(1) # => nil + # + # When element argument +element+ is given, + # removes and returns that child element if it exists, + # otherwise returns +nil+: + # + # d = REXML::Document.new 'text' + # a = d.root # => ... + # c = a[2] # => + # a.delete_element(c) # => + # a.delete_element(c) # => nil + # + # When xpath argument +xpath+ is given, + # removes and returns the element at xpath if it exists, + # otherwise returns +nil+: + # + # d = REXML::Document.new 'text' + # a = d.root # => ... + # a.delete_element('//c') # => + # a.delete_element('//c') # => nil + # + def delete_element element + @elements.delete element + end + + # :call-seq: + # has_elements? + # + # Returns +true+ if the element has one or more element children, + # +false+ otherwise: + # + # d = REXML::Document.new 'text' + # a = d.root # => ... + # a.has_elements? # => true + # b = a[0] # => + # b.has_elements? # => false + # + def has_elements? + !@elements.empty? + end + + # :call-seq: + # each_element_with_attribute(attr_name, value = nil, max = 0, xpath = nil) {|e| ... } + # + # Calls the given block with each child element that meets given criteria. + # + # When only string argument +attr_name+ is given, + # calls the block with each child element that has that attribute: + # + # d = REXML::Document.new '' + # a = d.root + # a.each_element_with_attribute('id') {|e| p e } + # + # Output: + # + # + # + # + # + # With argument +attr_name+ and string argument +value+ given, + # calls the block with each child element that has that attribute + # with that value: + # + # a.each_element_with_attribute('id', '1') {|e| p e } + # + # Output: + # + # + # + # + # With arguments +attr_name+, +value+, and integer argument +max+ given, + # calls the block with at most +max+ child elements: + # + # a.each_element_with_attribute('id', '1', 1) {|e| p e } + # + # Output: + # + # + # + # With all arguments given, including +xpath+, + # calls the block with only those child elements + # that meet the first three criteria, + # and also match the given +xpath+: + # + # a.each_element_with_attribute('id', '1', 2, '//d') {|e| p e } + # + # Output: + # + # + # + def each_element_with_attribute( key, value=nil, max=0, name=nil, &block ) # :yields: Element + each_with_something( proc {|child| + if value.nil? + child.attributes[key] != nil + else + child.attributes[key]==value + end + }, max, name, &block ) + end + + # :call-seq: + # each_element_with_text(text = nil, max = 0, xpath = nil) {|e| ... } + # + # Calls the given block with each child element that meets given criteria. + # + # With no arguments, calls the block with each child element that has text: + # + # d = REXML::Document.new 'bbd' + # a = d.root + # a.each_element_with_text {|e| p e } + # + # Output: + # + # ... + # ... + # ... + # + # With the single string argument +text+, + # calls the block with each element that has exactly that text: + # + # a.each_element_with_text('b') {|e| p e } + # + # Output: + # + # ... + # ... + # + # With argument +text+ and integer argument +max+, + # calls the block with at most +max+ elements: + # + # a.each_element_with_text('b', 1) {|e| p e } + # + # Output: + # + # ... + # + # With all arguments given, including +xpath+, + # calls the block with only those child elements + # that meet the first two criteria, + # and also match the given +xpath+: + # + # a.each_element_with_text('b', 2, '//c') {|e| p e } + # + # Output: + # + # ... + # + def each_element_with_text( text=nil, max=0, name=nil, &block ) # :yields: Element + each_with_something( proc {|child| + if text.nil? + child.has_text? + else + child.text == text + end + }, max, name, &block ) + end + + # :call-seq: + # each_element {|e| ... } + # + # Calls the given block with each child element: + # + # d = REXML::Document.new 'bbd' + # a = d.root + # a.each_element {|e| p e } + # + # Output: + # + # ... + # ... + # ... + # + # + def each_element( xpath=nil, &block ) # :yields: Element + @elements.each( xpath, &block ) + end + + # :call-seq: + # get_elements(xpath) + # + # Returns an array of the elements that match the given +xpath+: + # + # xml_string = <<-EOT + # + # + # + # + # + # EOT + # d = REXML::Document.new(xml_string) + # d.root.get_elements('//a') # => [ ... , ] + # + def get_elements( xpath ) + @elements.to_a( xpath ) + end + + # :call-seq: + # next_element + # + # Returns the next sibling that is an element if it exists, + # +niL+ otherwise: + # + # d = REXML::Document.new 'text' + # d.root.elements['b'].next_element #-> + # d.root.elements['c'].next_element #-> nil + # + def next_element + element = next_sibling + element = element.next_sibling until element.nil? or element.kind_of? Element + element + end + + # :call-seq: + # previous_element + # + # Returns the previous sibling that is an element if it exists, + # +niL+ otherwise: + # + # d = REXML::Document.new 'text' + # d.root.elements['c'].previous_element #-> + # d.root.elements['b'].previous_element #-> nil + # + def previous_element + element = previous_sibling + element = element.previous_sibling until element.nil? or element.kind_of? Element + element + end + + + ################################################# + # Text # + ################################################# + + # :call-seq: + # has_text? -> true or false + # + # Returns +true+ if the element has one or more text noded, + # +false+ otherwise: + # + # d = REXML::Document.new 'text' + # a = d.root + # a.has_text? # => true + # b = a[0] + # b.has_text? # => false + # + def has_text? + not text().nil? + end + + # :call-seq: + # text(xpath = nil) -> text_string or nil + # + # Returns the text string from the first text node child + # in a specified element, if it exists, +nil+ otherwise. + # + # With no argument, returns the text from the first text node in +self+: + # + # d = REXML::Document.new "

some text this is bold! more text

" + # d.root.text.class # => String + # d.root.text # => "some text " + # + # With argument +xpath+, returns text from the first text node + # in the element that matches +xpath+: + # + # d.root.text(1) # => "this is bold!" + # + # Note that an element may have multiple text nodes, + # possibly separated by other non-text children, as above. + # Even so, the returned value is the string text from the first such node. + # + # Note also that the text note is retrieved by method get_text, + # and so is always normalized text. + # + def text( path = nil ) + rv = get_text(path) + rv&.value + end + + # :call-seq: + # get_text(xpath = nil) -> text_node or nil + # + # Returns the first text node child in a specified element, if it exists, + # +nil+ otherwise. + # + # With no argument, returns the first text node from +self+: + # + # d = REXML::Document.new "

some text this is bold! more text

" + # d.root.get_text.class # => REXML::Text + # d.root.get_text # => "some text " + # + # With argument +xpath+, returns the first text node from the element + # that matches +xpath+: + # + # d.root.get_text(1) # => "this is bold!" + # + def get_text path = nil + rv = nil + if path + element = @elements[ path ] + rv = element.get_text unless element.nil? + else + rv = @children.find { |node| node.kind_of? Text } + end + rv + end + + # :call-seq: + # text = string -> string + # text = nil -> nil + # + # Adds, replaces, or removes the first text node child in the element. + # + # With string argument +string+, + # creates a new \REXML::Text node containing that string, + # honoring the current settings for whitespace and row, + # then places the node as the first text child in the element; + # returns +string+. + # + # If the element has no text child, the text node is added: + # + # d = REXML::Document.new '' + # d.root.text = 'foo' #-> 'foo' + # + # If the element has a text child, it is replaced: + # + # d.root.text = 'bar' #-> 'bar' + # + # With argument +nil+, removes the first text child: + # + # d.root.text = nil #-> '' + # + def text=( text ) + if text.kind_of? String + text = Text.new( text, whitespace(), nil, raw() ) + elsif !text.nil? and !text.kind_of? Text + text = Text.new( text.to_s, whitespace(), nil, raw() ) + end + old_text = get_text + if text.nil? + old_text.remove unless old_text.nil? + else + if old_text.nil? + self << text + else + old_text.replace_with( text ) + end + end + self + end + + # :call-seq: + # add_text(string) -> nil + # add_text(text_node) -> self + # + # Adds text to the element. + # + # When string argument +string+ is given, returns +nil+. + # + # If the element has no child text node, + # creates a \REXML::Text object using the string, + # honoring the current settings for whitespace and raw, + # then adds that node to the element: + # + # d = REXML::Document.new('') + # a = d.root + # a.add_text('foo') + # a.to_a # => [, "foo"] + # + # If the element has child text nodes, + # appends the string to the _last_ text node: + # + # d = REXML::Document.new('foobar') + # a = d.root + # a.add_text('baz') + # a.to_a # => ["foo", , "barbaz"] + # a.add_text('baz') + # a.to_a # => ["foo", , "barbazbaz"] + # + # When text node argument +text_node+ is given, + # appends the node as the last text node in the element; + # returns +self+: + # + # d = REXML::Document.new('foobar') + # a = d.root + # a.add_text(REXML::Text.new('baz')) + # a.to_a # => ["foo", , "bar", "baz"] + # a.add_text(REXML::Text.new('baz')) + # a.to_a # => ["foo", , "bar", "baz", "baz"] + # + def add_text( text ) + if text.kind_of? String + if @children[-1].kind_of? Text + @children[-1] << text + return + end + text = Text.new( text, whitespace(), nil, raw() ) + end + self << text unless text.nil? + self + end + + # :call-seq: + # node_type -> :element + # + # Returns symbol :element: + # + # d = REXML::Document.new('') + # a = d.root # => + # a.node_type # => :element + # + def node_type + :element + end + + # :call-seq: + # xpath -> string_xpath + # + # Returns the string xpath to the element + # relative to the most distant parent: + # + # d = REXML::Document.new('') + # a = d.root # => ... + # b = a[0] # => ... + # c = b[0] # => + # d.xpath # => "" + # a.xpath # => "/a" + # b.xpath # => "/a/b" + # c.xpath # => "/a/b/c" + # + # If there is no parent, returns the expanded name of the element: + # + # e = REXML::Element.new('foo') + # e.xpath # => "foo" + # + def xpath + path_elements = [] + cur = self + path_elements << __to_xpath_helper( self ) + while cur.parent + cur = cur.parent + path_elements << __to_xpath_helper( cur ) + end + path_elements.reverse.join( "/" ) + end + + ################################################# + # Attributes # + ################################################# + + # :call-seq: + # [index] -> object + # [attr_name] -> attr_value + # [attr_sym] -> attr_value + # + # With integer argument +index+ given, + # returns the child at offset +index+, or +nil+ if none: + # + # d = REXML::Document.new '>textmore' + # root = d.root + # (0..root.size).each do |index| + # node = root[index] + # p "#{index}: #{node} (#{node.class})" + # end + # + # Output: + # + # "0: (REXML::Element)" + # "1: text (REXML::Text)" + # "2: (REXML::Element)" + # "3: more (REXML::Text)" + # "4: (REXML::Element)" + # "5: (NilClass)" + # + # With string argument +attr_name+ given, + # returns the string value for the given attribute name if it exists, + # otherwise +nil+: + # + # d = REXML::Document.new('') + # root = d.root + # root['attr'] # => "value" + # root['nosuch'] # => nil + # + # With symbol argument +attr_sym+ given, + # returns [attr_sym.to_s]: + # + # root[:attr] # => "value" + # root[:nosuch] # => nil + # + def [](name_or_index) + case name_or_index + when String + attributes[name_or_index] + when Symbol + attributes[name_or_index.to_s] + else + super + end + end + + + # :call-seq: + # attribute(name, namespace = nil) + # + # Returns the string value for the given attribute name. + # + # With only argument +name+ given, + # returns the value of the named attribute if it exists, otherwise +nil+: + # + # xml_string = <<-EOT + # + # + # + # + # + # EOT + # d = REXML::Document.new(xml_string) + # root = d.root + # a = root[1] # => + # a.attribute('attr') # => attr='value' + # a.attribute('nope') # => nil + # + # With arguments +name+ and +namespace+ given, + # returns the value of the named attribute if it exists, otherwise +nil+: + # + # xml_string = "" + # document = REXML::Document.new(xml_string) + # document.root.attribute("x") # => x='x' + # document.root.attribute("x", "a") # => a:x='a:x' + # + def attribute( name, namespace=nil ) + prefix = namespaces.key(namespace) if namespace + prefix = nil if prefix == 'xmlns' + + ret_val = + attributes.get_attribute( prefix ? "#{prefix}:#{name}" : name ) + + return ret_val unless ret_val.nil? + return nil if prefix.nil? + + # now check that prefix'es namespace is not the same as the + # default namespace + return nil unless ( namespaces[ prefix ] == namespaces[ 'xmlns' ] ) + + attributes.get_attribute( name ) + end + + # :call-seq: + # has_attributes? -> true or false + # + # Returns +true+ if the element has attributes, +false+ otherwise: + # + # d = REXML::Document.new('') + # a, b = *d.root + # a.has_attributes? # => true + # b.has_attributes? # => false + # + def has_attributes? + !@attributes.empty? + end + + # :call-seq: + # add_attribute(name, value) -> value + # add_attribute(attribute) -> attribute + # + # Adds an attribute to this element, overwriting any existing attribute + # by the same name. + # + # With string argument +name+ and object +value+ are given, + # adds the attribute created with that name and value: + # + # e = REXML::Element.new + # e.add_attribute('attr', 'value') # => "value" + # e['attr'] # => "value" + # e.add_attribute('attr', 'VALUE') # => "VALUE" + # e['attr'] # => "VALUE" + # + # With only attribute object +attribute+ given, + # adds the given attribute: + # + # a = REXML::Attribute.new('attr', 'value') + # e.add_attribute(a) # => attr='value' + # e['attr'] # => "value" + # a = REXML::Attribute.new('attr', 'VALUE') + # e.add_attribute(a) # => attr='VALUE' + # e['attr'] # => "VALUE" + # + def add_attribute( key, value=nil ) + if key.kind_of? Attribute + @attributes << key + else + @attributes[key] = value + end + end + + # :call-seq: + # add_attributes(hash) -> hash + # add_attributes(array) + # + # Adds zero or more attributes to the element; + # returns the argument. + # + # If hash argument +hash+ is given, + # each key must be a string; + # adds each attribute created with the key/value pair: + # + # e = REXML::Element.new + # h = {'foo' => 'bar', 'baz' => 'bat'} + # e.add_attributes(h) + # + # If argument +array+ is given, + # each array member must be a 2-element array [name, value]; + # each name must be a string: + # + # e = REXML::Element.new + # a = [['foo' => 'bar'], ['baz' => 'bat']] + # e.add_attributes(a) + # + def add_attributes hash + if hash.kind_of? Hash + hash.each_pair {|key, value| @attributes[key] = value } + elsif hash.kind_of? Array + hash.each { |value| @attributes[ value[0] ] = value[1] } + end + end + + # :call-seq: + # delete_attribute(name) -> removed_attribute or nil + # + # Removes a named attribute if it exists; + # returns the removed attribute if found, otherwise +nil+: + # + # e = REXML::Element.new('foo') + # e.add_attribute('bar', 'baz') + # e.delete_attribute('bar') # => + # e.delete_attribute('bar') # => nil + # + def delete_attribute(key) + attr = @attributes.get_attribute(key) + attr.remove unless attr.nil? + end + + ################################################# + # Other Utilities # + ################################################# + + # :call-seq: + # cdatas -> array_of_cdata_children + # + # Returns a frozen array of the REXML::CData children of the element: + # + # xml_string = <<-EOT + # + # + # + # + # EOT + # d = REXML::Document.new(xml_string) + # cds = d.root.cdatas # => ["foo", "bar"] + # cds.frozen? # => true + # cds.map {|cd| cd.class } # => [REXML::CData, REXML::CData] + # + def cdatas + find_all { |child| child.kind_of? CData }.freeze + end + + # :call-seq: + # comments -> array_of_comment_children + # + # Returns a frozen array of the REXML::Comment children of the element: + # + # xml_string = <<-EOT + # + # + # + # + # EOT + # d = REXML::Document.new(xml_string) + # cs = d.root.comments + # cs.frozen? # => true + # cs.map {|c| c.class } # => [REXML::Comment, REXML::Comment] + # cs.map {|c| c.to_s } # => ["foo", "bar"] + # + def comments + find_all { |child| child.kind_of? Comment }.freeze + end + + # :call-seq: + # instructions -> array_of_instruction_children + # + # Returns a frozen array of the REXML::Instruction children of the element: + # + # xml_string = <<-EOT + # + # + # + # + # EOT + # d = REXML::Document.new(xml_string) + # is = d.root.instructions + # is.frozen? # => true + # is.map {|i| i.class } # => [REXML::Instruction, REXML::Instruction] + # is.map {|i| i.to_s } # => ["", ""] + # + def instructions + find_all { |child| child.kind_of? Instruction }.freeze + end + + # :call-seq: + # texts -> array_of_text_children + # + # Returns a frozen array of the REXML::Text children of the element: + # + # xml_string = 'textmore' + # d = REXML::Document.new(xml_string) + # ts = d.root.texts + # ts.frozen? # => true + # ts.map {|t| t.class } # => [REXML::Text, REXML::Text] + # ts.map {|t| t.to_s } # => ["text", "more"] + # + def texts + find_all { |child| child.kind_of? Text }.freeze + end + + # == DEPRECATED + # See REXML::Formatters + # + # Writes out this element, and recursively, all children. + # output:: + # output an object which supports '<< string'; this is where the + # document will be written. + # indent:: + # An integer. If -1, no indenting will be used; otherwise, the + # indentation will be this number of spaces, and children will be + # indented an additional amount. Defaults to -1 + # transitive:: + # If transitive is true and indent is >= 0, then the output will be + # pretty-printed in such a way that the added whitespace does not affect + # the parse tree of the document + # ie_hack:: + # This hack inserts a space before the /> on empty tags to address + # a limitation of Internet Explorer. Defaults to false + # + # out = '' + # doc.write( out ) #-> doc is written to the string 'out' + # doc.write( $stdout ) #-> doc written to the console + def write(output=$stdout, indent=-1, transitive=false, ie_hack=false) + Kernel.warn("#{self.class.name}#write is deprecated. See REXML::Formatters", uplevel: 1) + formatter = if indent > -1 + if transitive + require_relative "formatters/transitive" + REXML::Formatters::Transitive.new( indent, ie_hack ) + else + REXML::Formatters::Pretty.new( indent, ie_hack ) + end + else + REXML::Formatters::Default.new( ie_hack ) + end + formatter.write( self, output ) + end + + private + def calculate_namespaces + if parent + parent.namespaces.merge(attributes.namespaces) + else + attributes.namespaces + end + end + + def __to_xpath_helper node + rv = node.expanded_name.clone + if node.parent + results = node.parent.find_all {|n| + n.kind_of?(REXML::Element) and n.expanded_name == node.expanded_name + } + if results.length > 1 + idx = results.index( node ) + rv << "[#{idx+1}]" + end + end + rv + end + + # A private helper method + def each_with_something( test, max=0, name=nil ) + num = 0 + @elements.each( name ){ |child| + yield child if test.call(child) and num += 1 + return if max>0 and num == max + } + end + end + + ######################################################################## + # ELEMENTS # + ######################################################################## + + # A class which provides filtering of children for Elements, and + # XPath search support. You are expected to only encounter this class as + # the element.elements object. Therefore, you are + # _not_ expected to instantiate this yourself. + # + # xml_string = <<-EOT + # + # + # + # Everyday Italian + # Giada De Laurentiis + # 2005 + # 30.00 + # + # + # Harry Potter + # J K. Rowling + # 2005 + # 29.99 + # + # + # XQuery Kick Start + # James McGovern + # Per Bothner + # Kurt Cagle + # James Linn + # Vaidyanathan Nagarajan + # 2003 + # 49.99 + # + # + # Learning XML + # Erik T. Ray + # 2003 + # 39.95 + # + # + # EOT + # d = REXML::Document.new(xml_string) + # elements = d.root.elements + # elements # => # ... > + # + class Elements + include Enumerable + # :call-seq: + # new(parent) -> new_elements_object + # + # Returns a new \Elements object with the given +parent+. + # Does _not_ assign parent.elements = self: + # + # d = REXML::Document.new(xml_string) + # eles = REXML::Elements.new(d.root) + # eles # => # ... > + # eles == d.root.elements # => false + # + def initialize parent + @element = parent + end + + # :call-seq: + # parent + # + # Returns the parent element cited in creating the \Elements object. + # This element is also the default starting point for searching + # in the \Elements object. + # + # d = REXML::Document.new(xml_string) + # elements = REXML::Elements.new(d.root) + # elements.parent == d.root # => true + # + def parent + @element + end + + # :call-seq: + # elements[index] -> element or nil + # elements[xpath] -> element or nil + # elements[n, name] -> element or nil + # + # Returns the first \Element object selected by the arguments, + # if any found, or +nil+ if none found. + # + # Notes: + # - The +index+ is 1-based, not 0-based, so that: + # - The first element has index 1 + # - The _nth_ element has index +n+. + # - The selection ignores non-\Element nodes. + # + # When the single argument +index+ is given, + # returns the element given by the index, if any; otherwise, +nil+: + # + # d = REXML::Document.new(xml_string) + # eles = d.root.elements + # eles # => # ... > + # eles[1] # => ... + # eles.size # => 4 + # eles[4] # => ... + # eles[5] # => nil + # + # The node at this index is not an \Element, and so is not returned: + # + # eles = d.root.first.first # => ... </> + # eles.to_a # => ["Everyday Italian"] + # eles[1] # => nil + # + # When the single argument +xpath+ is given, + # returns the first element found via that +xpath+, if any; otherwise, +nil+: + # + # eles = d.root.elements # => #<REXML::Elements @element=<bookstore> ... </>> + # eles['/bookstore'] # => <bookstore> ... </> + # eles['//book'] # => <book category='cooking'> ... </> + # eles['//book [@category="children"]'] # => <book category='children'> ... </> + # eles['/nosuch'] # => nil + # eles['//nosuch'] # => nil + # eles['//book [@category="nosuch"]'] # => nil + # eles['.'] # => <bookstore> ... </> + # eles['..'].class # => REXML::Document + # + # With arguments +n+ and +name+ given, + # returns the _nth_ found element that has the given +name+, + # or +nil+ if there is no such _nth_ element: + # + # eles = d.root.elements # => #<REXML::Elements @element=<bookstore> ... </>> + # eles[1, 'book'] # => <book category='cooking'> ... </> + # eles[4, 'book'] # => <book category='web' cover='paperback'> ... </> + # eles[5, 'book'] # => nil + # + def []( index, name=nil) + if index.kind_of? Integer + raise "index (#{index}) must be >= 1" if index < 1 + name = literalize(name) if name + num = 0 + @element.find { |child| + child.kind_of? Element and + (name.nil? ? true : child.has_name?( name )) and + (num += 1) == index + } + else + XPath::first( @element, index ) + end + end + + # :call-seq: + # elements[] = index, replacement_element -> replacement_element or nil + # + # Replaces or adds an element. + # + # When <tt>eles[index]</tt> exists, replaces it with +replacement_element+ + # and returns +replacement_element+: + # + # d = REXML::Document.new(xml_string) + # eles = d.root.elements # => #<REXML::Elements @element=<bookstore> ... </>> + # eles[1] # => <book category='cooking'> ... </> + # eles[1] = REXML::Element.new('foo') + # eles[1] # => <foo/> + # + # Does nothing (or raises an exception) + # if +replacement_element+ is not an \Element: + # eles[2] # => <book category='web' cover='paperback'> ... </> + # eles[2] = REXML::Text.new('bar') + # eles[2] # => <book category='web' cover='paperback'> ... </> + # + # When <tt>eles[index]</tt> does not exist, + # adds +replacement_element+ to the element and returns + # + # d = REXML::Document.new(xml_string) + # eles = d.root.elements # => #<REXML::Elements @element=<bookstore> ... </>> + # eles.size # => 4 + # eles[50] = REXML::Element.new('foo') # => <foo/> + # eles.size # => 5 + # eles[5] # => <foo/> + # + # Does nothing (or raises an exception) + # if +replacement_element+ is not an \Element: + # + # eles[50] = REXML::Text.new('bar') # => "bar" + # eles.size # => 5 + # + def []=( index, element ) + previous = self[index] + if previous.nil? + @element.add element + else + previous.replace_with element + end + previous + end + + # :call-seq: + # empty? -> true or false + # + # Returns +true+ if there are no children, +false+ otherwise. + # + # d = REXML::Document.new('') + # d.elements.empty? # => true + # d = REXML::Document.new(xml_string) + # d.elements.empty? # => false + # + def empty? + @element.find{ |child| child.kind_of? Element}.nil? + end + + # :call-seq: + # index(element) + # + # Returns the 1-based index of the given +element+, if found; + # otherwise, returns -1: + # + # d = REXML::Document.new(xml_string) + # elements = d.root.elements + # ele_1, ele_2, ele_3, ele_4 = *elements + # elements.index(ele_4) # => 4 + # elements.delete(ele_3) + # elements.index(ele_4) # => 3 + # elements.index(ele_3) # => -1 + # + def index element + rv = 0 + found = @element.find do |child| + child.kind_of? Element and + (rv += 1) and + child == element + end + return rv if found == element + -1 + end + + # :call-seq: + # delete(index) -> removed_element or nil + # delete(element) -> removed_element or nil + # delete(xpath) -> removed_element or nil + # + # Removes an element; returns the removed element, or +nil+ if none removed. + # + # With integer argument +index+ given, + # removes the child element at that offset: + # + # d = REXML::Document.new(xml_string) + # elements = d.root.elements + # elements.size # => 4 + # elements[2] # => <book category='children'> ... </> + # elements.delete(2) # => <book category='children'> ... </> + # elements.size # => 3 + # elements[2] # => <book category='web'> ... </> + # elements.delete(50) # => nil + # + # With element argument +element+ given, + # removes that child element: + # + # d = REXML::Document.new(xml_string) + # elements = d.root.elements + # ele_1, ele_2, ele_3, ele_4 = *elements + # elements.size # => 4 + # elements[2] # => <book category='children'> ... </> + # elements.delete(ele_2) # => <book category='children'> ... </> + # elements.size # => 3 + # elements[2] # => <book category='web'> ... </> + # elements.delete(ele_2) # => nil + # + # With string argument +xpath+ given, + # removes the first element found via that xpath: + # + # d = REXML::Document.new(xml_string) + # elements = d.root.elements + # elements.delete('//book') # => <book category='cooking'> ... </> + # elements.delete('//book [@category="children"]') # => <book category='children'> ... </> + # elements.delete('//nosuch') # => nil + # + def delete element + if element.kind_of? Element + @element.delete element + else + el = self[element] + el.remove if el + end + end + + # :call-seq: + # delete_all(xpath) + # + # Removes all elements found via the given +xpath+; + # returns the array of removed elements, if any, else +nil+. + # + # d = REXML::Document.new(xml_string) + # elements = d.root.elements + # elements.size # => 4 + # deleted_elements = elements.delete_all('//book [@category="web"]') + # deleted_elements.size # => 2 + # elements.size # => 2 + # deleted_elements = elements.delete_all('//book') + # deleted_elements.size # => 2 + # elements.size # => 0 + # elements.delete_all('//book') # => [] + # + def delete_all( xpath ) + rv = [] + XPath::each( @element, xpath) {|element| + rv << element if element.kind_of? Element + } + rv.each do |element| + @element.delete element + element.remove + end + rv + end + + # :call-seq: + # add -> new_element + # add(name) -> new_element + # add(element) -> element + # + # Adds an element; returns the element added. + # + # With no argument, creates and adds a new element. + # The new element has: + # + # - No name. + # - \Parent from the \Elements object. + # - Context from the that parent. + # + # Example: + # + # d = REXML::Document.new(xml_string) + # elements = d.root.elements + # parent = elements.parent # => <bookstore> ... </> + # parent.context = {raw: :all} + # elements.size # => 4 + # new_element = elements.add # => </> + # elements.size # => 5 + # new_element.name # => nil + # new_element.parent # => <bookstore> ... </> + # new_element.context # => {:raw=>:all} + # + # With string argument +name+, creates and adds a new element. + # The new element has: + # + # - Name +name+. + # - \Parent from the \Elements object. + # - Context from the that parent. + # + # Example: + # + # d = REXML::Document.new(xml_string) + # elements = d.root.elements + # parent = elements.parent # => <bookstore> ... </> + # parent.context = {raw: :all} + # elements.size # => 4 + # new_element = elements.add('foo') # => <foo/> + # elements.size # => 5 + # new_element.name # => "foo" + # new_element.parent # => <bookstore> ... </> + # new_element.context # => {:raw=>:all} + # + # With argument +element+, + # creates and adds a clone of the given +element+. + # The new element has name, parent, and context from the given +element+. + # + # d = REXML::Document.new(xml_string) + # elements = d.root.elements + # elements.size # => 4 + # e0 = REXML::Element.new('foo') + # e1 = REXML::Element.new('bar', e0, {raw: :all}) + # element = elements.add(e1) # => <bar/> + # elements.size # => 5 + # element.name # => "bar" + # element.parent # => <bookstore> ... </> + # element.context # => {:raw=>:all} + # + def add element=nil + if element.nil? + Element.new("", self, @element.context) + elsif not element.kind_of?(Element) + Element.new(element, self, @element.context) + else + @element << element + element.context = @element.context + element + end + end + + alias :<< :add + + # :call-seq: + # each(xpath = nil) {|element| ... } -> self + # + # Iterates over the elements. + # + # With no argument, calls the block with each element: + # + # d = REXML::Document.new(xml_string) + # elements = d.root.elements + # elements.each {|element| p element } + # + # Output: + # + # <book category='cooking'> ... </> + # <book category='children'> ... </> + # <book category='web'> ... </> + # <book category='web' cover='paperback'> ... </> + # + # With argument +xpath+, calls the block with each element + # that matches the given +xpath+: + # + # elements.each('//book [@category="web"]') {|element| p element } + # + # Output: + # + # <book category='web'> ... </> + # <book category='web' cover='paperback'> ... </> + # + def each( xpath=nil ) + XPath::each( @element, xpath ) {|e| yield e if e.kind_of? Element } + end + + # :call-seq: + # collect(xpath = nil) {|element| ... } -> array + # + # Iterates over the elements; returns the array of block return values. + # + # With no argument, iterates over all elements: + # + # d = REXML::Document.new(xml_string) + # elements = d.root.elements + # elements.collect {|element| element.size } # => [9, 9, 17, 9] + # + # With argument +xpath+, iterates over elements that match + # the given +xpath+: + # + # xpath = '//book [@category="web"]' + # elements.collect(xpath) {|element| element.size } # => [17, 9] + # + def collect( xpath=nil ) + collection = [] + XPath::each( @element, xpath ) {|e| + collection << yield(e) if e.kind_of?(Element) + } + collection + end + + # :call-seq: + # inject(xpath = nil, initial = nil) -> object + # + # Calls the block with elements; returns the last block return value. + # + # With no argument, iterates over the elements, calling the block + # <tt>elements.size - 1</tt> times. + # + # - The first call passes the first and second elements. + # - The second call passes the first block return value and the third element. + # - The third call passes the second block return value and the fourth element. + # - And so on. + # + # In this example, the block returns the passed element, + # which is then the object argument to the next call: + # + # d = REXML::Document.new(xml_string) + # elements = d.root.elements + # elements.inject do |object, element| + # p [elements.index(object), elements.index(element)] + # element + # end + # + # Output: + # + # [1, 2] + # [2, 3] + # [3, 4] + # + # With the single argument +xpath+, calls the block only with + # elements matching that xpath: + # + # elements.inject('//book [@category="web"]') do |object, element| + # p [elements.index(object), elements.index(element)] + # element + # end + # + # Output: + # + # [3, 4] + # + # With argument +xpath+ given as +nil+ + # and argument +initial+ also given, + # calls the block once for each element. + # + # - The first call passes the +initial+ and the first element. + # - The second call passes the first block return value and the second element. + # - The third call passes the second block return value and the third element. + # - And so on. + # + # In this example, the first object index is <tt>-1</tt> + # + # elements.inject(nil, 'Initial') do |object, element| + # p [elements.index(object), elements.index(element)] + # element + # end + # + # Output: + # + # [-1, 1] + # [1, 2] + # [2, 3] + # [3, 4] + # + # In this form the passed object can be used as an accumulator: + # + # elements.inject(nil, 0) do |total, element| + # total += element.size + # end # => 44 + # + # With both arguments +xpath+ and +initial+ are given, + # calls the block only with elements matching that xpath: + # + # elements.inject('//book [@category="web"]', 0) do |total, element| + # total += element.size + # end # => 26 + # + def inject( xpath=nil, initial=nil ) + first = true + XPath::each( @element, xpath ) {|e| + if (e.kind_of? Element) + if (first and initial == nil) + initial = e + first = false + else + initial = yield( initial, e ) if e.kind_of? Element + end + end + } + initial + end + + # :call-seq: + # size -> integer + # + # Returns the count of \Element children: + # + # d = REXML::Document.new '<a>sean<b/>elliott<b/>russell<b/></a>' + # d.root.elements.size # => 3 # Three elements. + # d.root.size # => 6 # Three elements plus three text nodes.. + # + def size + count = 0 + @element.each {|child| count+=1 if child.kind_of? Element } + count + end + + # :call-seq: + # to_a(xpath = nil) -> array_of_elements + # + # Returns an array of element children (not including non-element children). + # + # With no argument, returns an array of all element children: + # + # d = REXML::Document.new '<a>sean<b/>elliott<c/></a>' + # elements = d.root.elements + # elements.to_a # => [<b/>, <c/>] # Omits non-element children. + # children = d.root.children + # children # => ["sean", <b/>, "elliott", <c/>] # Includes non-element children. + # + # With argument +xpath+, returns an array of element children + # that match the xpath: + # + # elements.to_a('//c') # => [<c/>] + # + def to_a( xpath=nil ) + rv = XPath.match( @element, xpath ) + return rv.find_all{|e| e.kind_of? Element} if xpath + rv + end + + private + # Private helper class. Removes quotes from quoted strings + def literalize name + name = name[1..-2] if name[0] == ?' or name[0] == ?" #' + name + end + end + + ######################################################################## + # ATTRIBUTES # + ######################################################################## + + # A class that defines the set of Attributes of an Element and provides + # operations for accessing elements in that set. + class Attributes < Hash + + # :call-seq: + # new(element) + # + # Creates and returns a new \REXML::Attributes object. + # The element given by argument +element+ is stored, + # but its own attributes are not modified: + # + # ele = REXML::Element.new('foo') + # attrs = REXML::Attributes.new(ele) + # attrs.object_id == ele.attributes.object_id # => false + # + # Other instance methods in class \REXML::Attributes may refer to: + # + # - +element.document+. + # - +element.prefix+. + # - +element.expanded_name+. + # + def initialize element + @element = element + end + + # :call-seq: + # [name] -> attribute_value or nil + # + # Returns the value for the attribute given by +name+, + # if it exists; otherwise +nil+. + # The value returned is the unnormalized attribute value, + # with entities expanded: + # + # xml_string = <<-EOT + # <root xmlns:foo="http://foo" xmlns:bar="http://bar"> + # <ele foo:att='1' bar:att='2' att='<'/> + # </root> + # EOT + # d = REXML::Document.new(xml_string) + # ele = d.elements['//ele'] # => <a foo:att='1' bar:att='2' att='<'/> + # ele.attributes['att'] # => "<" + # ele.attributes['bar:att'] # => "2" + # ele.attributes['nosuch'] # => nil + # + # Related: get_attribute (returns an \Attribute object). + # + def [](name) + attr = get_attribute(name) + attr&.value + end + + # :call-seq: + # to_a -> array_of_attribute_objects + # + # Returns an array of \REXML::Attribute objects representing + # the attributes: + # + # xml_string = <<-EOT + # <root xmlns:foo="http://foo" xmlns:bar="http://bar"> + # <ele foo:att='1' bar:att='2' att='<'/> + # </root> + # EOT + # d = REXML::Document.new(xml_string) + # ele = d.root.elements['//ele'] # => <a foo:att='1' bar:att='2' att='<'/> + # attrs = ele.attributes.to_a # => [foo:att='1', bar:att='2', att='<'] + # attrs.first.class # => REXML::Attribute + # + def to_a + enum_for(:each_attribute).to_a + end + + # :call-seq: + # length + # + # Returns the count of attributes: + # + # xml_string = <<-EOT + # <root xmlns:foo="http://foo" xmlns:bar="http://bar"> + # <ele foo:att='1' bar:att='2' att='<'/> + # </root> + # EOT + # d = REXML::Document.new(xml_string) + # ele = d.root.elements['//ele'] # => <a foo:att='1' bar:att='2' att='<'/> + # ele.attributes.length # => 3 + # + def length + c = 0 + each_attribute { c+=1 } + c + end + alias :size :length + + # :call-seq: + # each_attribute {|attr| ... } + # + # Calls the given block with each \REXML::Attribute object: + # + # xml_string = <<-EOT + # <root xmlns:foo="http://foo" xmlns:bar="http://bar"> + # <ele foo:att='1' bar:att='2' att='<'/> + # </root> + # EOT + # d = REXML::Document.new(xml_string) + # ele = d.root.elements['//ele'] # => <a foo:att='1' bar:att='2' att='<'/> + # ele.attributes.each_attribute do |attr| + # p [attr.class, attr] + # end + # + # Output: + # + # [REXML::Attribute, foo:att='1'] + # [REXML::Attribute, bar:att='2'] + # [REXML::Attribute, att='<'] + # + def each_attribute # :yields: attribute + return to_enum(__method__) unless block_given? + each_value do |val| + if val.kind_of? Attribute + yield val + else + val.each_value { |atr| yield atr } + end + end + end + + # :call-seq: + # each {|expanded_name, value| ... } + # + # Calls the given block with each expanded-name/value pair: + # + # xml_string = <<-EOT + # <root xmlns:foo="http://foo" xmlns:bar="http://bar"> + # <ele foo:att='1' bar:att='2' att='<'/> + # </root> + # EOT + # d = REXML::Document.new(xml_string) + # ele = d.root.elements['//ele'] # => <a foo:att='1' bar:att='2' att='<'/> + # ele.attributes.each do |expanded_name, value| + # p [expanded_name, value] + # end + # + # Output: + # + # ["foo:att", "1"] + # ["bar:att", "2"] + # ["att", "<"] + # + def each + return to_enum(__method__) unless block_given? + each_attribute do |attr| + yield [attr.expanded_name, attr.value] + end + end + + # :call-seq: + # get_attribute(name) -> attribute_object or nil + # + # Returns the \REXML::Attribute object for the given +name+: + # + # xml_string = <<-EOT + # <root xmlns:foo="http://foo" xmlns:bar="http://bar"> + # <ele foo:att='1' bar:att='2' att='<'/> + # </root> + # EOT + # d = REXML::Document.new(xml_string) + # ele = d.root.elements['//ele'] # => <a foo:att='1' bar:att='2' att='<'/> + # attrs = ele.attributes + # attrs.get_attribute('foo:att') # => foo:att='1' + # attrs.get_attribute('foo:att').class # => REXML::Attribute + # attrs.get_attribute('bar:att') # => bar:att='2' + # attrs.get_attribute('att') # => att='<' + # attrs.get_attribute('nosuch') # => nil + # + def get_attribute( name ) + attr = fetch( name, nil ) + if attr.nil? + return nil if name.nil? + # Look for prefix + name =~ Namespace::NAMESPLIT + prefix, n = $1, $2 + if prefix + attr = fetch( n, nil ) + # check prefix + if attr == nil + elsif attr.kind_of? Attribute + return attr if prefix == attr.prefix + else + attr = attr[ prefix ] + return attr + end + end + doctype = @element.document&.doctype + if doctype + expn = @element.expanded_name + expn = doctype.name if expn.size == 0 + attr_val = doctype.attribute_of(expn, name) + return Attribute.new( name, attr_val ) if attr_val + end + return nil + end + if attr.kind_of? Hash + attr = attr[ @element.prefix ] + end + attr + end + + # :call-seq: + # [name] = value -> value + # + # When +value+ is non-+nil+, + # assigns that to the attribute for the given +name+, + # overwriting the previous value if it exists: + # + # xml_string = <<-EOT + # <root xmlns:foo="http://foo" xmlns:bar="http://bar"> + # <ele foo:att='1' bar:att='2' att='<'/> + # </root> + # EOT + # d = REXML::Document.new(xml_string) + # ele = d.root.elements['//ele'] # => <a foo:att='1' bar:att='2' att='<'/> + # attrs = ele.attributes + # attrs['foo:att'] = '2' # => "2" + # attrs['baz:att'] = '3' # => "3" + # + # When +value+ is +nil+, deletes the attribute if it exists: + # + # attrs['baz:att'] = nil + # attrs.include?('baz:att') # => false + # + def []=( name, value ) + if value.nil? # Delete the named attribute + attr = get_attribute(name) + delete attr + return + end + + unless value.kind_of? Attribute + doctype = @element.document&.doctype + if doctype + value = Text::normalize( value, doctype ) + else + value = Text::normalize( value, nil ) + end + value = Attribute.new(name, value) + end + value.element = @element + old_attr = fetch(value.name, nil) + if old_attr.nil? + store(value.name, value) + elsif old_attr.kind_of? Hash + old_attr[value.prefix] = value + elsif old_attr.prefix != value.prefix + store value.name, {old_attr.prefix => old_attr, + value.prefix => value} + else + store value.name, value + end + @element + end + + # :call-seq: + # prefixes -> array_of_prefix_strings + # + # Returns an array of prefix strings in the attributes. + # The array does not include the default + # namespace declaration, if one exists. + # + # xml_string = '<a xmlns="foo" xmlns:x="bar" xmlns:y="twee" z="glorp"/>' + # d = REXML::Document.new(xml_string) + # d.root.attributes.prefixes # => ["x", "y"] + # + def prefixes + ns = [] + each_attribute do |attribute| + ns << attribute.name if attribute.prefix == 'xmlns' + end + doctype = @element.document&.doctype + if doctype + expn = @element.expanded_name + expn = doctype.name if expn.size == 0 + doctype.attributes_of(expn).each { + |attribute| + ns << attribute.name if attribute.prefix == 'xmlns' + } + end + ns + end + + # :call-seq: + # namespaces + # + # Returns a hash of name/value pairs for the namespaces: + # + # xml_string = '<a xmlns="foo" xmlns:x="bar" xmlns:y="twee" z="glorp"/>' + # d = REXML::Document.new(xml_string) + # d.root.attributes.namespaces # => {"xmlns"=>"foo", "x"=>"bar", "y"=>"twee"} + # + def namespaces + namespaces = {} + each_attribute do |attribute| + namespaces[attribute.name] = attribute.value if attribute.prefix == 'xmlns' or attribute.name == 'xmlns' + end + doctype = @element.document&.doctype + if doctype + expn = @element.expanded_name + expn = doctype.name if expn.size == 0 + doctype.attributes_of(expn).each { + |attribute| + namespaces[attribute.name] = attribute.value if attribute.prefix == 'xmlns' or attribute.name == 'xmlns' + } + end + namespaces + end + + # :call-seq: + # delete(name) -> element + # delete(attribute) -> element + # + # Removes a specified attribute if it exists; + # returns the attributes' element. + # + # When string argument +name+ is given, + # removes the attribute of that name if it exists: + # + # xml_string = <<-EOT + # <root xmlns:foo="http://foo" xmlns:bar="http://bar"> + # <ele foo:att='1' bar:att='2' att='<'/> + # </root> + # EOT + # d = REXML::Document.new(xml_string) + # ele = d.root.elements['//ele'] # => <a foo:att='1' bar:att='2' att='<'/> + # attrs = ele.attributes + # attrs.delete('foo:att') # => <ele bar:att='2' att='<'/> + # attrs.delete('foo:att') # => <ele bar:att='2' att='<'/> + # + # When attribute argument +attribute+ is given, + # removes that attribute if it exists: + # + # attr = REXML::Attribute.new('bar:att', '2') + # attrs.delete(attr) # => <ele att='<'/> # => <ele att='<'/> + # attrs.delete(attr) # => <ele att='<'/> # => <ele/> + # + def delete( attribute ) + name = nil + prefix = nil + if attribute.kind_of? Attribute + name = attribute.name + prefix = attribute.prefix + else + attribute =~ Namespace::NAMESPLIT + prefix, name = $1, $2 + prefix = '' unless prefix + end + old = fetch(name, nil) + if old.kind_of? Hash # the supplied attribute is one of many + old.delete(prefix) + if old.size == 1 + repl = nil + old.each_value{|v| repl = v} + store name, repl + end + elsif old # the supplied attribute is a top-level one + super(name) + end + @element + end + + # :call-seq: + # add(attribute) -> attribute + # + # Adds attribute +attribute+, replacing the previous + # attribute of the same name if it exists; + # returns +attribute+: + # + # xml_string = <<-EOT + # <root xmlns:foo="http://foo" xmlns:bar="http://bar"> + # <ele foo:att='1' bar:att='2' att='<'/> + # </root> + # EOT + # d = REXML::Document.new(xml_string) + # ele = d.root.elements['//ele'] # => <a foo:att='1' bar:att='2' att='<'/> + # attrs = ele.attributes + # attrs # => {"att"=>{"foo"=>foo:att='1', "bar"=>bar:att='2', ""=>att='<'}} + # attrs.add(REXML::Attribute.new('foo:att', '2')) # => foo:att='2' + # attrs.add(REXML::Attribute.new('baz', '3')) # => baz='3' + # attrs.include?('baz') # => true + # + def add( attribute ) + self[attribute.name] = attribute + end + + alias :<< :add + + # :call-seq: + # delete_all(name) -> array_of_removed_attributes + # + # Removes all attributes matching the given +name+; + # returns an array of the removed attributes: + # + # xml_string = <<-EOT + # <root xmlns:foo="http://foo" xmlns:bar="http://bar"> + # <ele foo:att='1' bar:att='2' att='<'/> + # </root> + # EOT + # d = REXML::Document.new(xml_string) + # ele = d.root.elements['//ele'] # => <a foo:att='1' bar:att='2' att='<'/> + # attrs = ele.attributes + # attrs.delete_all('att') # => [att='<'] + # + def delete_all( name ) + rv = [] + each_attribute { |attribute| + rv << attribute if attribute.expanded_name == name + } + rv.each{ |attr| attr.remove } + rv + end + + # :call-seq: + # get_attribute_ns(namespace, name) + # + # Returns the \REXML::Attribute object among the attributes + # that matches the given +namespace+ and +name+: + # + # xml_string = <<-EOT + # <root xmlns:foo="http://foo" xmlns:bar="http://bar"> + # <ele foo:att='1' bar:att='2' att='<'/> + # </root> + # EOT + # d = REXML::Document.new(xml_string) + # ele = d.root.elements['//ele'] # => <a foo:att='1' bar:att='2' att='<'/> + # attrs = ele.attributes + # attrs.get_attribute_ns('http://foo', 'att') # => foo:att='1' + # attrs.get_attribute_ns('http://foo', 'nosuch') # => nil + # + def get_attribute_ns(namespace, name) + result = nil + each_attribute() { |attribute| + if name == attribute.name && + namespace == attribute.namespace() && + ( !namespace.empty? || !attribute.fully_expanded_name.index(':') ) + # foo will match xmlns:foo, but only if foo isn't also an attribute + result = attribute if !result or !namespace.empty? or + !attribute.fully_expanded_name.index(':') + end + } + result + end + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/encoding.rb b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/encoding.rb new file mode 100644 index 0000000..7eb05f4 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/encoding.rb @@ -0,0 +1,48 @@ +# coding: US-ASCII +# frozen_string_literal: false +module REXML + module Encoding + # ID ---> Encoding name + attr_reader :encoding + def encoding=(encoding) + encoding = encoding.name if encoding.is_a?(::Encoding) + if encoding.is_a?(String) + original_encoding = encoding + encoding = find_encoding(encoding) + unless encoding + raise ArgumentError, "Bad encoding name #{original_encoding}" + end + end + encoding = encoding.upcase if encoding + return false if defined?(@encoding) and encoding == @encoding + @encoding = encoding || "UTF-8" + true + end + + def encode(string) + string.encode(@encoding) + end + + def decode(string) + string.encode(::Encoding::UTF_8, @encoding) + end + + private + def find_encoding(name) + case name + when /\Ashift-jis\z/i + return "SHIFT_JIS" + when /\ACP-(\d+)\z/ + name = "CP#{$1}" + when /\AUTF-8\z/i + return name + end + begin + ::Encoding::Converter.search_convpath(name, 'UTF-8') + rescue ::Encoding::ConverterNotFoundError + return nil + end + name + end + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/entity.rb b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/entity.rb new file mode 100644 index 0000000..1ba5a7b --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/entity.rb @@ -0,0 +1,142 @@ +# frozen_string_literal: false +require_relative 'child' +require_relative 'source' +require_relative 'xmltokens' + +module REXML + class Entity < Child + include XMLTokens + PUBIDCHAR = "\x20\x0D\x0Aa-zA-Z0-9\\-()+,./:=?;!*@$_%#" + SYSTEMLITERAL = %Q{((?:"[^"]*")|(?:'[^']*'))} + PUBIDLITERAL = %Q{("[#{PUBIDCHAR}']*"|'[#{PUBIDCHAR}]*')} + EXTERNALID = "(?:(?:(SYSTEM)\\s+#{SYSTEMLITERAL})|(?:(PUBLIC)\\s+#{PUBIDLITERAL}\\s+#{SYSTEMLITERAL}))" + NDATADECL = "\\s+NDATA\\s+#{NAME}" + PEREFERENCE = "%#{NAME};" + PEREFERENCE_RE = /#{PEREFERENCE}/um + ENTITYVALUE = %Q{((?:"(?:[^%&"]|#{PEREFERENCE}|#{REFERENCE})*")|(?:'([^%&']|#{PEREFERENCE}|#{REFERENCE})*'))} + PEDEF = "(?:#{ENTITYVALUE}|#{EXTERNALID})" + ENTITYDEF = "(?:#{ENTITYVALUE}|(?:#{EXTERNALID}(#{NDATADECL})?))" + PEDECL = "<!ENTITY\\s+(%)\\s+#{NAME}\\s+#{PEDEF}\\s*>" + GEDECL = "<!ENTITY\\s+#{NAME}\\s+#{ENTITYDEF}\\s*>" + ENTITYDECL = /\s*(?:#{GEDECL})|(?:#{PEDECL})/um + + attr_reader :name, :external, :ref, :ndata, :pubid, :value + + # Create a new entity. Simple entities can be constructed by passing a + # name, value to the constructor; this creates a generic, plain entity + # reference. For anything more complicated, you have to pass a Source to + # the constructor with the entity definition, or use the accessor methods. + # +WARNING+: There is no validation of entity state except when the entity + # is read from a stream. If you start poking around with the accessors, + # you can easily create a non-conformant Entity. + # + # e = Entity.new( 'amp', '&' ) + def initialize stream, value=nil, parent=nil, reference=false + super(parent) + @ndata = @pubid = @value = @external = nil + if stream.kind_of? Array + @name = stream[1] + if stream[-1] == '%' + @reference = true + stream.pop + else + @reference = false + end + if stream[2] =~ /SYSTEM|PUBLIC/ + @external = stream[2] + if @external == 'SYSTEM' + @ref = stream[3] + @ndata = stream[4] if stream.size == 5 + else + @pubid = stream[3] + @ref = stream[4] + end + else + @value = stream[2] + end + else + @reference = reference + @external = nil + @name = stream + @value = value + end + end + + # Evaluates whether the given string matches an entity definition, + # returning true if so, and false otherwise. + def Entity::matches? string + (ENTITYDECL =~ string) == 0 + end + + # Evaluates to the unnormalized value of this entity; that is, replacing + # &ent; entities. + def unnormalized + document&.record_entity_expansion + + return nil if @value.nil? + + @unnormalized = Text::unnormalize(@value, parent, + entity_expansion_text_limit: document&.entity_expansion_text_limit) + end + + #once :unnormalized + + # Returns the value of this entity unprocessed -- raw. This is the + # normalized value; that is, with all %ent; and &ent; entities intact + def normalized + @value + end + + # Write out a fully formed, correct entity definition (assuming the Entity + # object itself is valid.) + # + # out:: + # An object implementing <TT><<</TT> to which the entity will be + # output + # indent:: + # *DEPRECATED* and ignored + def write out, indent=-1 + out << '<!ENTITY ' + out << '% ' if @reference + out << @name + out << ' ' + if @external + out << @external << ' ' + if @pubid + q = @pubid.include?('"')?"'":'"' + out << q << @pubid << q << ' ' + end + q = @ref.include?('"')?"'":'"' + out << q << @ref << q + out << ' NDATA ' << @ndata if @ndata + else + q = @value.include?('"')?"'":'"' + out << q << @value << q + end + out << '>' + end + + # Returns this entity as a string. See write(). + def to_s + rv = '' + write rv + rv + end + end + + # This is a set of entity constants -- the ones defined in the XML + # specification. These are +gt+, +lt+, +amp+, +quot+ and +apos+. + # CAUTION: these entities does not have parent and document + module EntityConst + # +>+ + GT = Entity.new( 'gt', '>' ) + # +<+ + LT = Entity.new( 'lt', '<' ) + # +&+ + AMP = Entity.new( 'amp', '&' ) + # +"+ + QUOT = Entity.new( 'quot', '"' ) + # +'+ + APOS = Entity.new( 'apos', "'" ) + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/formatters/default.rb b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/formatters/default.rb new file mode 100644 index 0000000..811b2ff --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/formatters/default.rb @@ -0,0 +1,116 @@ +# frozen_string_literal: false + +module REXML + module Formatters + class Default + # Prints out the XML document with no formatting -- except if ie_hack is + # set. + # + # ie_hack:: + # If set to true, then inserts whitespace before the close of an empty + # tag, so that IE's bad XML parser doesn't choke. + def initialize( ie_hack=false ) + @ie_hack = ie_hack + end + + # Writes the node to some output. + # + # node:: + # The node to write + # output:: + # A class implementing <TT><<</TT>. Pass in an Output object to + # change the output encoding. + def write( node, output ) + case node + + when Document + if node.xml_decl.encoding != 'UTF-8' && !output.kind_of?(Output) + output = Output.new( output, node.xml_decl.encoding ) + end + write_document( node, output ) + + when Element + write_element( node, output ) + + when Declaration, ElementDecl, NotationDecl, ExternalEntity, Entity, + Attribute, AttlistDecl + node.write( output,-1 ) + + when Instruction + write_instruction( node, output ) + + when DocType, XMLDecl + node.write( output ) + + when Comment + write_comment( node, output ) + + when CData + write_cdata( node, output ) + + when Text + write_text( node, output ) + + else + raise Exception.new("XML FORMATTING ERROR") + + end + end + + protected + def write_document( node, output ) + node.children.each { |child| write( child, output ) } + end + + def write_element( node, output ) + output << "<#{node.expanded_name}" + + node.attributes.to_a.map { |a| + Hash === a ? a.values : a + }.flatten.sort_by {|attr| attr.name}.each do |attr| + output << " " + attr.write( output ) + end unless node.attributes.empty? + + if node.children.empty? + output << " " if @ie_hack + output << "/" + else + output << ">" + node.children.each { |child| + write( child, output ) + } + output << "</#{node.expanded_name}" + end + output << ">" + end + + def write_text( node, output ) + output << node.to_s() + end + + def write_comment( node, output ) + output << Comment::START + output << node.to_s + output << Comment::STOP + end + + def write_cdata( node, output ) + output << CData::START + output << node.to_s + output << CData::STOP + end + + def write_instruction( node, output ) + output << Instruction::START + output << node.target + content = node.content + if content + output << ' ' + output << content + end + output << Instruction::STOP + end + end + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/formatters/pretty.rb b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/formatters/pretty.rb new file mode 100644 index 0000000..a838d83 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/formatters/pretty.rb @@ -0,0 +1,142 @@ +# frozen_string_literal: true +require_relative 'default' + +module REXML + module Formatters + # Pretty-prints an XML document. This destroys whitespace in text nodes + # and will insert carriage returns and indentations. + # + # TODO: Add an option to print attributes on new lines + class Pretty < Default + + # If compact is set to true, then the formatter will attempt to use as + # little space as possible + attr_accessor :compact + # The width of a page. Used for formatting text + attr_accessor :width + + # Create a new pretty printer. + # + # output:: + # An object implementing '<<(String)', to which the output will be written. + # indentation:: + # An integer greater than 0. The indentation of each level will be + # this number of spaces. If this is < 1, the behavior of this object + # is undefined. Defaults to 2. + # ie_hack:: + # If true, the printer will insert whitespace before closing empty + # tags, thereby allowing Internet Explorer's XML parser to + # function. Defaults to false. + def initialize( indentation=2, ie_hack=false ) + @indentation = indentation + @level = 0 + @ie_hack = ie_hack + @width = 80 + @compact = false + end + + protected + def write_element(node, output) + output << ' '*@level + output << "<#{node.expanded_name}" + + node.attributes.each_attribute do |attr| + output << " " + attr.write( output ) + end unless node.attributes.empty? + + if node.children.empty? + if @ie_hack + output << " " + end + output << "/" + else + output << ">" + # If compact and all children are text, and if the formatted output + # is less than the specified width, then try to print everything on + # one line + skip = false + if compact + if node.children.inject(true) {|s,c| s & c.kind_of?(Text)} + string = +"" + old_level = @level + @level = 0 + node.children.each { |child| write( child, string ) } + @level = old_level + if string.length < @width + output << string + skip = true + end + end + end + unless skip + output << "\n" + @level += @indentation + node.children.each { |child| + next if child.kind_of?(Text) and child.to_s.strip.length == 0 + write( child, output ) + output << "\n" + } + @level -= @indentation + output << ' '*@level + end + output << "</#{node.expanded_name}" + end + output << ">" + end + + def write_text( node, output ) + s = node.to_s() + s.gsub!(/\s/,' ') + s.squeeze!(" ") + s = wrap(s, @width - @level) + s = indent_text(s, @level, " ", true) + output << (' '*@level + s) + end + + def write_comment( node, output) + output << ' ' * @level + super + end + + def write_cdata( node, output) + output << ' ' * @level + super + end + + def write_document( node, output ) + # Ok, this is a bit odd. All XML documents have an XML declaration, + # but it may not write itself if the user didn't specifically add it, + # either through the API or in the input document. If it doesn't write + # itself, then we don't need a carriage return... which makes this + # logic more complex. + node.children.each { |child| + next if child.instance_of?(Text) + unless child == node.children[0] or child.instance_of?(Text) or + (child == node.children[1] and !node.children[0].writethis) + output << "\n" + end + write( child, output ) + } + end + + private + def indent_text(string, level=1, style="\t", indentfirstline=true) + return string if level < 0 + string.gsub(/\n/, "\n#{style*level}") + end + + def wrap(string, width) + parts = [] + while string.length > width and place = string.rindex(' ', width) + parts << string[0...place] + string = string[place+1..-1] + end + parts << string + parts.join("\n") + end + + end + end +end + diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/formatters/transitive.rb b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/formatters/transitive.rb new file mode 100644 index 0000000..5ff51e1 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/formatters/transitive.rb @@ -0,0 +1,58 @@ +# frozen_string_literal: false +require_relative 'pretty' + +module REXML + module Formatters + # The Transitive formatter writes an XML document that parses to an + # identical document as the source document. This means that no extra + # whitespace nodes are inserted, and whitespace within text nodes is + # preserved. Within these constraints, the document is pretty-printed, + # with whitespace inserted into the metadata to introduce formatting. + # + # Note that this is only useful if the original XML is not already + # formatted. Since this formatter does not alter whitespace nodes, the + # results of formatting already formatted XML will be odd. + class Transitive < Default + def initialize( indentation=2, ie_hack=false ) + @indentation = indentation + @level = 0 + @ie_hack = ie_hack + end + + protected + def write_element( node, output ) + output << "<#{node.expanded_name}" + + node.attributes.each_attribute do |attr| + output << " " + attr.write( output ) + end unless node.attributes.empty? + + output << "\n" + output << ' '*@level + if node.children.empty? + output << " " if @ie_hack + output << "/" + else + output << ">" + # If compact and all children are text, and if the formatted output + # is less than the specified width, then try to print everything on + # one line + @level += @indentation + node.children.each { |child| + write( child, output ) + } + @level -= @indentation + output << "</#{node.expanded_name}" + output << "\n" + output << ' '*@level + end + output << ">" + end + + def write_text( node, output ) + output << node.to_s() + end + end + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/functions.rb b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/functions.rb new file mode 100644 index 0000000..60ae34e --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/functions.rb @@ -0,0 +1,446 @@ +# frozen_string_literal: false +module REXML + # If you add a method, keep in mind two things: + # (1) the first argument will always be a list of nodes from which to + # filter. In the case of context methods (such as position), the function + # should return an array with a value for each child in the array. + # (2) all method calls from XML will have "-" replaced with "_". + # Therefore, in XML, "local-name()" is identical (and actually becomes) + # "local_name()" + module Functions + @@available_functions = {} + @@context = nil + @@namespace_context = {} + @@variables = {} + + INTERNAL_METHODS = [ + :namespace_context, + :namespace_context=, + :variables, + :variables=, + :context=, + :get_namespace, + :send, + ] + class << self + def singleton_method_added(name) + unless INTERNAL_METHODS.include?(name) + @@available_functions[name] = true + end + end + end + + def Functions::namespace_context=(x) ; @@namespace_context=x ; end + def Functions::variables=(x) ; @@variables=x ; end + def Functions::namespace_context ; @@namespace_context ; end + def Functions::variables ; @@variables ; end + + def Functions::context=(value); @@context = value; end + + def Functions::text( ) + if @@context[:node].node_type == :element + @@context[:node].find_all{|n| n.node_type == :text}.collect{|n| n.value} + elsif @@context[:node].node_type == :text + @@context[:node].value + else + false + end + end + + # Returns the last node of the given list of nodes. + def Functions::last( ) + @@context[:size] + end + + def Functions::position( ) + @@context[:index] + end + + # Returns the size of the given list of nodes. + def Functions::count( node_set ) + node_set.size + end + + # Since REXML is non-validating, this method is not implemented as it + # requires a DTD + def Functions::id( object ) + end + + def Functions::local_name(node_set=nil) + get_namespace(node_set) do |node| + return node.local_name + end + "" + end + + def Functions::namespace_uri( node_set=nil ) + get_namespace( node_set ) {|node| node.namespace} + end + + def Functions::name( node_set=nil ) + get_namespace( node_set ) do |node| + node.expanded_name + end + end + + # Helper method. + def Functions::get_namespace( node_set = nil ) + if node_set == nil + yield @@context[:node] if @@context[:node].respond_to?(:namespace) + else + if node_set.respond_to? :each + result = [] + node_set.each do |node| + result << yield(node) if node.respond_to?(:namespace) + end + result + elsif node_set.respond_to? :namespace + yield node_set + end + end + end + + # A node-set is converted to a string by returning the string-value of the + # node in the node-set that is first in document order. If the node-set is + # empty, an empty string is returned. + # + # A number is converted to a string as follows + # + # NaN is converted to the string NaN + # + # positive zero is converted to the string 0 + # + # negative zero is converted to the string 0 + # + # positive infinity is converted to the string Infinity + # + # negative infinity is converted to the string -Infinity + # + # if the number is an integer, the number is represented in decimal form + # as a Number with no decimal point and no leading zeros, preceded by a + # minus sign (-) if the number is negative + # + # otherwise, the number is represented in decimal form as a Number + # including a decimal point with at least one digit before the decimal + # point and at least one digit after the decimal point, preceded by a + # minus sign (-) if the number is negative; there must be no leading zeros + # before the decimal point apart possibly from the one required digit + # immediately before the decimal point; beyond the one required digit + # after the decimal point there must be as many, but only as many, more + # digits as are needed to uniquely distinguish the number from all other + # IEEE 754 numeric values. + # + # The boolean false value is converted to the string false. The boolean + # true value is converted to the string true. + # + # An object of a type other than the four basic types is converted to a + # string in a way that is dependent on that type. + def Functions::string( object=@@context[:node] ) + if object.respond_to?(:node_type) + case object.node_type + when :attribute + object.value + when :element + string_value(object) + when :document + string_value(object.root) + when :processing_instruction + object.content + else + object.to_s + end + else + case object + when Array + string(object[0]) + when Float + if object.nan? + "NaN" + else + integer = object.to_i + if object == integer + "%d" % integer + else + object.to_s + end + end + else + object.to_s + end + end + end + + # A node-set is converted to a string by + # returning the concatenation of the string-value + # of each of the children of the node in the + # node-set that is first in document order. + # If the node-set is empty, an empty string is returned. + def Functions::string_value( o ) + rv = "" + o.children.each { |e| + if e.node_type == :text + rv << e.to_s + elsif e.node_type == :element + rv << string_value( e ) + end + } + rv + end + + def Functions::concat( *objects ) + concatenated = "" + objects.each do |object| + concatenated << string(object) + end + concatenated + end + + # Fixed by Mike Stok + def Functions::starts_with( string, test ) + string(string).index(string(test)) == 0 + end + + # Fixed by Mike Stok + def Functions::contains( string, test ) + string(string).include?(string(test)) + end + + # Kouhei fixed this + def Functions::substring_before( string, test ) + ruby_string = string(string) + ruby_index = ruby_string.index(string(test)) + if ruby_index.nil? + "" + else + ruby_string[ 0...ruby_index ] + end + end + + # Kouhei fixed this too + def Functions::substring_after( string, test ) + ruby_string = string(string) + return $1 if ruby_string =~ /#{test}(.*)/ + "" + end + + # Take equal portions of Mike Stok and Sean Russell; mix + # vigorously, and pour into a tall, chilled glass. Serves 10,000. + def Functions::substring( string, start, length=nil ) + ruby_string = string(string) + ruby_length = if length.nil? + ruby_string.length.to_f + else + number(length) + end + ruby_start = number(start) + + # Handle the special cases + return '' if ( + ruby_length.nan? or + ruby_start.nan? or + ruby_start.infinite? + ) + + infinite_length = ruby_length.infinite? == 1 + ruby_length = ruby_string.length if infinite_length + + # Now, get the bounds. The XPath bounds are 1..length; the ruby bounds + # are 0..length. Therefore, we have to offset the bounds by one. + ruby_start = round(ruby_start) - 1 + ruby_length = round(ruby_length) + + if ruby_start < 0 + ruby_length += ruby_start unless infinite_length + ruby_start = 0 + end + return '' if ruby_length <= 0 + ruby_string[ruby_start,ruby_length] + end + + # UNTESTED + def Functions::string_length( string ) + string(string).length + end + + def Functions::normalize_space( string=nil ) + string = string(@@context[:node]) if string.nil? + if string.kind_of? Array + string.collect{|x| x.to_s.strip.gsub(/\s+/um, ' ') if x} + else + string.to_s.strip.gsub(/\s+/um, ' ') + end + end + + # This is entirely Mike Stok's beast + def Functions::translate( string, tr1, tr2 ) + from = string(tr1) + to = string(tr2) + + # the map is our translation table. + # + # if a character occurs more than once in the + # from string then we ignore the second & + # subsequent mappings + # + # if a character maps to nil then we delete it + # in the output. This happens if the from + # string is longer than the to string + # + # there's nothing about - or ^ being special in + # http://www.w3.org/TR/xpath#function-translate + # so we don't build ranges or negated classes + + map = Hash.new + 0.upto(from.length - 1) { |pos| + from_char = from[pos] + unless map.has_key? from_char + map[from_char] = + if pos < to.length + to[pos] + else + nil + end + end + } + + if ''.respond_to? :chars + string(string).chars.collect { |c| + if map.has_key? c then map[c] else c end + }.compact.join + else + string(string).unpack('U*').collect { |c| + if map.has_key? c then map[c] else c end + }.compact.pack('U*') + end + end + + def Functions::boolean(object=@@context[:node]) + case object + when true, false + object + when Float + return false if object.zero? + return false if object.nan? + true + when Numeric + not object.zero? + when String + not object.empty? + when Array + not object.empty? + else + object ? true : false + end + end + + # UNTESTED + def Functions::not( object ) + not boolean( object ) + end + + # UNTESTED + def Functions::true( ) + true + end + + # UNTESTED + def Functions::false( ) + false + end + + # UNTESTED + def Functions::lang( language ) + lang = false + node = @@context[:node] + attr = nil + until node.nil? + if node.node_type == :element + attr = node.attributes["xml:lang"] + unless attr.nil? + lang = compare_language(string(language), attr) + break + else + end + end + node = node.parent + end + lang + end + + def Functions::compare_language lang1, lang2 + lang2.downcase.index(lang1.downcase) == 0 + end + + # a string that consists of optional whitespace followed by an optional + # minus sign followed by a Number followed by whitespace is converted to + # the IEEE 754 number that is nearest (according to the IEEE 754 + # round-to-nearest rule) to the mathematical value represented by the + # string; any other string is converted to NaN + # + # boolean true is converted to 1; boolean false is converted to 0 + # + # a node-set is first converted to a string as if by a call to the string + # function and then converted in the same way as a string argument + # + # an object of a type other than the four basic types is converted to a + # number in a way that is dependent on that type + def Functions::number(object=@@context[:node]) + case object + when true + Float(1) + when false + Float(0) + when Array + number(string(object)) + when Numeric + object.to_f + else + str = string(object) + case str.strip + when /\A\s*(-?(?:\d+(?:\.\d*)?|\.\d+))\s*\z/ + $1.to_f + else + Float::NAN + end + end + end + + def Functions::sum( nodes ) + nodes = [nodes] unless nodes.kind_of? Array + nodes.inject(0) { |r,n| r + number(string(n)) } + end + + def Functions::floor( number ) + number(number).floor + end + + def Functions::ceiling( number ) + number(number).ceil + end + + def Functions::round( number ) + number = number(number) + begin + neg = number.negative? + number = number.abs.round + neg ? -number : number + rescue FloatDomainError + number + end + end + + def Functions::processing_instruction( node ) + node.node_type == :processing_instruction + end + + def Functions::send(name, *args) + if @@available_functions[name.to_sym] + super + else + # TODO: Maybe, this is not XPath spec behavior. + # This behavior must be reconsidered. + XPath.match(@@context[:node], name.to_s) + end + end + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/instruction.rb b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/instruction.rb new file mode 100644 index 0000000..a3dfbbe --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/instruction.rb @@ -0,0 +1,79 @@ +# frozen_string_literal: false + +require_relative "child" +require_relative "source" + +module REXML + # Represents an XML Instruction; IE, <? ... ?> + # TODO: Add parent arg (3rd arg) to constructor + class Instruction < Child + START = "<?" + STOP = "?>" + + # target is the "name" of the Instruction; IE, the "tag" in <?tag ...?> + # content is everything else. + attr_accessor :target, :content + + # Constructs a new Instruction + # @param target can be one of a number of things. If String, then + # the target of this instruction is set to this. If an Instruction, + # then the Instruction is shallowly cloned (target and content are + # copied). + # @param content Must be either a String, or a Parent. Can only + # be a Parent if the target argument is a Source. Otherwise, this + # String is set as the content of this instruction. + def initialize(target, content=nil) + case target + when String + super() + @target = target + @content = content + when Instruction + super(content) + @target = target.target + @content = target.content + else + message = + "processing instruction target must be String or REXML::Instruction: " + message << "<#{target.inspect}>" + raise ArgumentError, message + end + @content.strip! if @content + end + + def clone + Instruction.new self + end + + # == DEPRECATED + # See the rexml/formatters package + # + def write writer, indent=-1, transitive=false, ie_hack=false + Kernel.warn( "#{self.class.name}#write is deprecated", uplevel: 1) + indent(writer, indent) + writer << START + writer << @target + if @content + writer << ' ' + writer << @content + end + writer << STOP + end + + # @return true if other is an Instruction, and the content and target + # of the other matches the target and content of this object. + def ==( other ) + other.kind_of? Instruction and + other.target == @target and + other.content == @content + end + + def node_type + :processing_instruction + end + + def inspect + "<?p-i #{target} ...?>" + end + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/light/node.rb b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/light/node.rb new file mode 100644 index 0000000..3dab885 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/light/node.rb @@ -0,0 +1,188 @@ +# frozen_string_literal: false +require_relative '../xmltokens' + +module REXML + module Light + # Represents a tagged XML element. Elements are characterized by + # having children, attributes, and names, and can themselves be + # children. + class Node + NAMESPLIT = /^(?:(#{XMLTokens::NCNAME_STR}):)?(#{XMLTokens::NCNAME_STR})/u + PARENTS = [ :element, :document, :doctype ] + # Create a new element. + def initialize node=nil + @node = node + if node.kind_of? String + node = [ :text, node ] + elsif node.nil? + node = [ :document, nil, nil ] + elsif node[0] == :start_element + node[0] = :element + elsif node[0] == :start_doctype + node[0] = :doctype + elsif node[0] == :start_document + node[0] = :document + end + end + + def size + if PARENTS.include? @node[0] + @node[-1].size + else + 0 + end + end + + def each + size.times { |x| yield( at(x+4) ) } + end + + def name + at(2) + end + + def name=( name_str, ns=nil ) + pfx = '' + pfx = "#{prefix(ns)}:" if ns + _old_put(2, "#{pfx}#{name_str}") + end + + def parent=( node ) + _old_put(1,node) + end + + def local_name + namesplit + @name + end + + def local_name=( name_str ) + _old_put( 1, "#@prefix:#{name_str}" ) + end + + def prefix( namespace=nil ) + prefix_of( self, namespace ) + end + + def namespace( prefix=prefix() ) + namespace_of( self, prefix ) + end + + def namespace=( namespace ) + @prefix = prefix( namespace ) + pfx = '' + pfx = "#@prefix:" if @prefix.size > 0 + _old_put(1, "#{pfx}#@name") + end + + def []( reference, ns=nil ) + if reference.kind_of? String + pfx = '' + pfx = "#{prefix(ns)}:" if ns + at(3)["#{pfx}#{reference}"] + elsif reference.kind_of? Range + _old_get( Range.new(4+reference.begin, reference.end, reference.exclude_end?) ) + else + _old_get( 4+reference ) + end + end + + def =~( path ) + XPath.match( self, path ) + end + + # Doesn't handle namespaces yet + def []=( reference, ns, value=nil ) + if reference.kind_of? String + value = ns unless value + at( 3 )[reference] = value + elsif reference.kind_of? Range + _old_put( Range.new(3+reference.begin, reference.end, reference.exclude_end?), ns ) + else + if value + _old_put( 4+reference, ns, value ) + else + _old_put( 4+reference, ns ) + end + end + end + + # Append a child to this element, optionally under a provided namespace. + # The namespace argument is ignored if the element argument is an Element + # object. Otherwise, the element argument is a string, the namespace (if + # provided) is the namespace the element is created in. + def << element + if node_type() == :text + at(-1) << element + else + newnode = Node.new( element ) + newnode.parent = self + self.push( newnode ) + end + at(-1) + end + + def node_type + _old_get(0) + end + + def text=( foo ) + replace = at(4).kind_of?(String)? 1 : 0 + self._old_put(4,replace, normalizefoo) + end + + def root + context = self + context = context.at(1) while context.at(1) + end + + def has_name?( name, namespace = '' ) + at(3) == name and namespace() == namespace + end + + def children + self + end + + def parent + at(1) + end + + def to_s + + end + + private + + def namesplit + return if @name.defined? + at(2) =~ NAMESPLIT + @prefix = '' || $1 + @name = $2 + end + + def namespace_of( node, prefix=nil ) + if not prefix + name = at(2) + name =~ NAMESPLIT + prefix = $1 + end + to_find = 'xmlns' + to_find = "xmlns:#{prefix}" if not prefix.nil? + ns = at(3)[ to_find ] + ns ? ns : namespace_of( @node[0], prefix ) + end + + def prefix_of( node, namespace=nil ) + if not namespace + name = node.name + name =~ NAMESPLIT + $1 + else + ns = at(3).find { |k,v| v == namespace } + ns ? ns : prefix_of( node.parent, namespace ) + end + end + end + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/namespace.rb b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/namespace.rb new file mode 100644 index 0000000..232b7ca --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/namespace.rb @@ -0,0 +1,63 @@ +# frozen_string_literal: true + +require_relative 'xmltokens' + +module REXML + # Adds named attributes to an object. + module Namespace + # The name of the object, valid if set + attr_reader :name, :expanded_name + # The expanded name of the object, valid if name is set + attr_accessor :prefix + include XMLTokens + NAME_WITHOUT_NAMESPACE = /\A#{NCNAME_STR}\z/ + NAMESPLIT = /^(?:(#{NCNAME_STR}):)?(#{NCNAME_STR})/u + + # Sets the name and the expanded name + def name=( name ) + @expanded_name = name + if name.match?(NAME_WITHOUT_NAMESPACE) + @prefix = "" + @namespace = "" + @name = name + elsif name =~ NAMESPLIT + if $1 + @prefix = $1 + else + @prefix = "" + @namespace = "" + end + @name = $2 + elsif name == "" + @prefix = nil + @namespace = nil + @name = nil + else + message = "name must be \#{PREFIX}:\#{LOCAL_NAME} or \#{LOCAL_NAME}: " + message += "<#{name.inspect}>" + raise ArgumentError, message + end + end + + # Compares names optionally WITH namespaces + def has_name?( other, ns=nil ) + if ns + namespace() == ns and name() == other + elsif other.include? ":" + fully_expanded_name == other + else + name == other + end + end + + alias :local_name :name + + # Fully expand the name, even if the prefix wasn't specified in the + # source file. + def fully_expanded_name + ns = prefix + return "#{ns}:#@name" if ns.size > 0 + @name + end + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/node.rb b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/node.rb new file mode 100644 index 0000000..bccacc5 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/node.rb @@ -0,0 +1,80 @@ +# frozen_string_literal: false +require_relative "parseexception" +require_relative "formatters/pretty" +require_relative "formatters/default" + +module REXML + # Represents a node in the tree. Nodes are never encountered except as + # superclasses of other objects. Nodes have siblings. + module Node + # @return the next sibling (nil if unset) + def next_sibling_node + return nil if @parent.nil? + @parent[ @parent.index(self) + 1 ] + end + + # @return the previous sibling (nil if unset) + def previous_sibling_node + return nil if @parent.nil? + ind = @parent.index(self) + return nil if ind == 0 + @parent[ ind - 1 ] + end + + # indent:: + # *DEPRECATED* This parameter is now ignored. See the formatters in the + # REXML::Formatters package for changing the output style. + def to_s indent=nil + unless indent.nil? + Kernel.warn( "#{self.class.name}#to_s(indent) parameter is deprecated", uplevel: 1) + f = REXML::Formatters::Pretty.new( indent ) + f.write( self, rv = "" ) + else + f = REXML::Formatters::Default.new + f.write( self, rv = "" ) + end + return rv + end + + def indent to, ind + if @parent and @parent.context and not @parent.context[:indentstyle].nil? then + indentstyle = @parent.context[:indentstyle] + else + indentstyle = ' ' + end + to << indentstyle*ind unless ind<1 + end + + def parent? + false; + end + + + # Visit all subnodes of +self+ recursively + def each_recursive(&block) # :yields: node + stack = [] + each { |child| stack.unshift child if child.node_type == :element } + until stack.empty? + child = stack.pop + yield child + n = stack.size + child.each { |grandchild| stack.insert n, grandchild if grandchild.node_type == :element } + end + end + + # Find (and return) first subnode (recursively) for which the block + # evaluates to true. Returns +nil+ if none was found. + def find_first_recursive(&block) # :yields: node + each_recursive {|node| + return node if block.call(node) + } + nil + end + + # Returns the position that +self+ holds in its parent's array, indexed + # from 1. + def index_in_parent + parent.index(self)+1 + end + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/output.rb b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/output.rb new file mode 100644 index 0000000..88a5fb3 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/output.rb @@ -0,0 +1,30 @@ +# frozen_string_literal: false +require_relative 'encoding' + +module REXML + class Output + include Encoding + + attr_reader :encoding + + def initialize real_IO, encd="iso-8859-1" + @output = real_IO + self.encoding = encd + + @to_utf = encoding != 'UTF-8' + + if encoding == "UTF-16" + @output << "\ufeff".encode("UTF-16BE") + self.encoding = "UTF-16BE" + end + end + + def <<( content ) + @output << (@to_utf ? self.encode(content) : content) + end + + def to_s + "Output[#{encoding}]" + end + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/parent.rb b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/parent.rb new file mode 100644 index 0000000..6a53b37 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/parent.rb @@ -0,0 +1,166 @@ +# frozen_string_literal: false +require_relative "child" + +module REXML + # A parent has children, and has methods for accessing them. The Parent + # class is never encountered except as the superclass for some other + # object. + class Parent < Child + include Enumerable + + # Constructor + # @param parent if supplied, will be set as the parent of this object + def initialize parent=nil + super(parent) + @children = [] + end + + def add( object ) + object.parent = self + @children << object + object + end + + alias :push :add + alias :<< :push + + def unshift( object ) + object.parent = self + @children.unshift object + end + + def delete( object ) + found = false + @children.delete_if {|c| c.equal?(object) and found = true } + object.parent = nil if found + found ? object : nil + end + + def each(&block) + @children.each(&block) + end + + def delete_if( &block ) + @children.delete_if(&block) + end + + def delete_at( index ) + @children.delete_at index + end + + def each_index( &block ) + @children.each_index(&block) + end + + # Fetches a child at a given index + # @param index the Integer index of the child to fetch + def []( index ) + @children[index] + end + + alias :each_child :each + + + + # Set an index entry. See Array.[]= + # @param index the index of the element to set + # @param opt either the object to set, or an Integer length + # @param child if opt is an Integer, this is the child to set + # @return the parent (self) + def []=( *args ) + args[-1].parent = self + @children[*args[0..-2]] = args[-1] + end + + # Inserts an child before another child + # @param child1 this is either an xpath or an Element. If an Element, + # child2 will be inserted before child1 in the child list of the parent. + # If an xpath, child2 will be inserted before the first child to match + # the xpath. + # @param child2 the child to insert + # @return the parent (self) + def insert_before( child1, child2 ) + if child1.kind_of? String + child1 = XPath.first( self, child1 ) + child1.parent.insert_before child1, child2 + else + ind = index(child1) + child2.parent.delete(child2) if child2.parent + @children[ind,0] = child2 + child2.parent = self + end + self + end + + # Inserts an child after another child + # @param child1 this is either an xpath or an Element. If an Element, + # child2 will be inserted after child1 in the child list of the parent. + # If an xpath, child2 will be inserted after the first child to match + # the xpath. + # @param child2 the child to insert + # @return the parent (self) + def insert_after( child1, child2 ) + if child1.kind_of? String + child1 = XPath.first( self, child1 ) + child1.parent.insert_after child1, child2 + else + ind = index(child1)+1 + child2.parent.delete(child2) if child2.parent + @children[ind,0] = child2 + child2.parent = self + end + self + end + + def to_a + @children.dup + end + + # Fetches the index of a given child + # @param child the child to get the index of + # @return the index of the child, or nil if the object is not a child + # of this parent. + def index( child ) + count = -1 + @children.find { |i| count += 1 ; i.hash == child.hash } + count + end + + # @return the number of children of this parent + def size + @children.size + end + + alias :length :size + + # Replaces one child with another, making sure the nodelist is correct + # @param to_replace the child to replace (must be a Child) + # @param replacement the child to insert into the nodelist (must be a + # Child) + def replace_child( to_replace, replacement ) + @children.map! {|c| c.equal?( to_replace ) ? replacement : c } + to_replace.parent = nil + replacement.parent = self + end + + # Deeply clones this object. This creates a complete duplicate of this + # Parent, including all descendants. + def deep_clone + cl = clone() + each do |child| + if child.kind_of? Parent + cl << child.deep_clone + else + cl << child.clone + end + end + cl + end + + alias :children :to_a + + def parent? + true + end + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/parseexception.rb b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/parseexception.rb new file mode 100644 index 0000000..e57d05f --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/parseexception.rb @@ -0,0 +1,53 @@ +# frozen_string_literal: false +module REXML + class ParseException < RuntimeError + attr_accessor :source, :parser, :continued_exception + + def initialize( message, source=nil, parser=nil, exception=nil ) + super(message) + @source = source + @parser = parser + @continued_exception = exception + end + + def to_s + # Quote the original exception, if there was one + if @continued_exception + err = @continued_exception.inspect + err << "\n" + err << @continued_exception.backtrace.join("\n") + err << "\n...\n" + else + err = "" + end + + # Get the stack trace and error message + err << super + + # Add contextual information + if @source + err << "\nLine: #{line}\n" + err << "Position: #{position}\n" + err << "Last 80 unconsumed characters:\n" + err.force_encoding("ASCII-8BIT") + err << @source.buffer[0..80].force_encoding("ASCII-8BIT").gsub(/\n/, ' ') + end + + err + end + + def position + @source.current_line[0] if @source and defined? @source.current_line and + @source.current_line + end + + def line + @source.current_line[2] if @source and defined? @source.current_line and + @source.current_line + end + + def context + @source.current_line + end + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/parsers/baseparser.rb b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/parsers/baseparser.rb new file mode 100644 index 0000000..8fe287a --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/parsers/baseparser.rb @@ -0,0 +1,949 @@ +# frozen_string_literal: true +require_relative '../parseexception' +require_relative '../undefinednamespaceexception' +require_relative '../security' +require_relative '../source' +require 'set' +require "strscan" + +module REXML + module Parsers + unless [].respond_to?(:tally) + module EnumerableTally + refine Enumerable do + def tally + counts = {} + each do |item| + counts[item] ||= 0 + counts[item] += 1 + end + counts + end + end + end + using EnumerableTally + end + + if StringScanner::Version < "3.0.8" + module StringScannerCaptures + refine StringScanner do + def captures + values_at(*(1...size)) + end + end + end + using StringScannerCaptures + end + + # = Using the Pull Parser + # <em>This API is experimental, and subject to change.</em> + # parser = PullParser.new( "<a>text<b att='val'/>txet</a>" ) + # while parser.has_next? + # res = parser.next + # puts res[1]['att'] if res.start_tag? and res[0] == 'b' + # end + # See the PullEvent class for information on the content of the results. + # The data is identical to the arguments passed for the various events to + # the StreamListener API. + # + # Notice that: + # parser = PullParser.new( "<a>BAD DOCUMENT" ) + # while parser.has_next? + # res = parser.next + # raise res[1] if res.error? + # end + # + # Nat Price gave me some good ideas for the API. + class BaseParser + LETTER = '[:alpha:]' + DIGIT = '[:digit:]' + + COMBININGCHAR = '' # TODO + EXTENDER = '' # TODO + + NCNAME_STR= "[#{LETTER}_][-[:alnum:]._#{COMBININGCHAR}#{EXTENDER}]*" + QNAME_STR= "(?:(#{NCNAME_STR}):)?(#{NCNAME_STR})" + QNAME = /(#{QNAME_STR})/ + + # Just for backward compatibility. For example, kramdown uses this. + # It's not used in REXML. + UNAME_STR= "(?:#{NCNAME_STR}:)?#{NCNAME_STR}" + + NAMECHAR = '[\-\w\.:]' + NAME = "([\\w:]#{NAMECHAR}*)" + NMTOKEN = "(?:#{NAMECHAR})+" + NMTOKENS = "#{NMTOKEN}(\\s+#{NMTOKEN})*" + REFERENCE = "&(?:#{NAME};|#\\d+;|#x[0-9a-fA-F]+;)" + REFERENCE_RE = /#{REFERENCE}/ + + DOCTYPE_START = /\A\s*<!DOCTYPE\s/um + DOCTYPE_END = /\A\s*\]\s*>/um + ATTRIBUTE_PATTERN = /\s*(#{QNAME_STR})\s*=\s*(["'])(.*?)\4/um + COMMENT_START = /\A<!--/u + COMMENT_PATTERN = /<!--(.*?)-->/um + CDATA_START = /\A<!\[CDATA\[/u + CDATA_END = /\A\s*\]\s*>/um + CDATA_PATTERN = /<!\[CDATA\[(.*?)\]\]>/um + XMLDECL_START = /\A<\?xml\s/u; + XMLDECL_PATTERN = /<\?xml\s+(.*?)\?>/um + INSTRUCTION_START = /\A<\?/u + INSTRUCTION_PATTERN = /<\?#{NAME}(\s+.*?)?\?>/um + TAG_MATCH = /\A<((?>#{QNAME_STR}))/um + CLOSE_MATCH = /\A\s*<\/(#{QNAME_STR})\s*>/um + + VERSION = /\bversion\s*=\s*["'](.*?)['"]/um + ENCODING = /\bencoding\s*=\s*["'](.*?)['"]/um + STANDALONE = /\bstandalone\s*=\s*["'](.*?)['"]/um + + ENTITY_START = /\A\s*<!ENTITY/ + ELEMENTDECL_START = /\A\s*<!ELEMENT/um + ELEMENTDECL_PATTERN = /\A\s*(<!ELEMENT.*?)>/um + SYSTEMENTITY = /\A\s*(%.*?;)\s*$/um + ENUMERATION = "\\(\\s*#{NMTOKEN}(?:\\s*\\|\\s*#{NMTOKEN})*\\s*\\)" + NOTATIONTYPE = "NOTATION\\s+\\(\\s*#{NAME}(?:\\s*\\|\\s*#{NAME})*\\s*\\)" + ENUMERATEDTYPE = "(?:(?:#{NOTATIONTYPE})|(?:#{ENUMERATION}))" + ATTTYPE = "(CDATA|ID|IDREF|IDREFS|ENTITY|ENTITIES|NMTOKEN|NMTOKENS|#{ENUMERATEDTYPE})" + ATTVALUE = "(?:\"((?:[^<&\"]|#{REFERENCE})*)\")|(?:'((?:[^<&']|#{REFERENCE})*)')" + DEFAULTDECL = "(#REQUIRED|#IMPLIED|(?:(#FIXED\\s+)?#{ATTVALUE}))" + ATTDEF = "\\s+#{NAME}\\s+#{ATTTYPE}\\s+#{DEFAULTDECL}" + ATTDEF_RE = /#{ATTDEF}/ + ATTLISTDECL_START = /\A\s*<!ATTLIST/um + ATTLISTDECL_PATTERN = /\A\s*<!ATTLIST\s+#{NAME}(?:#{ATTDEF})*\s*>/um + + TEXT_PATTERN = /\A([^<]*)/um + + # Entity constants + PUBIDCHAR = "\x20\x0D\x0Aa-zA-Z0-9\\-()+,./:=?;!*@$_%#" + SYSTEMLITERAL = %Q{((?:"[^"]*")|(?:'[^']*'))} + PUBIDLITERAL = %Q{("[#{PUBIDCHAR}']*"|'[#{PUBIDCHAR}]*')} + EXTERNALID = "(?:(?:(SYSTEM)\\s+#{SYSTEMLITERAL})|(?:(PUBLIC)\\s+#{PUBIDLITERAL}\\s+#{SYSTEMLITERAL}))" + NDATADECL = "\\s+NDATA\\s+#{NAME}" + PEREFERENCE = "%#{NAME};" + ENTITYVALUE = %Q{((?:"(?:[^%&"]|#{PEREFERENCE}|#{REFERENCE})*")|(?:'([^%&']|#{PEREFERENCE}|#{REFERENCE})*'))} + PEDEF = "(?:#{ENTITYVALUE}|#{EXTERNALID})" + ENTITYDEF = "(?:#{ENTITYVALUE}|(?:#{EXTERNALID}(#{NDATADECL})?))" + PEDECL = "<!ENTITY\\s+(%)\\s+#{NAME}\\s+#{PEDEF}\\s*>" + GEDECL = "<!ENTITY\\s+#{NAME}\\s+#{ENTITYDEF}\\s*>" + ENTITYDECL = /\s*(?:#{GEDECL})|\s*(?:#{PEDECL})/um + + NOTATIONDECL_START = /\A\s*<!NOTATION/um + EXTERNAL_ID_PUBLIC = /\A\s*PUBLIC\s+#{PUBIDLITERAL}\s+#{SYSTEMLITERAL}\s*/um + EXTERNAL_ID_SYSTEM = /\A\s*SYSTEM\s+#{SYSTEMLITERAL}\s*/um + PUBLIC_ID = /\A\s*PUBLIC\s+#{PUBIDLITERAL}\s*/um + + EREFERENCE = /&(?!#{NAME};)/ + + DEFAULT_ENTITIES = { + 'gt' => [/>/, '>', '>', />/], + 'lt' => [/</, '<', '<', /</], + 'quot' => [/"/, '"', '"', /"/], + "apos" => [/'/, "'", "'", /'/] + } + + module Private + PEREFERENCE_PATTERN = /#{PEREFERENCE}/um + TAG_PATTERN = /((?>#{QNAME_STR}))\s*/um + CLOSE_PATTERN = /(#{QNAME_STR})\s*>/um + EQUAL_PATTERN = /\s*=\s*/um + ATTLISTDECL_END = /\s+#{NAME}(?:#{ATTDEF})*\s*>/um + NAME_PATTERN = /#{NAME}/um + GEDECL_PATTERN = "\\s+#{NAME}\\s+#{ENTITYDEF}\\s*>" + PEDECL_PATTERN = "\\s+(%)\\s+#{NAME}\\s+#{PEDEF}\\s*>" + ENTITYDECL_PATTERN = /(?:#{GEDECL_PATTERN})|(?:#{PEDECL_PATTERN})/um + CARRIAGE_RETURN_NEWLINE_PATTERN = /\r\n?/ + CHARACTER_REFERENCES = /&#((?:\d+)|(?:x[a-fA-F0-9]+));/ + DEFAULT_ENTITIES_PATTERNS = {} + default_entities = ['gt', 'lt', 'quot', 'apos', 'amp'] + default_entities.each do |term| + DEFAULT_ENTITIES_PATTERNS[term] = /&#{term};/ + end + XML_PREFIXED_NAMESPACE = "http://www.w3.org/XML/1998/namespace" + end + private_constant :Private + + def initialize( source ) + self.stream = source + @listeners = [] + @prefixes = Set.new + @entity_expansion_count = 0 + @entity_expansion_limit = Security.entity_expansion_limit + @entity_expansion_text_limit = Security.entity_expansion_text_limit + @source.ensure_buffer + @version = nil + end + + def add_listener( listener ) + @listeners << listener + end + + attr_reader :source + attr_reader :entity_expansion_count + attr_writer :entity_expansion_limit + attr_writer :entity_expansion_text_limit + + def stream=( source ) + @source = SourceFactory.create_from( source ) + reset + end + + def reset + @closed = nil + @have_root = false + @document_status = nil + @tags = [] + @stack = [] + @entities = [] + @namespaces = {"xml" => Private::XML_PREFIXED_NAMESPACE} + @namespaces_restore_stack = [] + end + + def position + if @source.respond_to? :position + @source.position + else + # FIXME + 0 + end + end + + # Returns true if there are no more events + def empty? + (@source.empty? and @stack.empty?) + end + + # Returns true if there are more events. Synonymous with !empty? + def has_next? + !(@source.empty? and @stack.empty?) + end + + # Push an event back on the head of the stream. This method + # has (theoretically) infinite depth. + def unshift token + @stack.unshift(token) + end + + # Peek at the +depth+ event in the stack. The first element on the stack + # is at depth 0. If +depth+ is -1, will parse to the end of the input + # stream and return the last event, which is always :end_document. + # Be aware that this causes the stream to be parsed up to the +depth+ + # event, so you can effectively pre-parse the entire document (pull the + # entire thing into memory) using this method. + def peek depth=0 + raise %Q[Illegal argument "#{depth}"] if depth < -1 + temp = [] + if depth == -1 + temp.push(pull()) until empty? + else + while @stack.size+temp.size < depth+1 + temp.push(pull()) + end + end + @stack += temp if temp.size > 0 + @stack[depth] + end + + # Returns the next event. This is a +PullEvent+ object. + def pull + @source.drop_parsed_content + + pull_event.tap do |event| + @listeners.each do |listener| + listener.receive event + end + end + end + + def pull_event + if @closed + x, @closed = @closed, nil + return [ :end_element, x ] + end + if empty? + if @document_status == :in_doctype + raise ParseException.new("Malformed DOCTYPE: unclosed", @source) + end + unless @tags.empty? + path = "/" + @tags.join("/") + raise ParseException.new("Missing end tag for '#{path}'", @source) + end + + unless @document_status == :in_element + raise ParseException.new("Malformed XML: No root element", @source) + end + + return [ :end_document ] + end + return @stack.shift if @stack.size > 0 + #STDERR.puts @source.encoding + #STDERR.puts "BUFFER = #{@source.buffer.inspect}" + + @source.ensure_buffer + if @document_status == nil + start_position = @source.position + if @source.match?("<?", true) + return process_instruction + elsif @source.match?("<!", true) + if @source.match?("--", true) + return [ :comment, process_comment ] + elsif @source.match?("DOCTYPE", true) + base_error_message = "Malformed DOCTYPE" + unless @source.skip_spaces + if @source.match?(">") + message = "#{base_error_message}: name is missing" + else + message = "#{base_error_message}: invalid name" + end + @source.position = start_position + raise REXML::ParseException.new(message, @source) + end + name = parse_name(base_error_message) + @source.skip_spaces + if @source.match?("[", true) + id = [nil, nil, nil] + @document_status = :in_doctype + elsif @source.match?(">", true) + id = [nil, nil, nil] + @document_status = :after_doctype + @source.ensure_buffer + else + id = parse_id(base_error_message, + accept_external_id: true, + accept_public_id: false) + if id[0] == "SYSTEM" + # For backward compatibility + id[1], id[2] = id[2], nil + end + @source.skip_spaces + if @source.match?("[", true) + @document_status = :in_doctype + elsif @source.match?(">", true) + @document_status = :after_doctype + @source.ensure_buffer + else + message = "#{base_error_message}: garbage after external ID" + raise REXML::ParseException.new(message, @source) + end + end + args = [:start_doctype, name, *id] + if @document_status == :after_doctype + @source.skip_spaces + @stack << [ :end_doctype ] + end + return args + else + message = "Invalid XML" + raise REXML::ParseException.new(message, @source) + end + end + end + if @document_status == :in_doctype + @source.skip_spaces + start_position = @source.position + if @source.match?("<!", true) + if @source.match?("ELEMENT", true) + md = @source.match(/(.*?)>/um, true) + raise REXML::ParseException.new( "Bad ELEMENT declaration!", @source ) if md.nil? + return [ :elementdecl, "<!ELEMENT" + md[1] ] + elsif @source.match?("ENTITY", true) + match_data = @source.match(Private::ENTITYDECL_PATTERN, true) + unless match_data + raise REXML::ParseException.new("Malformed entity declaration", @source) + end + match = [:entitydecl, *match_data.captures.compact] + ref = false + if match[1] == '%' + ref = true + match.delete_at 1 + end + # Now we have to sort out what kind of entity reference this is + if match[2] == 'SYSTEM' + # External reference + match[3] = match[3][1..-2] # PUBID + match.delete_at(4) if match.size > 4 # Chop out NDATA decl + # match is [ :entity, name, SYSTEM, pubid(, ndata)? ] + elsif match[2] == 'PUBLIC' + # External reference + match[3] = match[3][1..-2] # PUBID + match[4] = match[4][1..-2] # HREF + match.delete_at(5) if match.size > 5 # Chop out NDATA decl + # match is [ :entity, name, PUBLIC, pubid, href(, ndata)? ] + elsif Private::PEREFERENCE_PATTERN.match?(match[2]) + raise REXML::ParseException.new("Parameter entity references forbidden in internal subset: #{match[2]}", @source) + else + match[2] = match[2][1..-2] + match.pop if match.size == 4 + # match is [ :entity, name, value ] + end + match << '%' if ref + return match + elsif @source.match?("ATTLIST", true) + md = @source.match(Private::ATTLISTDECL_END, true) + raise REXML::ParseException.new( "Bad ATTLIST declaration!", @source ) if md.nil? + element = md[1] + contents = "<!ATTLIST" + md[0] + + pairs = {} + values = md[0].strip.scan( ATTDEF_RE ) + values.each do |attdef| + unless attdef[3] == "#IMPLIED" + attdef.compact! + val = attdef[3] + val = attdef[4] if val == "#FIXED " + pairs[attdef[0]] = val + if attdef[0] =~ /^xmlns:(.*)/ + @namespaces[$1] = val + end + end + end + return [ :attlistdecl, element, pairs, contents ] + elsif @source.match?("NOTATION", true) + base_error_message = "Malformed notation declaration" + unless @source.skip_spaces + if @source.match?(">") + message = "#{base_error_message}: name is missing" + else + message = "#{base_error_message}: invalid name" + end + @source.position = start_position + raise REXML::ParseException.new(message, @source) + end + name = parse_name(base_error_message) + id = parse_id(base_error_message, + accept_external_id: true, + accept_public_id: true) + @source.skip_spaces + unless @source.match?(">", true) + message = "#{base_error_message}: garbage before end >" + raise REXML::ParseException.new(message, @source) + end + return [:notationdecl, name, *id] + elsif @source.match?("--", true) + return [ :comment, process_comment ] + else + raise REXML::ParseException.new("Malformed node: Started with '<!' but not a comment nor ELEMENT,ENTITY,ATTLIST,NOTATION", @source) + end + elsif match = @source.match(/(%.*?;)\s*/um, true) + return [ :externalentity, match[1] ] + elsif @source.match?(/\]\s*>/um, true) + @document_status = :after_doctype + return [ :end_doctype ] + else + raise ParseException.new("Malformed DOCTYPE: invalid declaration", @source) + end + end + if @document_status == :after_doctype + @source.skip_spaces + end + begin + start_position = @source.position + if @source.match?("<", true) + # :text's read_until may remain only "<" in buffer. In the + # case, buffer is empty here. So we need to fill buffer + # here explicitly. + @source.ensure_buffer + if @source.match?("/", true) + @namespaces_restore_stack.pop + last_tag = @tags.pop + md = @source.match(Private::CLOSE_PATTERN, true) + if md and !last_tag + message = "Unexpected top-level end tag (got '#{md[1]}')" + raise REXML::ParseException.new(message, @source) + end + if md.nil? or last_tag != md[1] + message = "Missing end tag for '#{last_tag}'" + message += " (got '#{md[1]}')" if md + @source.position = start_position if md.nil? + raise REXML::ParseException.new(message, @source) + end + return [ :end_element, last_tag ] + elsif @source.match?("!", true) + #STDERR.puts "SOURCE BUFFER = #{source.buffer}, #{source.buffer.size}" + if @source.match?("--", true) + return [ :comment, process_comment ] + elsif @source.match?("[CDATA[", true) + text = @source.read_until("]]>") + if text.chomp!("]]>") + return [ :cdata, text ] + else + raise REXML::ParseException.new("Malformed CDATA: Missing end ']]>'", @source) + end + else + raise REXML::ParseException.new("Malformed node: Started with '<!' but not a comment nor CDATA", @source) + end + elsif @source.match?("?", true) + return process_instruction + else + # Get the next tag + md = @source.match(Private::TAG_PATTERN, true) + unless md + @source.position = start_position + raise REXML::ParseException.new("malformed XML: missing tag start", @source) + end + tag = md[1] + @document_status = :in_element + @prefixes.clear + @prefixes << md[2] if md[2] + push_namespaces_restore + attributes, closed = parse_attributes(@prefixes) + # Verify that all of the prefixes have been defined + for prefix in @prefixes + unless @namespaces.key?(prefix) + raise UndefinedNamespaceException.new(prefix,@source,self) + end + end + + if closed + @closed = tag + pop_namespaces_restore + else + if @tags.empty? and @have_root + raise ParseException.new("Malformed XML: Extra tag at the end of the document (got '<#{tag}')", @source) + end + @tags.push( tag ) + end + @have_root = true + return [ :start_element, tag, attributes ] + end + else + text = @source.read_until("<") + if text.chomp!("<") + @source.position -= "<".bytesize + end + if @tags.empty? + unless /\A\s*\z/.match?(text) + if @have_root + raise ParseException.new("Malformed XML: Extra content at the end of the document (got '#{text}')", @source) + else + raise ParseException.new("Malformed XML: Content at the start of the document (got '#{text}')", @source) + end + end + return pull_event if @have_root + end + return [ :text, text ] + end + rescue REXML::UndefinedNamespaceException + raise + rescue REXML::ParseException + raise + rescue => error + raise REXML::ParseException.new( "Exception parsing", + @source, self, (error ? error : $!) ) + end + # NOTE: The end of the method never runs, because it is unreachable. + # All branches of code above have explicit unconditional return or raise statements. + end + private :pull_event + + def entity( reference, entities ) + return unless entities + + value = entities[ reference ] + return if value.nil? + + record_entity_expansion + unnormalize( value, entities ) + end + + # Escapes all possible entities + def normalize( input, entities=nil, entity_filter=nil ) + copy = input.clone + # Doing it like this rather than in a loop improves the speed + copy.gsub!( EREFERENCE, '&' ) + entities.each do |key, value| + copy.gsub!( value, "&#{key};" ) unless entity_filter and + entity_filter.include?(entity) + end if entities + copy.gsub!( EREFERENCE, '&' ) + DEFAULT_ENTITIES.each do |key, value| + copy.gsub!( value[3], value[1] ) + end + copy + end + + # Unescapes all possible entities + def unnormalize( string, entities=nil, filter=nil ) + if string.include?("\r") + rv = string.gsub( Private::CARRIAGE_RETURN_NEWLINE_PATTERN, "\n" ) + else + rv = string.dup + end + matches = rv.scan( REFERENCE_RE ) + return rv if matches.size == 0 + rv.gsub!( Private::CHARACTER_REFERENCES ) { + m=$1 + if m.start_with?("x") + code_point = Integer(m[1..-1], 16) + else + code_point = Integer(m, 10) + end + [code_point].pack('U*') + } + matches.collect!{|x|x[0]}.compact! + if filter + matches.reject! do |entity_reference| + filter.include?(entity_reference) + end + end + if matches.size > 0 + matches.tally.each do |entity_reference, n| + entity_expansion_count_before = @entity_expansion_count + entity_value = entity( entity_reference, entities ) + if entity_value + if n > 1 + entity_expansion_count_delta = + @entity_expansion_count - entity_expansion_count_before + record_entity_expansion(entity_expansion_count_delta * (n - 1)) + end + re = Private::DEFAULT_ENTITIES_PATTERNS[entity_reference] || /&#{entity_reference};/ + rv.gsub!( re, entity_value ) + if rv.bytesize > @entity_expansion_text_limit + raise "entity expansion has grown too large" + end + else + er = DEFAULT_ENTITIES[entity_reference] + rv.gsub!( er[0], er[2] ) if er + end + end + rv.gsub!( Private::DEFAULT_ENTITIES_PATTERNS['amp'], '&' ) + end + rv + end + + private + def add_namespace(prefix, uri) + @namespaces_restore_stack.last[prefix] = @namespaces[prefix] + if uri.nil? + @namespaces.delete(prefix) + else + @namespaces[prefix] = uri + end + end + + def push_namespaces_restore + namespaces_restore = {} + @namespaces_restore_stack.push(namespaces_restore) + namespaces_restore + end + + def pop_namespaces_restore + namespaces_restore = @namespaces_restore_stack.pop + namespaces_restore.each do |prefix, uri| + if uri.nil? + @namespaces.delete(prefix) + else + @namespaces[prefix] = uri + end + end + end + + def record_entity_expansion(delta=1) + @entity_expansion_count += delta + if @entity_expansion_count > @entity_expansion_limit + raise "number of entity expansions exceeded, processing aborted." + end + end + + def need_source_encoding_update?(xml_declaration_encoding) + return false if xml_declaration_encoding.nil? + return false if /\AUTF-16\z/i =~ xml_declaration_encoding + true + end + + def normalize_xml_declaration_encoding(xml_declaration_encoding) + /\AUTF-16(?:BE|LE)\z/i.match?(xml_declaration_encoding) ? "UTF-16" : nil + end + + def parse_name(base_error_message) + md = @source.match(Private::NAME_PATTERN, true) + unless md + if @source.match?(/\S/um) + message = "#{base_error_message}: invalid name" + else + message = "#{base_error_message}: name is missing" + end + raise REXML::ParseException.new(message, @source) + end + md[0] + end + + def parse_id(base_error_message, + accept_external_id:, + accept_public_id:) + if accept_external_id and (md = @source.match(EXTERNAL_ID_PUBLIC, true)) + pubid = system = nil + pubid_literal = md[1] + pubid = pubid_literal[1..-2] if pubid_literal # Remove quote + system_literal = md[2] + system = system_literal[1..-2] if system_literal # Remove quote + ["PUBLIC", pubid, system] + elsif accept_public_id and (md = @source.match(PUBLIC_ID, true)) + pubid = system = nil + pubid_literal = md[1] + pubid = pubid_literal[1..-2] if pubid_literal # Remove quote + ["PUBLIC", pubid, nil] + elsif accept_external_id and (md = @source.match(EXTERNAL_ID_SYSTEM, true)) + system = nil + system_literal = md[1] + system = system_literal[1..-2] if system_literal # Remove quote + ["SYSTEM", nil, system] + else + details = parse_id_invalid_details(accept_external_id: accept_external_id, + accept_public_id: accept_public_id) + message = "#{base_error_message}: #{details}" + raise REXML::ParseException.new(message, @source) + end + end + + def parse_id_invalid_details(accept_external_id:, + accept_public_id:) + public = /\A\s*PUBLIC/um + system = /\A\s*SYSTEM/um + if (accept_external_id or accept_public_id) and @source.match?(/#{public}/um) + if @source.match?(/#{public}(?:\s+[^'"]|\s*[\[>])/um) + return "public ID literal is missing" + end + unless @source.match?(/#{public}\s+#{PUBIDLITERAL}/um) + return "invalid public ID literal" + end + if accept_public_id + if @source.match?(/#{public}\s+#{PUBIDLITERAL}\s+[^'"]/um) + return "system ID literal is missing" + end + unless @source.match?(/#{public}\s+#{PUBIDLITERAL}\s+#{SYSTEMLITERAL}/um) + return "invalid system literal" + end + "garbage after system literal" + else + "garbage after public ID literal" + end + elsif accept_external_id and @source.match?(/#{system}/um) + if @source.match?(/#{system}(?:\s+[^'"]|\s*[\[>])/um) + return "system literal is missing" + end + unless @source.match?(/#{system}\s+#{SYSTEMLITERAL}/um) + return "invalid system literal" + end + "garbage after system literal" + else + unless @source.match?(/\A\s*(?:PUBLIC|SYSTEM)\s/um) + return "invalid ID type" + end + "ID type is missing" + end + end + + def process_comment + text = @source.read_until("-->") + unless text.chomp!("-->") + raise REXML::ParseException.new("Unclosed comment: Missing end '-->'", @source) + end + + if text.include? "--" or text.end_with?("-") + raise REXML::ParseException.new("Malformed comment", @source) + end + text + end + + def process_instruction + name = parse_name("Malformed XML: Invalid processing instruction node") + if name == "xml" + xml_declaration + else # PITarget + if @source.skip_spaces # e.g. <?name content?> + start_position = @source.position + content = @source.read_until("?>") + unless content.chomp!("?>") + @source.position = start_position + raise ParseException.new("Malformed XML: Unclosed processing instruction: <#{name}>", @source) + end + else # e.g. <?name?> + content = nil + unless @source.match?("?>", true) + raise ParseException.new("Malformed XML: Unclosed processing instruction: <#{name}>", @source) + end + end + [:processing_instruction, name, content] + end + end + + def xml_declaration + unless @version.nil? + raise ParseException.new("Malformed XML: XML declaration is duplicated", @source) + end + if @document_status + raise ParseException.new("Malformed XML: XML declaration is not at the start", @source) + end + unless @source.skip_spaces + raise ParseException.new("Malformed XML: XML declaration misses spaces before version", @source) + end + unless @source.match?("version", true) + raise ParseException.new("Malformed XML: XML declaration misses version", @source) + end + @version = parse_attribute_value_with_equal("xml") + unless @source.skip_spaces + unless @source.match?("?>", true) + raise ParseException.new("Malformed XML: Unclosed XML declaration", @source) + end + encoding = normalize_xml_declaration_encoding(@source.encoding) + return [ :xmldecl, @version, encoding, nil ] # e.g. <?xml version="1.0"?> + end + + if @source.match?("encoding", true) + encoding = parse_attribute_value_with_equal("xml") + unless @source.skip_spaces + unless @source.match?("?>", true) + raise ParseException.new("Malformed XML: Unclosed XML declaration", @source) + end + if need_source_encoding_update?(encoding) + @source.encoding = encoding + end + encoding ||= normalize_xml_declaration_encoding(@source.encoding) + return [ :xmldecl, @version, encoding, nil ] # e.g. <?xml version="1.1" encoding="UTF-8"?> + end + end + + if @source.match?("standalone", true) + standalone = parse_attribute_value_with_equal("xml") + case standalone + when "yes", "no" + else + raise ParseException.new("Malformed XML: XML declaration standalone is not yes or no : <#{standalone}>", @source) + end + end + @source.skip_spaces + unless @source.match?("?>", true) + raise ParseException.new("Malformed XML: Unclosed XML declaration", @source) + end + + if need_source_encoding_update?(encoding) + @source.encoding = encoding + end + encoding ||= normalize_xml_declaration_encoding(@source.encoding) + + # e.g. <?xml version="1.0" ?> + # <?xml version="1.1" encoding="UTF-8" ?> + # <?xml version="1.1" standalone="yes"?> + # <?xml version="1.1" encoding="UTF-8" standalone="yes" ?> + [ :xmldecl, @version, encoding, standalone ] + end + + if StringScanner::Version < "3.1.1" + def scan_quote + @source.match(/(['"])/, true)&.[](1) + end + else + def scan_quote + case @source.peek_byte + when 34 # '"'.ord + @source.scan_byte + '"' + when 39 # "'".ord + @source.scan_byte + "'" + else + nil + end + end + end + + def parse_attribute_value_with_equal(name) + unless @source.match?(Private::EQUAL_PATTERN, true) + message = "Missing attribute equal: <#{name}>" + raise REXML::ParseException.new(message, @source) + end + unless quote = scan_quote + message = "Missing attribute value start quote: <#{name}>" + raise REXML::ParseException.new(message, @source) + end + start_position = @source.position + value = @source.read_until(quote) + unless value.chomp!(quote) + @source.position = start_position + message = "Missing attribute value end quote: <#{name}>: <#{quote}>" + raise REXML::ParseException.new(message, @source) + end + value + end + + def parse_attributes(prefixes) + attributes = {} + expanded_names = {} + closed = false + while true + if @source.match?(">", true) + return attributes, closed + elsif @source.match?("/>", true) + closed = true + return attributes, closed + elsif match = @source.match(QNAME, true) + name = match[1] + prefix = match[2] + local_part = match[3] + value = parse_attribute_value_with_equal(name) + @source.skip_spaces + if prefix == "xmlns" + if local_part == "xml" + if value != Private::XML_PREFIXED_NAMESPACE + msg = "The 'xml' prefix must not be bound to any other namespace "+ + "(http://www.w3.org/TR/REC-xml-names/#ns-decl)" + raise REXML::ParseException.new( msg, @source, self ) + end + elsif local_part == "xmlns" + msg = "The 'xmlns' prefix must not be declared "+ + "(http://www.w3.org/TR/REC-xml-names/#ns-decl)" + raise REXML::ParseException.new( msg, @source, self) + end + add_namespace(local_part, value) + elsif prefix + prefixes << prefix unless prefix == "xml" + end + + if attributes[name] + msg = "Duplicate attribute #{name.inspect}" + raise REXML::ParseException.new(msg, @source, self) + end + + unless prefix == "xmlns" + uri = @namespaces[prefix] + expanded_name = [uri, local_part] + existing_prefix = expanded_names[expanded_name] + if existing_prefix + message = "Namespace conflict in adding attribute " + + "\"#{local_part}\": " + + "Prefix \"#{existing_prefix}\" = \"#{uri}\" and " + + "prefix \"#{prefix}\" = \"#{uri}\"" + raise REXML::ParseException.new(message, @source, self) + end + expanded_names[expanded_name] = prefix + end + + attributes[name] = value + else + message = "Invalid attribute name: <#{@source.buffer.split(%r{[/>\s]}).first}>" + raise REXML::ParseException.new(message, @source) + end + end + end + end + end +end + +=begin + case event[0] + when :start_element + when :text + when :end_element + when :processing_instruction + when :cdata + when :comment + when :xmldecl + when :start_doctype + when :end_doctype + when :externalentity + when :elementdecl + when :entity + when :attlistdecl + when :notationdecl + when :end_doctype + end +=end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/parsers/lightparser.rb b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/parsers/lightparser.rb new file mode 100644 index 0000000..bdc0827 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/parsers/lightparser.rb @@ -0,0 +1,59 @@ +# frozen_string_literal: false +require_relative 'streamparser' +require_relative 'baseparser' +require_relative '../light/node' + +module REXML + module Parsers + class LightParser + def initialize stream + @stream = stream + @parser = REXML::Parsers::BaseParser.new( stream ) + end + + def add_listener( listener ) + @parser.add_listener( listener ) + end + + def rewind + @stream.rewind + @parser.stream = @stream + end + + def parse + root = context = [ :document ] + while true + event = @parser.pull + case event[0] + when :end_document + break + when :start_element, :start_doctype + new_node = event + context << new_node + new_node[1,0] = [context] + context = new_node + when :end_element, :end_doctype + context = context[1] + else + new_node = event + context << new_node + new_node[1,0] = [context] + end + end + root + end + end + + # An element is an array. The array contains: + # 0 The parent element + # 1 The tag name + # 2 A hash of attributes + # 3..-1 The child elements + # An element is an array of size > 3 + # Text is a String + # PIs are [ :processing_instruction, target, data ] + # Comments are [ :comment, data ] + # DocTypes are DocType structs + # The root is an array with XMLDecls, Text, DocType, Array, Text + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/parsers/pullparser.rb b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/parsers/pullparser.rb new file mode 100644 index 0000000..e0b1e94 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/parsers/pullparser.rb @@ -0,0 +1,213 @@ +# frozen_string_literal: false +require 'forwardable' + +require_relative '../parseexception' +require_relative 'baseparser' +require_relative '../xmltokens' + +module REXML + module Parsers + # = Using the Pull Parser + # <em>This API is experimental, and subject to change.</em> + # parser = PullParser.new( "<a>text<b att='val'/>txet</a>" ) + # while parser.has_next? + # res = parser.next + # puts res[1]['att'] if res.start_tag? and res[0] == 'b' + # end + # See the PullEvent class for information on the content of the results. + # The data is identical to the arguments passed for the various events to + # the StreamListener API. + # + # Notice that: + # parser = PullParser.new( "<a>BAD DOCUMENT" ) + # while parser.has_next? + # res = parser.next + # raise res[1] if res.error? + # end + # + # Nat Price gave me some good ideas for the API. + class PullParser + include XMLTokens + extend Forwardable + + def_delegators( :@parser, :has_next? ) + def_delegators( :@parser, :entity ) + def_delegators( :@parser, :empty? ) + def_delegators( :@parser, :source ) + + def initialize stream + @entities = {} + @listeners = nil + @parser = BaseParser.new( stream ) + @my_stack = [] + end + + def add_listener( listener ) + @listeners = [] unless @listeners + @listeners << listener + end + + def entity_expansion_count + @parser.entity_expansion_count + end + + def entity_expansion_limit=( limit ) + @parser.entity_expansion_limit = limit + end + + def entity_expansion_text_limit=( limit ) + @parser.entity_expansion_text_limit = limit + end + + def each + while has_next? + yield self.pull + end + end + + def peek depth=0 + if @my_stack.length <= depth + (depth - @my_stack.length + 1).times { + e = PullEvent.new(@parser.pull) + @my_stack.push(e) + } + end + @my_stack[depth] + end + + def pull + return @my_stack.shift if @my_stack.length > 0 + + event = @parser.pull + case event[0] + when :entitydecl + @entities[ event[1] ] = + event[2] unless event[2] =~ /PUBLIC|SYSTEM/ + when :text + unnormalized = @parser.unnormalize( event[1], @entities ) + event << unnormalized + end + PullEvent.new( event ) + end + + def unshift token + @my_stack.unshift token + end + + def reset + @parser.reset + end + end + + # A parsing event. The contents of the event are accessed as an +Array?, + # and the type is given either by the ...? methods, or by accessing the + # +type+ accessor. The contents of this object vary from event to event, + # but are identical to the arguments passed to +StreamListener+s for each + # event. + class PullEvent + # The type of this event. Will be one of :tag_start, :tag_end, :text, + # :processing_instruction, :comment, :doctype, :attlistdecl, :entitydecl, + # :notationdecl, :entity, :cdata, :xmldecl, or :error. + def initialize(arg) + @contents = arg + end + + def []( start, endd=nil) + if start.kind_of? Range + @contents.slice( start.begin+1 .. start.end ) + elsif start.kind_of? Numeric + if endd.nil? + @contents.slice( start+1 ) + else + @contents.slice( start+1, endd ) + end + else + raise "Illegal argument #{start.inspect} (#{start.class})" + end + end + + def event_type + @contents[0] + end + + # Content: [ String tag_name, Hash attributes ] + def start_element? + @contents[0] == :start_element + end + + # Content: [ String tag_name ] + def end_element? + @contents[0] == :end_element + end + + # Content: [ String raw_text, String unnormalized_text ] + def text? + @contents[0] == :text + end + + # Content: [ String text ] + def instruction? + @contents[0] == :processing_instruction + end + + # Content: [ String text ] + def comment? + @contents[0] == :comment + end + + # Content: [ String name, String pub_sys, String long_name, String uri ] + def doctype? + @contents[0] == :start_doctype + end + + # Content: [ String text ] + def attlistdecl? + @contents[0] == :attlistdecl + end + + # Content: [ String text ] + def elementdecl? + @contents[0] == :elementdecl + end + + # Due to the wonders of DTDs, an entity declaration can be just about + # anything. There's no way to normalize it; you'll have to interpret the + # content yourself. However, the following is true: + # + # * If the entity declaration is an internal entity: + # [ String name, String value ] + # Content: [ String text ] + def entitydecl? + @contents[0] == :entitydecl + end + + # Content: [ String text ] + def notationdecl? + @contents[0] == :notationdecl + end + + # Content: [ String text ] + def entity? + @contents[0] == :entity + end + + # Content: [ String text ] + def cdata? + @contents[0] == :cdata + end + + # Content: [ String version, String encoding, String standalone ] + def xmldecl? + @contents[0] == :xmldecl + end + + def error? + @contents[0] == :error + end + + def inspect + @contents[0].to_s + ": " + @contents[1..-1].inspect + end + end + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/parsers/sax2parser.rb b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/parsers/sax2parser.rb new file mode 100644 index 0000000..a51477d --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/parsers/sax2parser.rb @@ -0,0 +1,270 @@ +# frozen_string_literal: false +require_relative 'baseparser' +require_relative '../parseexception' +require_relative '../namespace' +require_relative '../text' + +module REXML + module Parsers + # SAX2Parser + class SAX2Parser + def initialize source + @parser = BaseParser.new(source) + @listeners = [] + @procs = [] + @namespace_stack = [] + @has_listeners = false + @tag_stack = [] + @entities = {} + end + + def source + @parser.source + end + + def entity_expansion_count + @parser.entity_expansion_count + end + + def entity_expansion_limit=( limit ) + @parser.entity_expansion_limit = limit + end + + def entity_expansion_text_limit=( limit ) + @parser.entity_expansion_text_limit = limit + end + + def add_listener( listener ) + @parser.add_listener( listener ) + end + + # Listen arguments: + # + # Symbol, Array, Block + # Listen to Symbol events on Array elements + # Symbol, Block + # Listen to Symbol events + # Array, Listener + # Listen to all events on Array elements + # Array, Block + # Listen to :start_element events on Array elements + # Listener + # Listen to All events + # + # Symbol can be one of: :start_element, :end_element, + # :start_prefix_mapping, :end_prefix_mapping, :characters, + # :processing_instruction, :doctype, :attlistdecl, :elementdecl, + # :entitydecl, :notationdecl, :cdata, :xmldecl, :comment + # + # There is an additional symbol that can be listened for: :progress. + # This will be called for every event generated, passing in the current + # stream position. + # + # Array contains regular expressions or strings which will be matched + # against fully qualified element names. + # + # Listener must implement the methods in SAX2Listener + # + # Block will be passed the same arguments as a SAX2Listener method would + # be, where the method name is the same as the matched Symbol. + # See the SAX2Listener for more information. + def listen( *args, &blok ) + if args[0].kind_of? Symbol + if args.size == 2 + args[1].each { |match| @procs << [args[0], match, blok] } + else + add( [args[0], nil, blok] ) + end + elsif args[0].kind_of? Array + if args.size == 2 + args[0].each { |match| add( [nil, match, args[1]] ) } + else + args[0].each { |match| add( [ :start_element, match, blok ] ) } + end + else + add([nil, nil, args[0]]) + end + end + + def deafen( listener=nil, &blok ) + if listener + @listeners.delete_if {|item| item[-1] == listener } + @has_listeners = false if @listeners.size == 0 + else + @procs.delete_if {|item| item[-1] == blok } + end + end + + def parse + @procs.each { |sym,match,block| block.call if sym == :start_document } + @listeners.each { |sym,match,block| + block.start_document if sym == :start_document or sym.nil? + } + context = [] + while true + event = @parser.pull + case event[0] + when :end_document + handle( :end_document ) + break + when :start_doctype + handle( :doctype, *event[1..-1]) + when :end_doctype + context = context[1] + when :start_element + @tag_stack.push(event[1]) + # find the observers for namespaces + procs = get_procs( :start_prefix_mapping, event[1] ) + listeners = get_listeners( :start_prefix_mapping, event[1] ) + if procs or listeners + # break out the namespace declarations + # The attributes live in event[2] + event[2].each {|n, v| event[2][n] = @parser.normalize(v)} + nsdecl = event[2].find_all { |n, value| n =~ /^xmlns(:|$)/ } + nsdecl.collect! { |n, value| [ n[6..-1], value ] } + @namespace_stack.push({}) + nsdecl.each do |n,v| + @namespace_stack[-1][n] = v + # notify observers of namespaces + procs.each { |ob| ob.call( n, v ) } if procs + listeners.each { |ob| ob.start_prefix_mapping(n, v) } if listeners + end + end + event[1] =~ Namespace::NAMESPLIT + prefix = $1 + local = $2 + uri = get_namespace(prefix) + # find the observers for start_element + procs = get_procs( :start_element, event[1] ) + listeners = get_listeners( :start_element, event[1] ) + # notify observers + procs.each { |ob| ob.call( uri, local, event[1], event[2] ) } if procs + listeners.each { |ob| + ob.start_element( uri, local, event[1], event[2] ) + } if listeners + when :end_element + @tag_stack.pop + event[1] =~ Namespace::NAMESPLIT + prefix = $1 + local = $2 + uri = get_namespace(prefix) + # find the observers for start_element + procs = get_procs( :end_element, event[1] ) + listeners = get_listeners( :end_element, event[1] ) + # notify observers + procs.each { |ob| ob.call( uri, local, event[1] ) } if procs + listeners.each { |ob| + ob.end_element( uri, local, event[1] ) + } if listeners + + namespace_mapping = @namespace_stack.pop + # find the observers for namespaces + procs = get_procs( :end_prefix_mapping, event[1] ) + listeners = get_listeners( :end_prefix_mapping, event[1] ) + if procs or listeners + namespace_mapping.each do |ns_prefix, ns_uri| + # notify observers of namespaces + procs.each { |ob| ob.call( ns_prefix ) } if procs + listeners.each { |ob| ob.end_prefix_mapping(ns_prefix) } if listeners + end + end + when :text + unnormalized = @parser.unnormalize( event[1], @entities ) + handle( :characters, unnormalized ) + when :entitydecl + handle_entitydecl( event ) + when :processing_instruction, :comment, :attlistdecl, + :elementdecl, :cdata, :notationdecl, :xmldecl + handle( *event ) + end + handle( :progress, @parser.position ) + end + end + + private + def handle( symbol, *arguments ) + tag = @tag_stack[-1] + procs = get_procs( symbol, tag ) + listeners = get_listeners( symbol, tag ) + # notify observers + procs.each { |ob| ob.call( *arguments ) } if procs + listeners.each { |l| + l.send( symbol.to_s, *arguments ) + } if listeners + end + + def handle_entitydecl( event ) + @entities[ event[1] ] = event[2] if event.size == 3 + parameter_reference_p = false + case event[2] + when "SYSTEM" + if event.size == 5 + if event.last == "%" + parameter_reference_p = true + else + event[4, 0] = "NDATA" + end + end + when "PUBLIC" + if event.size == 6 + if event.last == "%" + parameter_reference_p = true + else + event[5, 0] = "NDATA" + end + end + else + parameter_reference_p = (event.size == 4) + end + event[1, 0] = event.pop if parameter_reference_p + handle( event[0], event[1..-1] ) + end + + # The following methods are duplicates, but it is faster than using + # a helper + def get_procs( symbol, name ) + return nil if @procs.size == 0 + @procs.find_all do |sym, match, block| + ( + (sym.nil? or symbol == sym) and + ((name.nil? and match.nil?) or match.nil? or ( + (name == match) or + (match.kind_of? Regexp and name =~ match) + ) + ) + ) + end.collect{|x| x[-1]} + end + def get_listeners( symbol, name ) + return nil if @listeners.size == 0 + @listeners.find_all do |sym, match, block| + ( + (sym.nil? or symbol == sym) and + ((name.nil? and match.nil?) or match.nil? or ( + (name == match) or + (match.kind_of? Regexp and name =~ match) + ) + ) + ) + end.collect{|x| x[-1]} + end + + def add( pair ) + if pair[-1].respond_to? :call + @procs << pair unless @procs.include? pair + else + @listeners << pair unless @listeners.include? pair + @has_listeners = true + end + end + + def get_namespace( prefix ) + return nil if @namespace_stack.empty? + + uris = (@namespace_stack.find_all { |ns| not ns[prefix].nil? }) || + (@namespace_stack.find { |ns| not ns[nil].nil? }) + uris[-1][prefix] unless uris.nil? or 0 == uris.size + end + end + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/parsers/streamparser.rb b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/parsers/streamparser.rb new file mode 100644 index 0000000..6c64d97 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/parsers/streamparser.rb @@ -0,0 +1,67 @@ +# frozen_string_literal: false +require_relative "baseparser" + +module REXML + module Parsers + class StreamParser + def initialize source, listener + @listener = listener + @parser = BaseParser.new( source ) + @entities = {} + end + + def add_listener( listener ) + @parser.add_listener( listener ) + end + + def entity_expansion_count + @parser.entity_expansion_count + end + + def entity_expansion_limit=( limit ) + @parser.entity_expansion_limit = limit + end + + def entity_expansion_text_limit=( limit ) + @parser.entity_expansion_text_limit = limit + end + + def parse + # entity string + while true + event = @parser.pull + case event[0] + when :end_document + return + when :start_element + attrs = event[2].each do |n, v| + event[2][n] = @parser.unnormalize( v ) + end + @listener.tag_start( event[1], attrs ) + when :end_element + @listener.tag_end( event[1] ) + when :text + unnormalized = @parser.unnormalize( event[1], @entities ) + @listener.text( unnormalized ) + when :processing_instruction + @listener.instruction( *event[1,2] ) + when :start_doctype + @listener.doctype( *event[1..-1] ) + when :end_doctype + # FIXME: remove this condition for milestone:3.2 + @listener.doctype_end if @listener.respond_to? :doctype_end + when :comment, :attlistdecl, :cdata, :xmldecl, :elementdecl + @listener.send( event[0].to_s, *event[1..-1] ) + when :entitydecl, :notationdecl + @entities[ event[1] ] = event[2] if event.size == 3 + @listener.send( event[0].to_s, event[1..-1] ) + when :externalentity + entity_reference = event[1] + content = entity_reference.gsub(/\A%|;\z/, "") + @listener.entity(content) + end + end + end + end + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/parsers/treeparser.rb b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/parsers/treeparser.rb new file mode 100644 index 0000000..4565a40 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/parsers/treeparser.rb @@ -0,0 +1,89 @@ +# frozen_string_literal: false +require_relative '../validation/validationexception' +require_relative '../undefinednamespaceexception' + +module REXML + module Parsers + class TreeParser + def initialize( source, build_context = Document.new ) + @build_context = build_context + @parser = Parsers::BaseParser.new( source ) + end + + def add_listener( listener ) + @parser.add_listener( listener ) + end + + def parse + entities = nil + begin + while true + event = @parser.pull + #STDERR.puts "TREEPARSER GOT #{event.inspect}" + case event[0] + when :end_document + return + when :start_element + el = @build_context = @build_context.add_element( event[1] ) + event[2].each do |key, value| + el.attributes[key]=Attribute.new(key,value,self) + end + when :end_element + @build_context = @build_context.parent + when :text + if @build_context[-1].instance_of? Text + @build_context[-1] << event[1] + else + @build_context.add( + Text.new(event[1], @build_context.whitespace, nil, true) + ) unless ( + @build_context.ignore_whitespace_nodes and + event[1].strip.size==0 + ) + end + when :comment + c = Comment.new( event[1] ) + @build_context.add( c ) + when :cdata + c = CData.new( event[1] ) + @build_context.add( c ) + when :processing_instruction + @build_context.add( Instruction.new( event[1], event[2] ) ) + when :end_doctype + entities.each { |k,v| entities[k] = @build_context.entities[k].value } + @build_context = @build_context.parent + when :start_doctype + doctype = DocType.new( event[1..-1], @build_context ) + @build_context = doctype + entities = {} + when :attlistdecl + n = AttlistDecl.new( event[1..-1] ) + @build_context.add( n ) + when :externalentity + n = ExternalEntity.new( event[1] ) + @build_context.add( n ) + when :elementdecl + n = ElementDecl.new( event[1] ) + @build_context.add(n) + when :entitydecl + entities[ event[1] ] = event[2] unless event[2] =~ /PUBLIC|SYSTEM/ + @build_context.add(Entity.new(event)) + when :notationdecl + n = NotationDecl.new( *event[1..-1] ) + @build_context.add( n ) + when :xmldecl + x = XMLDecl.new( event[1], event[2], event[3] ) + @build_context.add( x ) + end + end + rescue REXML::Validation::ValidationException + raise + rescue REXML::ParseException + raise + rescue + raise ParseException.new( $!.message, @parser.source, @parser, $! ) + end + end + end + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/parsers/ultralightparser.rb b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/parsers/ultralightparser.rb new file mode 100644 index 0000000..e0029f4 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/parsers/ultralightparser.rb @@ -0,0 +1,57 @@ +# frozen_string_literal: false +require_relative 'streamparser' +require_relative 'baseparser' + +module REXML + module Parsers + class UltraLightParser + def initialize stream + @stream = stream + @parser = REXML::Parsers::BaseParser.new( stream ) + end + + def add_listener( listener ) + @parser.add_listener( listener ) + end + + def rewind + @stream.rewind + @parser.stream = @stream + end + + def parse + root = context = [] + while true + event = @parser.pull + case event[0] + when :end_document + break + when :end_doctype + context = context[1] + when :start_element, :start_doctype + context << event + event[1,0] = [context] + context = event + when :end_element + context = context[1] + else + context << event + end + end + root + end + end + + # An element is an array. The array contains: + # 0 The parent element + # 1 The tag name + # 2 A hash of attributes + # 3..-1 The child elements + # An element is an array of size > 3 + # Text is a String + # PIs are [ :processing_instruction, target, data ] + # Comments are [ :comment, data ] + # DocTypes are DocType structs + # The root is an array with XMLDecls, Text, DocType, Array, Text + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/parsers/xpathparser.rb b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/parsers/xpathparser.rb new file mode 100644 index 0000000..a6d76fd --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/parsers/xpathparser.rb @@ -0,0 +1,739 @@ +# frozen_string_literal: false + +require_relative '../namespace' +require_relative '../xmltokens' + +module REXML + module Parsers + # You don't want to use this class. Really. Use XPath, which is a wrapper + # for this class. Believe me. You don't want to poke around in here. + # There is strange, dark magic at work in this code. Beware. Go back! Go + # back while you still can! + class XPathParser + include XMLTokens + LITERAL = /^'([^']*)'|^"([^"]*)"/u + + def namespaces=( namespaces ) + Functions::namespace_context = namespaces + @namespaces = namespaces + end + + def parse path + path = path.dup + path.gsub!(/([\(\[])\s+/, '\1') # Strip ignorable spaces + path.gsub!( /\s+([\]\)])/, '\1') + parsed = [] + rest = OrExpr(path, parsed) + if rest + unless rest.strip.empty? + raise ParseException.new("Garbage component exists at the end: " + + "<#{rest}>: <#{path}>") + end + end + parsed + end + + def predicate path + parsed = [] + Predicate( "[#{path}]", parsed ) + parsed + end + + def abbreviate(path_or_parsed) + if path_or_parsed.kind_of?(String) + parsed = parse(path_or_parsed) + else + parsed = path_or_parsed + end + components = [] + component = nil + while parsed.size > 0 + op = parsed.shift + case op + when :node + component << "node()" + when :attribute + component = "@" + components << component + when :child + component = "" + components << component + when :descendant_or_self + next_op = parsed[0] + if next_op == :node + parsed.shift + component = "" + components << component + else + component = "descendant-or-self::" + components << component + end + when :self + next_op = parsed[0] + if next_op == :node + parsed.shift + components << "." + else + component = "self::" + components << component + end + when :parent + next_op = parsed[0] + if next_op == :node + parsed.shift + components << ".." + else + component = "parent::" + components << component + end + when :any + component << "*" + when :text + component << "text()" + when :following, :following_sibling, + :ancestor, :ancestor_or_self, :descendant, + :namespace, :preceding, :preceding_sibling + component = op.to_s.tr("_", "-") << "::" + components << component + when :qname + prefix = parsed.shift + name = parsed.shift + component << prefix+":" if prefix.size > 0 + component << name + when :predicate + component << '[' + component << predicate_to_path(parsed.shift) {|x| abbreviate(x)} + component << ']' + when :document + components << "" + when :function + component << parsed.shift + component << "( " + component << predicate_to_path(parsed.shift[0]) {|x| abbreviate(x)} + component << " )" + when :literal + component << quote_literal(parsed.shift) + else + component << "UNKNOWN(" + component << op.inspect + component << ")" + end + end + case components + when [""] + "/" + when ["", ""] + "//" + else + components.join("/") + end + end + + def expand(path_or_parsed) + if path_or_parsed.kind_of?(String) + parsed = parse(path_or_parsed) + else + parsed = path_or_parsed + end + path = "" + document = false + while parsed.size > 0 + op = parsed.shift + case op + when :node + path << "node()" + when :attribute, :child, :following, :following_sibling, + :ancestor, :ancestor_or_self, :descendant, :descendant_or_self, + :namespace, :preceding, :preceding_sibling, :self, :parent + path << "/" unless path.size == 0 + path << op.to_s.tr("_", "-") + path << "::" + when :any + path << "*" + when :qname + prefix = parsed.shift + name = parsed.shift + path << prefix+":" if prefix.size > 0 + path << name + when :predicate + path << '[' + path << predicate_to_path( parsed.shift ) { |x| expand(x) } + path << ']' + when :document + document = true + else + path << "UNKNOWN(" + path << op.inspect + path << ")" + end + end + path = "/"+path if document + path + end + + def predicate_to_path(parsed, &block) + path = "" + case parsed[0] + when :and, :or, :mult, :plus, :minus, :neq, :eq, :lt, :gt, :lteq, :gteq, :div, :mod, :union + op = parsed.shift + case op + when :eq + op = "=" + when :lt + op = "<" + when :gt + op = ">" + when :lteq + op = "<=" + when :gteq + op = ">=" + when :neq + op = "!=" + when :union + op = "|" + end + left = predicate_to_path( parsed.shift, &block ) + right = predicate_to_path( parsed.shift, &block ) + path << left + path << " " + path << op.to_s + path << " " + path << right + when :function + parsed.shift + name = parsed.shift + path << name + path << "(" + parsed.shift.each_with_index do |argument, i| + path << ", " if i > 0 + path << predicate_to_path(argument, &block) + end + path << ")" + when :literal + parsed.shift + path << quote_literal(parsed.shift) + else + path << yield( parsed ) + end + path.squeeze(" ") + end + # For backward compatibility + alias_method :preciate_to_string, :predicate_to_path + + private + def quote_literal( literal ) + case literal + when String + # XPath 1.0 does not support escape characters. + # Assumes literal does not contain both single and double quotes. + if literal.include?("'") + "\"#{literal}\"" + else + "'#{literal}'" + end + else + literal.inspect + end + end + + #LocationPath + # | RelativeLocationPath + # | '/' RelativeLocationPath? + # | '//' RelativeLocationPath + def LocationPath path, parsed + path = path.lstrip + if path[0] == ?/ + parsed << :document + if path[1] == ?/ + parsed << :descendant_or_self + parsed << :node + path = path[2..-1] + else + path = path[1..-1] + end + end + RelativeLocationPath( path, parsed ) if path.size > 0 + end + + #RelativeLocationPath + # | Step + # | (AXIS_NAME '::' | '@' | '') AxisSpecifier + # NodeTest + # Predicate + # | '.' | '..' AbbreviatedStep + # | RelativeLocationPath '/' Step + # | RelativeLocationPath '//' Step + AXIS = /^(ancestor|ancestor-or-self|attribute|child|descendant|descendant-or-self|following|following-sibling|namespace|parent|preceding|preceding-sibling|self)::/ + def RelativeLocationPath path, parsed + loop do + original_path = path + path = path.lstrip + + return original_path if path.empty? + + # (axis or @ or <child::>) nodetest predicate > + # OR > / Step + # (. or ..) > + if path[0] == ?. + if path[1] == ?. + parsed << :parent + parsed << :node + path = path[2..-1] + else + parsed << :self + parsed << :node + path = path[1..-1] + end + else + path_before_axis_specifier = path + parsed_not_abberviated = [] + if path[0] == ?@ + parsed_not_abberviated << :attribute + path = path[1..-1] + # Goto Nodetest + elsif path =~ AXIS + parsed_not_abberviated << $1.tr('-','_').intern + path = $' + # Goto Nodetest + else + parsed_not_abberviated << :child + end + + path_before_node_test = path + path = NodeTest(path, parsed_not_abberviated) + if path == path_before_node_test + return path_before_axis_specifier + end + path = Predicate(path, parsed_not_abberviated) + + parsed.concat(parsed_not_abberviated) + end + + original_path = path + path = path.lstrip + return original_path if path.empty? + + return original_path if path[0] != ?/ + + if path[1] == ?/ + parsed << :descendant_or_self + parsed << :node + path = path[2..-1] + else + path = path[1..-1] + end + end + end + + # Returns a 1-1 map of the nodeset + # The contents of the resulting array are either: + # true/false, if a positive match + # String, if a name match + #NodeTest + # | ('*' | NCNAME ':' '*' | QNAME) NameTest + # | '*' ':' NCNAME NameTest since XPath 2.0 + # | NODE_TYPE '(' ')' NodeType + # | PI '(' LITERAL ')' PI + # | '[' expr ']' Predicate + PREFIX_WILDCARD = /^\*:(#{NCNAME_STR})/u + LOCAL_NAME_WILDCARD = /^(#{NCNAME_STR}):\*/u + QNAME = Namespace::NAMESPLIT + NODE_TYPE = /^(comment|text|node)\(\s*\)/m + PI = /^processing-instruction\(/ + def NodeTest path, parsed + original_path = path + path = path.lstrip + case path + when PREFIX_WILDCARD + prefix = nil + name = $1 + path = $' + parsed << :qname + parsed << prefix + parsed << name + when /^\*/ + path = $' + parsed << :any + when NODE_TYPE + type = $1 + path = $' + parsed << type.tr('-', '_').intern + when PI + path = $' + literal = nil + if path =~ /^\s*\)/ + path = $' + else + path =~ LITERAL + literal = $1 + path = $' + raise ParseException.new("Missing ')' after processing instruction") if path[0] != ?) + path = path[1..-1] + end + parsed << :processing_instruction + parsed << (literal || '') + when LOCAL_NAME_WILDCARD + prefix = $1 + path = $' + parsed << :namespace + parsed << prefix + when QNAME + prefix = $1 + name = $2 + path = $' + prefix = "" unless prefix + parsed << :qname + parsed << prefix + parsed << name + else + path = original_path + end + path + end + + # Filters the supplied nodeset on the predicate(s) + def Predicate path, parsed + original_path = path + path = path.lstrip + return original_path unless path[0] == ?[ + predicates = [] + while path[0] == ?[ + path, expr = get_group(path) + predicates << expr[1..-2] if expr + end + predicates.each{ |pred| + preds = [] + parsed << :predicate + parsed << preds + OrExpr(pred, preds) + } + path + end + + # The following return arrays of true/false, a 1-1 mapping of the + # supplied nodeset, except for axe(), which returns a filtered + # nodeset + + #| OrExpr S 'or' S AndExpr + #| AndExpr + def OrExpr path, parsed + n = [] + rest = AndExpr( path, n ) + if rest != path + while rest =~ /^\s*( or )/ + n = [ :or, n, [] ] + rest = AndExpr( $', n[-1] ) + end + end + if parsed.size == 0 and n.size != 0 + parsed.replace(n) + elsif n.size > 0 + parsed << n + end + rest + end + + #| AndExpr S 'and' S EqualityExpr + #| EqualityExpr + def AndExpr path, parsed + n = [] + rest = EqualityExpr( path, n ) + if rest != path + while rest =~ /^\s*( and )/ + n = [ :and, n, [] ] + rest = EqualityExpr( $', n[-1] ) + end + end + if parsed.size == 0 and n.size != 0 + parsed.replace(n) + elsif n.size > 0 + parsed << n + end + rest + end + + #| EqualityExpr ('=' | '!=') RelationalExpr + #| RelationalExpr + def EqualityExpr path, parsed + n = [] + rest = RelationalExpr( path, n ) + if rest != path + while rest =~ /^\s*(!?=)\s*/ + if $1[0] == ?! + n = [ :neq, n, [] ] + else + n = [ :eq, n, [] ] + end + rest = RelationalExpr( $', n[-1] ) + end + end + if parsed.size == 0 and n.size != 0 + parsed.replace(n) + elsif n.size > 0 + parsed << n + end + rest + end + + #| RelationalExpr ('<' | '>' | '<=' | '>=') AdditiveExpr + #| AdditiveExpr + def RelationalExpr path, parsed + n = [] + rest = AdditiveExpr( path, n ) + if rest != path + while rest =~ /^\s*([<>]=?)\s*/ + if $1[0] == ?< + sym = "lt" + else + sym = "gt" + end + sym << "eq" if $1[-1] == ?= + n = [ sym.intern, n, [] ] + rest = AdditiveExpr( $', n[-1] ) + end + end + if parsed.size == 0 and n.size != 0 + parsed.replace(n) + elsif n.size > 0 + parsed << n + end + rest + end + + #| AdditiveExpr ('+' | '-') MultiplicativeExpr + #| MultiplicativeExpr + def AdditiveExpr path, parsed + n = [] + rest = MultiplicativeExpr( path, n ) + if rest != path + while rest =~ /^\s*(\+|-)\s*/ + if $1[0] == ?+ + n = [ :plus, n, [] ] + else + n = [ :minus, n, [] ] + end + rest = MultiplicativeExpr( $', n[-1] ) + end + end + if parsed.size == 0 and n.size != 0 + parsed.replace(n) + elsif n.size > 0 + parsed << n + end + rest + end + + #| MultiplicativeExpr ('*' | S ('div' | 'mod') S) UnaryExpr + #| UnaryExpr + def MultiplicativeExpr path, parsed + n = [] + rest = UnaryExpr( path, n ) + if rest != path + while rest =~ /^\s*(\*| div | mod )\s*/ + if $1[0] == ?* + n = [ :mult, n, [] ] + elsif $1.include?( "div" ) + n = [ :div, n, [] ] + else + n = [ :mod, n, [] ] + end + rest = UnaryExpr( $', n[-1] ) + end + end + if parsed.size == 0 and n.size != 0 + parsed.replace(n) + elsif n.size > 0 + parsed << n + end + rest + end + + #| '-' UnaryExpr + #| UnionExpr + def UnaryExpr path, parsed + path =~ /^(\-*)/ + path = $' + if $1 and (($1.size % 2) != 0) + mult = -1 + else + mult = 1 + end + parsed << :neg if mult < 0 + + n = [] + path = UnionExpr( path, n ) + parsed.concat( n ) + path + end + + #| UnionExpr '|' PathExpr + #| PathExpr + def UnionExpr path, parsed + n = [] + rest = PathExpr( path, n ) + if rest != path + while rest =~ /^\s*(\|)\s*/ + n = [ :union, n, [] ] + rest = PathExpr( $', n[-1] ) + end + end + if parsed.size == 0 and n.size != 0 + parsed.replace( n ) + elsif n.size > 0 + parsed << n + end + rest + end + + #| LocationPath + #| FilterExpr ('/' | '//') RelativeLocationPath + def PathExpr path, parsed + path = path.lstrip + n = [] + rest = FilterExpr( path, n ) + if rest != path + if rest and rest[0] == ?/ + rest = RelativeLocationPath(rest, n) + parsed.concat(n) + return rest + end + end + rest = LocationPath(rest, n) if rest =~ /\A[\/\.\@\[\w*]/ + parsed.concat(n) + rest + end + + #| FilterExpr Predicate + #| PrimaryExpr + def FilterExpr path, parsed + n = [] + path_before_primary_expr = path + path = PrimaryExpr(path, n) + return path_before_primary_expr if path == path_before_primary_expr + path = Predicate(path, n) + parsed.concat(n) + path + end + + #| VARIABLE_REFERENCE + #| '(' expr ')' + #| LITERAL + #| NUMBER + #| FunctionCall + VARIABLE_REFERENCE = /^\$(#{NAME_STR})/u + NUMBER = /^(\d*\.?\d+)/ + NT = /^comment|text|processing-instruction|node$/ + def PrimaryExpr path, parsed + case path + when VARIABLE_REFERENCE + varname = $1 + path = $' + parsed << :variable + parsed << varname + #arry << @variables[ varname ] + when /^(\w[-\w]*)(?:\()/ + fname = $1 + tmp = $' + return path if fname =~ NT + path = tmp + parsed << :function + parsed << fname + path = FunctionCall(path, parsed) + when NUMBER + varname = $1.nil? ? $2 : $1 + path = $' + parsed << :literal + parsed << (varname.include?('.') ? varname.to_f : varname.to_i) + when LITERAL + varname = $1.nil? ? $2 : $1 + path = $' + parsed << :literal + parsed << varname + when /^\(/ #/ + path, contents = get_group(path) + contents = contents[1..-2] + n = [] + OrExpr( contents, n ) + parsed.concat(n) + end + path + end + + #| FUNCTION_NAME '(' ( expr ( ',' expr )* )? ')' + def FunctionCall rest, parsed + path, arguments = parse_args(rest) + argset = [] + for argument in arguments + args = [] + OrExpr( argument, args ) + argset << args + end + parsed << argset + path + end + + # get_group( '[foo]bar' ) -> ['bar', '[foo]'] + def get_group string + ind = 0 + depth = 0 + st = string[0,1] + en = (st == "(" ? ")" : "]") + begin + case string[ind,1] + when st + depth += 1 + when en + depth -= 1 + end + ind += 1 + end while depth > 0 and ind < string.length + return nil unless depth==0 + [string[ind..-1], string[0..ind-1]] + end + + def parse_args( string ) + arguments = [] + ind = 0 + inquot = false + inapos = false + depth = 1 + begin + case string[ind] + when ?" + inquot = !inquot unless inapos + when ?' + inapos = !inapos unless inquot + else + unless inquot or inapos + case string[ind] + when ?( + depth += 1 + if depth == 1 + string = string[1..-1] + ind -= 1 + end + when ?) + depth -= 1 + if depth == 0 + s = string[0,ind].strip + arguments << s unless s == "" + string = string[ind+1..-1] + end + when ?, + if depth == 1 + s = string[0,ind].strip + arguments << s unless s == "" + string = string[ind+1..-1] + ind = -1 + end + end + end + end + ind += 1 + end while depth > 0 and ind < string.length + return nil unless depth==0 + [string,arguments] + end + end + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/quickpath.rb b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/quickpath.rb new file mode 100644 index 0000000..cded06f --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/quickpath.rb @@ -0,0 +1,267 @@ +# frozen_string_literal: false +require_relative 'functions' +require_relative 'xmltokens' + +module REXML + class QuickPath + include Functions + include XMLTokens + + # A base Hash object to be used when initializing a + # default empty namespaces set. + EMPTY_HASH = {} + + def QuickPath::first element, path, namespaces=EMPTY_HASH + match(element, path, namespaces)[0] + end + + def QuickPath::each element, path, namespaces=EMPTY_HASH, &block + path = "*" unless path + match(element, path, namespaces).each( &block ) + end + + def QuickPath::match element, path, namespaces=EMPTY_HASH + raise "nil is not a valid xpath" unless path + results = nil + Functions::namespace_context = namespaces + case path + when /^\/([^\/]|$)/u + # match on root + path = path[1..-1] + return [element.root.parent] if path == '' + results = filter([element.root], path) + when /^[-\w]*::/u + results = filter([element], path) + when /^\*/u + results = filter(element.to_a, path) + when /^[\[!\w:]/u + # match on child + children = element.to_a + results = filter(children, path) + else + results = filter([element], path) + end + results + end + + # Given an array of nodes it filters the array based on the path. The + # result is that when this method returns, the array will contain elements + # which match the path + def QuickPath::filter elements, path + return elements if path.nil? or path == '' or elements.size == 0 + case path + when /^\/\//u # Descendant + axe( elements, "descendant-or-self", $' ) + when /^\/?\b(\w[-\w]*)\b::/u # Axe + axe( elements, $1, $' ) + when /^\/(?=\b([:!\w][-\.\w]*:)?[-!\*\.\w]*\b([^:(]|$)|\*)/u # Child + rest = $' + results = [] + elements.each do |element| + results |= filter( element.to_a, rest ) + end + results + when /^\/?(\w[-\w]*)\(/u # / Function + function( elements, $1, $' ) + when Namespace::NAMESPLIT # Element name + name = $2 + ns = $1 + rest = $' + elements.delete_if do |element| + !(element.kind_of? Element and + (element.expanded_name == name or + (element.name == name and + element.namespace == Functions.namespace_context[ns]))) + end + filter( elements, rest ) + when /^\/\[/u + matches = [] + elements.each do |element| + matches |= predicate( element.to_a, path[1..-1] ) if element.kind_of? Element + end + matches + when /^\[/u # Predicate + predicate( elements, path ) + when /^\/?\.\.\./u # Ancestor + axe( elements, "ancestor", $' ) + when /^\/?\.\./u # Parent + filter( elements.collect{|e|e.parent}, $' ) + when /^\/?\./u # Self + filter( elements, $' ) + when /^\*/u # Any + results = [] + elements.each do |element| + results |= filter( [element], $' ) if element.kind_of? Element + #if element.kind_of? Element + # children = element.to_a + # children.delete_if { |child| !child.kind_of?(Element) } + # results |= filter( children, $' ) + #end + end + results + else + [] + end + end + + def QuickPath::axe( elements, axe_name, rest ) + matches = [] + matches = filter( elements.dup, rest ) if axe_name =~ /-or-self$/u + case axe_name + when /^descendant/u + elements.each do |element| + matches |= filter( element.to_a, "descendant-or-self::#{rest}" ) if element.kind_of? Element + end + when /^ancestor/u + elements.each do |element| + while element.parent + matches << element.parent + element = element.parent + end + end + matches = filter( matches, rest ) + when "self" + matches = filter( elements, rest ) + when "child" + elements.each do |element| + matches |= filter( element.to_a, rest ) if element.kind_of? Element + end + when "attribute" + elements.each do |element| + matches << element.attributes[ rest ] if element.kind_of? Element + end + when "parent" + matches = filter(elements.collect{|element| element.parent}.uniq, rest) + when "following-sibling" + matches = filter(elements.collect{|element| element.next_sibling}.uniq, + rest) + when "previous-sibling" + matches = filter(elements.collect{|element| + element.previous_sibling}.uniq, rest ) + end + matches.uniq + end + + OPERAND_ = '((?=(?:(?!and|or).)*[^\s<>=])[^\s<>=]+)' + # A predicate filters a node-set with respect to an axis to produce a + # new node-set. For each node in the node-set to be filtered, the + # PredicateExpr is evaluated with that node as the context node, with + # the number of nodes in the node-set as the context size, and with the + # proximity position of the node in the node-set with respect to the + # axis as the context position; if PredicateExpr evaluates to true for + # that node, the node is included in the new node-set; otherwise, it is + # not included. + # + # A PredicateExpr is evaluated by evaluating the Expr and converting + # the result to a boolean. If the result is a number, the result will + # be converted to true if the number is equal to the context position + # and will be converted to false otherwise; if the result is not a + # number, then the result will be converted as if by a call to the + # boolean function. Thus a location path para[3] is equivalent to + # para[position()=3]. + def QuickPath::predicate( elements, path ) + ind = 1 + bcount = 1 + while bcount > 0 + bcount += 1 if path[ind] == ?[ + bcount -= 1 if path[ind] == ?] + ind += 1 + end + ind -= 1 + predicate = path[1..ind-1] + rest = path[ind+1..-1] + + # have to change 'a [=<>] b [=<>] c' into 'a [=<>] b and b [=<>] c' + # + predicate.gsub!( + /#{OPERAND_}\s*([<>=])\s*#{OPERAND_}\s*([<>=])\s*#{OPERAND_}/u, + '\1 \2 \3 and \3 \4 \5' ) + # Let's do some Ruby trickery to avoid some work: + predicate.gsub!( /&/u, "&&" ) + predicate.gsub!( /=/u, "==" ) + predicate.gsub!( /@(\w[-\w.]*)/u, 'attribute("\1")' ) + predicate.gsub!( /\bmod\b/u, "%" ) + predicate.gsub!( /\b(\w[-\w.]*\()/u ) { + fname = $1 + fname.gsub( /-/u, "_" ) + } + + Functions.pair = [ 0, elements.size ] + results = [] + elements.each do |element| + Functions.pair[0] += 1 + Functions.node = element + res = eval( predicate ) + case res + when true + results << element + when Integer + results << element if Functions.pair[0] == res + when String + results << element + end + end + filter( results, rest ) + end + + def QuickPath::attribute( name ) + Functions.node.attributes[name] if Functions.node.kind_of? Element + end + + def QuickPath::name() + Functions.node.name if Functions.node.kind_of? Element + end + + def QuickPath::method_missing( id, *args ) + begin + Functions.send( id.id2name, *args ) + rescue Exception + raise "METHOD: #{id.id2name}(#{args.join ', '})\n#{$!.message}" + end + end + + def QuickPath::function( elements, fname, rest ) + args = parse_args( elements, rest ) + Functions.pair = [0, elements.size] + results = [] + elements.each do |element| + Functions.pair[0] += 1 + Functions.node = element + res = Functions.send( fname, *args ) + case res + when true + results << element + when Integer + results << element if Functions.pair[0] == res + end + end + results + end + + def QuickPath::parse_args( element, string ) + # /.*?(?:\)|,)/ + arguments = [] + buffer = "" + while string and string != "" + c = string[0] + string.sub!(/^./u, "") + case c + when ?, + # if depth = 1, then we start a new argument + arguments << evaluate( buffer ) + #arguments << evaluate( string[0..count] ) + when ?( + # start a new method call + function( element, buffer, string ) + buffer = "" + when ?) + # close the method call and return arguments + return arguments + else + buffer << c + end + end + "" + end + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/rexml.rb b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/rexml.rb new file mode 100644 index 0000000..226e198 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/rexml.rb @@ -0,0 +1,39 @@ +# -*- coding: utf-8 -*- +# frozen_string_literal: false +# +# \Module \REXML provides classes and methods for parsing, +# editing, and generating XML. +# +# == Implementation +# +# \REXML: +# - Is pure Ruby. +# - Provides tree, stream, SAX2, pull, and lightweight APIs. +# - Conforms to {XML version 1.0}[https://www.w3.org/TR/REC-xml/]. +# - Fully implements {XPath version 1.0}[http://www.w3c.org/tr/xpath]. +# - Is {non-validating}[https://www.w3.org/TR/xml/]. +# - Passes 100% of the non-validating {Oasis tests}[http://www.oasis-open.org/committees/xml-conformance/xml-test-suite.shtml]. +# +# == In a Hurry? +# +# If you're somewhat familiar with XML +# and have a particular task in mind, +# you may want to see {the tasks pages}[doc/rexml/tasks/tocs/master_toc_rdoc.html]. +# +# == API +# +# Among the most important classes for using \REXML are: +# - REXML::Document. +# - REXML::Element. +# +# There's also an {REXML tutorial}[doc/rexml/tutorial_rdoc.html]. +# +module REXML + COPYRIGHT = "Copyright © 2001-2008 Sean Russell <ser@germane-software.com>" + DATE = "2008/019" + VERSION = "3.4.4" + REVISION = "" + + Copyright = COPYRIGHT + Version = VERSION +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/sax2listener.rb b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/sax2listener.rb new file mode 100644 index 0000000..5afdc80 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/sax2listener.rb @@ -0,0 +1,98 @@ +# frozen_string_literal: false +module REXML + # A template for stream parser listeners. + # Note that the declarations (attlistdecl, elementdecl, etc) are trivially + # processed; REXML doesn't yet handle doctype entity declarations, so you + # have to parse them out yourself. + # === Missing methods from SAX2 + # ignorable_whitespace + # === Methods extending SAX2 + # +WARNING+ + # These methods are certainly going to change, until DTDs are fully + # supported. Be aware of this. + # start_document + # end_document + # doctype + # elementdecl + # attlistdecl + # entitydecl + # notationdecl + # cdata + # xmldecl + # comment + module SAX2Listener + def start_document + end + def end_document + end + def start_prefix_mapping prefix, uri + end + def end_prefix_mapping prefix + end + def start_element uri, localname, qname, attributes + end + def end_element uri, localname, qname + end + def characters text + end + def processing_instruction target, data + end + # Handles a doctype declaration. Any attributes of the doctype which are + # not supplied will be nil. # EG, <!DOCTYPE me PUBLIC "foo" "bar"> + # @p name the name of the doctype; EG, "me" + # @p pub_sys "PUBLIC", "SYSTEM", or nil. EG, "PUBLIC" + # @p long_name the supplied long name, or nil. EG, "foo" + # @p uri the uri of the doctype, or nil. EG, "bar" + def doctype name, pub_sys, long_name, uri + end + # If a doctype includes an ATTLIST declaration, it will cause this + # method to be called. The content is the declaration itself, unparsed. + # EG, <!ATTLIST el attr CDATA #REQUIRED> will come to this method as "el + # attr CDATA #REQUIRED". This is the same for all of the .*decl + # methods. + def attlistdecl(element, pairs, contents) + end + # <!ELEMENT ...> + def elementdecl content + end + # <!ENTITY ...> + # The argument passed to this method is an array of the entity + # declaration. It can be in a number of formats, but in general it + # returns (example, result): + # <!ENTITY % YN '"Yes"'> + # ["%", "YN", "\"Yes\""] + # <!ENTITY % YN 'Yes'> + # ["%", "YN", "Yes"] + # <!ENTITY WhatHeSaid "He said %YN;"> + # ["WhatHeSaid", "He said %YN;"] + # <!ENTITY open-hatch SYSTEM "http://www.textuality.com/boilerplate/OpenHatch.xml"> + # ["open-hatch", "SYSTEM", "http://www.textuality.com/boilerplate/OpenHatch.xml"] + # <!ENTITY open-hatch PUBLIC "-//Textuality//TEXT Standard open-hatch boilerplate//EN" "http://www.textuality.com/boilerplate/OpenHatch.xml"> + # ["open-hatch", "PUBLIC", "-//Textuality//TEXT Standard open-hatch boilerplate//EN", "http://www.textuality.com/boilerplate/OpenHatch.xml"] + # <!ENTITY hatch-pic SYSTEM "../grafix/OpenHatch.gif" NDATA gif> + # ["hatch-pic", "SYSTEM", "../grafix/OpenHatch.gif", "NDATA", "gif"] + def entitydecl declaration + end + # <!NOTATION ...> + def notationdecl name, public_or_system, public_id, system_id + end + # Called when <![CDATA[ ... ]]> is encountered in a document. + # @p content "..." + def cdata content + end + # Called when an XML PI is encountered in the document. + # EG: <?xml version="1.0" encoding="utf"?> + # @p version the version attribute value. EG, "1.0" + # @p encoding the encoding attribute value, or nil. EG, "utf" + # @p standalone the standalone attribute value, or nil. EG, nil + # @p spaced the declaration is followed by a line break + def xmldecl version, encoding, standalone + end + # Called when a comment is encountered. + # @p comment The content of the comment + def comment comment + end + def progress position + end + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/security.rb b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/security.rb new file mode 100644 index 0000000..e8e8c6b --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/security.rb @@ -0,0 +1,28 @@ +# frozen_string_literal: false +module REXML + module Security + @@entity_expansion_limit = 10_000 + + # Set the entity expansion limit. By default the limit is set to 10000. + def self.entity_expansion_limit=( val ) + @@entity_expansion_limit = val + end + + # Get the entity expansion limit. By default the limit is set to 10000. + def self.entity_expansion_limit + @@entity_expansion_limit + end + + @@entity_expansion_text_limit = 10_240 + + # Set the entity expansion limit. By default the limit is set to 10240. + def self.entity_expansion_text_limit=( val ) + @@entity_expansion_text_limit = val + end + + # Get the entity expansion limit. By default the limit is set to 10240. + def self.entity_expansion_text_limit + @@entity_expansion_text_limit + end + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/source.rb b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/source.rb new file mode 100644 index 0000000..8b8ba0d --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/source.rb @@ -0,0 +1,388 @@ +# coding: US-ASCII +# frozen_string_literal: false + +require "stringio" +require "strscan" + +require_relative 'encoding' + +module REXML + if StringScanner::Version < "1.0.0" + module StringScannerCheckScanString + refine StringScanner do + def check(pattern) + pattern = /#{Regexp.escape(pattern)}/ if pattern.is_a?(String) + super(pattern) + end + + def scan(pattern) + pattern = /#{Regexp.escape(pattern)}/ if pattern.is_a?(String) + super(pattern) + end + + def match?(pattern) + pattern = /#{Regexp.escape(pattern)}/ if pattern.is_a?(String) + super(pattern) + end + + def skip(pattern) + pattern = /#{Regexp.escape(pattern)}/ if pattern.is_a?(String) + super(pattern) + end + end + end + using StringScannerCheckScanString + end + + # Generates Source-s. USE THIS CLASS. + class SourceFactory + # Generates a Source object + # @param arg Either a String, or an IO + # @return a Source, or nil if a bad argument was given + def SourceFactory::create_from(arg) + if arg.respond_to? :read and + arg.respond_to? :readline and + arg.respond_to? :nil? and + arg.respond_to? :eof? + IOSource.new(arg) + elsif arg.respond_to? :to_str + IOSource.new(StringIO.new(arg)) + elsif arg.kind_of? Source + arg + else + raise "#{arg.class} is not a valid input stream. It must walk \n"+ + "like either a String, an IO, or a Source." + end + end + end + + # A Source can be searched for patterns, and wraps buffers and other + # objects and provides consumption of text + class Source + include Encoding + # The line number of the last consumed text + attr_reader :line + attr_reader :encoding + + module Private + SPACES_PATTERN = /\s+/um + SCANNER_RESET_SIZE = 100000 + PRE_DEFINED_TERM_PATTERNS = {} + pre_defined_terms = ["'", '"', "<", "]]>", "?>"] + if StringScanner::Version < "3.1.1" + pre_defined_terms.each do |term| + PRE_DEFINED_TERM_PATTERNS[term] = /#{Regexp.escape(term)}/ + end + else + pre_defined_terms.each do |term| + PRE_DEFINED_TERM_PATTERNS[term] = term + end + end + end + private_constant :Private + + # Constructor + # @param arg must be a String, and should be a valid XML document + # @param encoding if non-null, sets the encoding of the source to this + # value, overriding all encoding detection + def initialize(arg, encoding=nil) + @orig = arg + @scanner = StringScanner.new(@orig) + if encoding + self.encoding = encoding + else + detect_encoding + end + @line = 0 + @encoded_terms = {} + end + + # The current buffer (what we're going to read next) + def buffer + @scanner.rest + end + + def drop_parsed_content + if @scanner.pos > Private::SCANNER_RESET_SIZE + @scanner.string = @scanner.rest + end + end + + def buffer_encoding=(encoding) + @scanner.string.force_encoding(encoding) + end + + # Inherited from Encoding + # Overridden to support optimized en/decoding + def encoding=(enc) + return unless super + encoding_updated + end + + def read(term = nil) + end + + def read_until(term) + pattern = Private::PRE_DEFINED_TERM_PATTERNS[term] || /#{Regexp.escape(term)}/ + data = @scanner.scan_until(pattern) + unless data + data = @scanner.rest + @scanner.pos = @scanner.string.bytesize + end + data + end + + def ensure_buffer + end + + def match(pattern, cons=false) + if cons + @scanner.scan(pattern).nil? ? nil : @scanner + else + @scanner.check(pattern).nil? ? nil : @scanner + end + end + + def match?(pattern, cons=false) + if cons + !@scanner.skip(pattern).nil? + else + !@scanner.match?(pattern).nil? + end + end + + def skip_spaces + @scanner.skip(Private::SPACES_PATTERN) ? true : false + end + + def position + @scanner.pos + end + + def position=(pos) + @scanner.pos = pos + end + + def peek_byte + @scanner.peek_byte + end + + def scan_byte + @scanner.scan_byte + end + + # @return true if the Source is exhausted + def empty? + @scanner.eos? + end + + # @return the current line in the source + def current_line + lines = @orig.split + res = lines.grep @scanner.rest[0..30] + res = res[-1] if res.kind_of? Array + lines.index( res ) if res + end + + private + + def detect_encoding + scanner_encoding = @scanner.rest.encoding + detected_encoding = "UTF-8" + begin + @scanner.string.force_encoding("ASCII-8BIT") + if @scanner.scan(/\xfe\xff/n) + detected_encoding = "UTF-16BE" + elsif @scanner.scan(/\xff\xfe/n) + detected_encoding = "UTF-16LE" + elsif @scanner.scan(/\xef\xbb\xbf/n) + detected_encoding = "UTF-8" + end + ensure + @scanner.string.force_encoding(scanner_encoding) + end + self.encoding = detected_encoding + end + + def encoding_updated + if @encoding != 'UTF-8' + @scanner.string = decode(@scanner.rest) + @to_utf = true + else + @to_utf = false + @scanner.string.force_encoding(::Encoding::UTF_8) + end + end + end + + # A Source that wraps an IO. See the Source class for method + # documentation + class IOSource < Source + #attr_reader :block_size + + # block_size has been deprecated + def initialize(arg, block_size=500, encoding=nil) + @er_source = @source = arg + @to_utf = false + @pending_buffer = nil + + if encoding + super("", encoding) + else + super(@source.read(3) || "") + end + + if !@to_utf and + @orig.respond_to?(:force_encoding) and + @source.respond_to?(:external_encoding) and + @source.external_encoding != ::Encoding::UTF_8 + @force_utf8 = true + else + @force_utf8 = false + end + end + + def read(term = nil, min_bytes = 1) + term = encode(term) if term + begin + str = readline(term) + @scanner << str + read_bytes = str.bytesize + begin + while read_bytes < min_bytes + str = readline(term) + @scanner << str + read_bytes += str.bytesize + end + rescue IOError + end + true + rescue Exception, NameError + @source = nil + false + end + end + + def read_until(term) + pattern = Private::PRE_DEFINED_TERM_PATTERNS[term] || /#{Regexp.escape(term)}/ + term = @encoded_terms[term] ||= encode(term) + until str = @scanner.scan_until(pattern) + break if @source.nil? + break if @source.eof? + @scanner << readline(term) + end + if str + read if @scanner.eos? and @source and !@source.eof? + str + else + rest = @scanner.rest + @scanner.pos = @scanner.string.bytesize + rest + end + end + + def ensure_buffer + read if @scanner.eos? && @source + end + + def match( pattern, cons=false ) + # To avoid performance issue, we need to increase bytes to read per scan + min_bytes = 1 + while true + if cons + md = @scanner.scan(pattern) + else + md = @scanner.check(pattern) + end + break if md + return nil if pattern.is_a?(String) + return nil if @source.nil? + return nil unless read(nil, min_bytes) + min_bytes *= 2 + end + + md.nil? ? nil : @scanner + end + + def match?( pattern, cons=false ) + # To avoid performance issue, we need to increase bytes to read per scan + min_bytes = 1 + while true + if cons + n_matched_bytes = @scanner.skip(pattern) + else + n_matched_bytes = @scanner.match?(pattern) + end + return true if n_matched_bytes + return false if pattern.is_a?(String) + return false if @source.nil? + return false unless read(nil, min_bytes) + min_bytes *= 2 + end + end + + def empty? + super and ( @source.nil? || @source.eof? ) + end + + # @return the current line in the source + def current_line + begin + pos = @er_source.pos # The byte position in the source + lineno = @er_source.lineno # The XML < position in the source + @er_source.rewind + line = 0 # The \r\n position in the source + begin + while @er_source.pos < pos + @er_source.readline + line += 1 + end + rescue + end + @er_source.seek(pos) + rescue IOError, SystemCallError + pos = -1 + line = -1 + end + [pos, lineno, line] + end + + private + def readline(term = nil) + if @pending_buffer + begin + str = @source.readline(term || @line_break) + rescue IOError + end + if str.nil? + str = @pending_buffer + else + str = @pending_buffer + str + end + @pending_buffer = nil + else + str = @source.readline(term || @line_break) + end + return nil if str.nil? + + if @to_utf + decode(str) + else + str.force_encoding(::Encoding::UTF_8) if @force_utf8 + str + end + end + + def encoding_updated + case @encoding + when "UTF-16BE", "UTF-16LE" + @source.binmode + @source.set_encoding(@encoding, @encoding) + end + @line_break = encode(">") + @pending_buffer, @scanner.string = @scanner.rest, "" + @pending_buffer.force_encoding(@encoding) + super + end + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/streamlistener.rb b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/streamlistener.rb new file mode 100644 index 0000000..30c8945 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/streamlistener.rb @@ -0,0 +1,93 @@ +# frozen_string_literal: false +module REXML + # A template for stream parser listeners. + # Note that the declarations (attlistdecl, elementdecl, etc) are trivially + # processed; REXML doesn't yet handle doctype entity declarations, so you + # have to parse them out yourself. + module StreamListener + # Called when a tag is encountered. + # @p name the tag name + # @p attrs an array of arrays of attribute/value pairs, suitable for + # use with assoc or rassoc. IE, <tag attr1="value1" attr2="value2"> + # will result in + # tag_start( "tag", # [["attr1","value1"],["attr2","value2"]]) + def tag_start name, attrs + end + # Called when the end tag is reached. In the case of <tag/>, tag_end + # will be called immediately after tag_start + # @p the name of the tag + def tag_end name + end + # Called when text is encountered in the document + # @p text the text content. + def text text + end + # Called when an instruction is encountered. EG: <?xsl sheet='foo'?> + # @p name the instruction name; in the example, "xsl" + # @p instruction the rest of the instruction. In the example, + # "sheet='foo'" + def instruction name, instruction + end + # Called when a comment is encountered. + # @p comment The content of the comment + def comment comment + end + # Handles a doctype declaration. Any attributes of the doctype which are + # not supplied will be nil. # EG, <!DOCTYPE me PUBLIC "foo" "bar"> + # @p name the name of the doctype; EG, "me" + # @p pub_sys "PUBLIC", "SYSTEM", or nil. EG, "PUBLIC" + # @p long_name the supplied long name, or nil. EG, "foo" + # @p uri the uri of the doctype, or nil. EG, "bar" + def doctype name, pub_sys, long_name, uri + end + # Called when the doctype is done + def doctype_end + end + # If a doctype includes an ATTLIST declaration, it will cause this + # method to be called. The content is the declaration itself, unparsed. + # EG, <!ATTLIST el attr CDATA #REQUIRED> will come to this method as "el + # attr CDATA #REQUIRED". This is the same for all of the .*decl + # methods. + def attlistdecl element_name, attributes, raw_content + end + # <!ELEMENT ...> + def elementdecl content + end + # <!ENTITY ...> + # The argument passed to this method is an array of the entity + # declaration. It can be in a number of formats, but in general it + # returns (example, result): + # <!ENTITY % YN '"Yes"'> + # ["YN", "\"Yes\"", "%"] + # <!ENTITY % YN 'Yes'> + # ["YN", "Yes", "%"] + # <!ENTITY WhatHeSaid "He said %YN;"> + # ["WhatHeSaid", "He said %YN;"] + # <!ENTITY open-hatch SYSTEM "http://www.textuality.com/boilerplate/OpenHatch.xml"> + # ["open-hatch", "SYSTEM", "http://www.textuality.com/boilerplate/OpenHatch.xml"] + # <!ENTITY open-hatch PUBLIC "-//Textuality//TEXT Standard open-hatch boilerplate//EN" "http://www.textuality.com/boilerplate/OpenHatch.xml"> + # ["open-hatch", "PUBLIC", "-//Textuality//TEXT Standard open-hatch boilerplate//EN", "http://www.textuality.com/boilerplate/OpenHatch.xml"] + # <!ENTITY hatch-pic SYSTEM "../grafix/OpenHatch.gif" NDATA gif> + # ["hatch-pic", "SYSTEM", "../grafix/OpenHatch.gif", "gif"] + def entitydecl content + end + # <!NOTATION ...> + def notationdecl content + end + # Called when %foo; is encountered in a doctype declaration. + # @p content "foo" + def entity content + end + # Called when <![CDATA[ ... ]]> is encountered in a document. + # @p content "..." + def cdata content + end + # Called when an XML PI is encountered in the document. + # EG: <?xml version="1.0" encoding="utf"?> + # @p version the version attribute value. EG, "1.0" + # @p encoding the encoding attribute value, or nil. EG, "utf" + # @p standalone the standalone attribute value, or nil. EG, nil + def xmldecl version, encoding, standalone + end + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/text.rb b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/text.rb new file mode 100644 index 0000000..8d5281c --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/text.rb @@ -0,0 +1,420 @@ +# frozen_string_literal: true +require_relative 'security' +require_relative 'entity' +require_relative 'doctype' +require_relative 'child' +require_relative 'doctype' +require_relative 'parseexception' + +module REXML + # Represents text nodes in an XML document + class Text < Child + include Comparable + # The order in which the substitutions occur + SPECIALS = [ /&(?!#?[\w-]+;)/u, /</u, />/u, /"/u, /'/u, /\r/u ] + SUBSTITUTES = ['&', '<', '>', '"', ''', ' '] + # Characters which are substituted in written strings + SLAICEPS = [ '<', '>', '"', "'", '&' ] + SETUTITSBUS = [ /</u, />/u, /"/u, /'/u, /&/u ] + + # If +raw+ is true, then REXML leaves the value alone + attr_accessor :raw + + NEEDS_A_SECOND_CHECK = /(<|&((#{Entity::NAME});|(#0*((?:\d+)|(?:x[a-fA-F0-9]+)));)?)/um + NUMERICENTITY = /�*((?:\d+)|(?:x[a-fA-F0-9]+));/ + VALID_CHAR = [ + 0x9, 0xA, 0xD, + (0x20..0xD7FF), + (0xE000..0xFFFD), + (0x10000..0x10FFFF) + ] + + VALID_XML_CHARS = Regexp.new('^['+ + VALID_CHAR.map { |item| + case item + when Integer + [item].pack('U').force_encoding('utf-8') + when Range + [item.first, '-'.ord, item.last].pack('UUU').force_encoding('utf-8') + end + }.join + + ']*$') + + # Constructor + # +arg+ if a String, the content is set to the String. If a Text, + # the object is shallowly cloned. + # + # +respect_whitespace+ (boolean, false) if true, whitespace is + # respected + # + # +parent+ (nil) if this is a Parent object, the parent + # will be set to this. + # + # +raw+ (nil) This argument can be given three values. + # If true, then the value of used to construct this object is expected to + # contain no unescaped XML markup, and REXML will not change the text. If + # this value is false, the string may contain any characters, and REXML will + # escape any and all defined entities whose values are contained in the + # text. If this value is nil (the default), then the raw value of the + # parent will be used as the raw value for this node. If there is no raw + # value for the parent, and no value is supplied, the default is false. + # Use this field if you have entities defined for some text, and you don't + # want REXML to escape that text in output. + # Text.new( "<&", false, nil, false ) #-> "<&" + # Text.new( "<&", false, nil, false ) #-> "&lt;&amp;" + # Text.new( "<&", false, nil, true ) #-> Parse exception + # Text.new( "<&", false, nil, true ) #-> "<&" + # # Assume that the entity "s" is defined to be "sean" + # # and that the entity "r" is defined to be "russell" + # Text.new( "sean russell" ) #-> "&s; &r;" + # Text.new( "sean russell", false, nil, true ) #-> "sean russell" + # + # +entity_filter+ (nil) This can be an array of entities to match in the + # supplied text. This argument is only useful if +raw+ is set to false. + # Text.new( "sean russell", false, nil, false, ["s"] ) #-> "&s; russell" + # Text.new( "sean russell", false, nil, true, ["s"] ) #-> "sean russell" + # In the last example, the +entity_filter+ argument is ignored. + # + # +illegal+ INTERNAL USE ONLY + def initialize(arg, respect_whitespace=false, parent=nil, raw=nil, + entity_filter=nil, illegal=NEEDS_A_SECOND_CHECK ) + + @raw = false + @parent = nil + @entity_filter = nil + + if parent + super( parent ) + @raw = parent.raw + end + + if arg.kind_of? String + @string = arg.dup + elsif arg.kind_of? Text + @string = arg.instance_variable_get(:@string).dup + @raw = arg.raw + @entity_filter = arg.instance_variable_get(:@entity_filter) + else + raise "Illegal argument of type #{arg.type} for Text constructor (#{arg})" + end + + @string.squeeze!(" \n\t") unless respect_whitespace + @string.gsub!(/\r\n?/, "\n") + @raw = raw unless raw.nil? + @entity_filter = entity_filter if entity_filter + clear_cache + + Text.check(@string, illegal) if @raw + end + + def parent= parent + super(parent) + Text.check(@string, NEEDS_A_SECOND_CHECK) if @raw and @parent + end + + # check for illegal characters + def Text.check string, pattern, doctype = nil + + # illegal anywhere + if !string.match?(VALID_XML_CHARS) + string.chars.each do |c| + case c.ord + when *VALID_CHAR + else + raise "Illegal character #{c.inspect} in raw string #{string.inspect}" + end + end + end + + pos = 0 + while (index = string.index(/<|&/, pos)) + if string[index] == "<" + raise "Illegal character \"#{string[index]}\" in raw string #{string.inspect}" + end + + unless (end_index = string.index(/[^\s];/, index + 1)) + raise "Illegal character \"#{string[index]}\" in raw string #{string.inspect}" + end + + value = string[(index + 1)..end_index] + if /\s/.match?(value) + raise "Illegal character \"#{string[index]}\" in raw string #{string.inspect}" + end + + if value[0] == "#" + character_reference = value[1..-1] + + unless (/\A(\d+|x[0-9a-fA-F]+)\z/.match?(character_reference)) + if character_reference[0] == "x" || character_reference[-1] == "x" + raise "Illegal character \"#{string[index]}\" in raw string #{string.inspect}" + else + raise "Illegal character #{string.inspect} in raw string #{string.inspect}" + end + end + + case (character_reference[0] == "x" ? character_reference[1..-1].to_i(16) : character_reference[0..-1].to_i) + when *VALID_CHAR + else + raise "Illegal character #{string.inspect} in raw string #{string.inspect}" + end + elsif !(/\A#{Entity::NAME}\z/um.match?(value)) + raise "Illegal character \"#{string[index]}\" in raw string #{string.inspect}" + end + + pos = end_index + 1 + end + + string + end + + def node_type + :text + end + + def empty? + @string.size==0 + end + + + def clone + Text.new(self, true) + end + + + # Appends text to this text node. The text is appended in the +raw+ mode + # of this text node. + # + # +returns+ the text itself to enable method chain like + # 'text << "XXX" << "YYY"'. + def <<( to_append ) + @string << to_append.gsub( /\r\n?/, "\n" ) + clear_cache + self + end + + + # +other+ a String or a Text + # +returns+ the result of (to_s <=> arg.to_s) + def <=>( other ) + to_s() <=> other.to_s + end + + def doctype + @parent&.document&.doctype + end + + REFERENCE = /#{Entity::REFERENCE}/ + # Returns the string value of this text node. This string is always + # escaped, meaning that it is a valid XML text node string, and all + # entities that can be escaped, have been inserted. This method respects + # the entity filter set in the constructor. + # + # # Assume that the entity "s" is defined to be "sean", and that the + # # entity "r" is defined to be "russell" + # t = Text.new( "< & sean russell", false, nil, false, ['s'] ) + # t.to_s #-> "< & &s; russell" + # t = Text.new( "< & &s; russell", false, nil, false ) + # t.to_s #-> "< & &s; russell" + # u = Text.new( "sean russell", false, nil, true ) + # u.to_s #-> "sean russell" + def to_s + return @string if @raw + @normalized ||= Text::normalize( @string, doctype, @entity_filter ) + end + + def inspect + @string.inspect + end + + # Returns the string value of this text. This is the text without + # entities, as it might be used programmatically, or printed to the + # console. This ignores the 'raw' attribute setting, and any + # entity_filter. + # + # # Assume that the entity "s" is defined to be "sean", and that the + # # entity "r" is defined to be "russell" + # t = Text.new( "< & sean russell", false, nil, false, ['s'] ) + # t.value #-> "< & sean russell" + # t = Text.new( "< & &s; russell", false, nil, false ) + # t.value #-> "< & sean russell" + # u = Text.new( "sean russell", false, nil, true ) + # u.value #-> "sean russell" + def value + @unnormalized ||= Text::unnormalize(@string, doctype, + entity_expansion_text_limit: document&.entity_expansion_text_limit) + end + + # Sets the contents of this text node. This expects the text to be + # unnormalized. It returns self. + # + # e = Element.new( "a" ) + # e.add_text( "foo" ) # <a>foo</a> + # e[0].value = "bar" # <a>bar</a> + # e[0].value = "<a>" # <a><a></a> + def value=( val ) + @string = val.gsub( /\r\n?/, "\n" ) + clear_cache + @raw = false + end + + def wrap(string, width, addnewline=false) + # Recursively wrap string at width. + return string if string.length <= width + place = string.rindex(' ', width) # Position in string with last ' ' before cutoff + if addnewline + "\n" + string[0,place] + "\n" + wrap(string[place+1..-1], width) + else + string[0,place] + "\n" + wrap(string[place+1..-1], width) + end + end + + def indent_text(string, level=1, style="\t", indentfirstline=true) + Kernel.warn("#{self.class.name}#indent_text is deprecated. See REXML::Formatters", uplevel: 1) + return string if level < 0 + + new_string = +'' + string.each_line { |line| + indent_string = style * level + new_line = (indent_string + line).sub(/[\s]+$/,'') + new_string << new_line + } + new_string.strip! unless indentfirstline + new_string + end + + # == DEPRECATED + # See REXML::Formatters + # + def write( writer, indent=-1, transitive=false, ie_hack=false ) + Kernel.warn("#{self.class.name}#write is deprecated. See REXML::Formatters", uplevel: 1) + formatter = if indent > -1 + REXML::Formatters::Pretty.new( indent ) + else + REXML::Formatters::Default.new + end + formatter.write( self, writer ) + end + + # FIXME + # This probably won't work properly + def xpath + @parent.xpath + "/text()" + end + + # Writes out text, substituting special characters beforehand. + # +out+ A String, IO, or any other object supporting <<( String ) + # +input+ the text to substitute and the write out + # + # z=utf8.unpack("U*") + # ascOut="" + # z.each{|r| + # if r < 0x100 + # ascOut.concat(r.chr) + # else + # ascOut.concat(sprintf("&#x%x;", r)) + # end + # } + # puts ascOut + def write_with_substitution out, input + copy = input.clone + # Doing it like this rather than in a loop improves the speed + copy.gsub!( SPECIALS[0], SUBSTITUTES[0] ) + copy.gsub!( SPECIALS[1], SUBSTITUTES[1] ) + copy.gsub!( SPECIALS[2], SUBSTITUTES[2] ) + copy.gsub!( SPECIALS[3], SUBSTITUTES[3] ) + copy.gsub!( SPECIALS[4], SUBSTITUTES[4] ) + copy.gsub!( SPECIALS[5], SUBSTITUTES[5] ) + out << copy + end + + private + def clear_cache + @normalized = nil + @unnormalized = nil + end + + # Reads text, substituting entities + def Text::read_with_substitution( input, illegal=nil ) + copy = input.clone + + if copy =~ illegal + raise ParseException.new( "malformed text: Illegal character #$& in \"#{copy}\"" ) + end if illegal + + copy.gsub!( /\r\n?/, "\n" ) + if copy.include? ?& + copy.gsub!( SETUTITSBUS[0], SLAICEPS[0] ) + copy.gsub!( SETUTITSBUS[1], SLAICEPS[1] ) + copy.gsub!( SETUTITSBUS[2], SLAICEPS[2] ) + copy.gsub!( SETUTITSBUS[3], SLAICEPS[3] ) + copy.gsub!( SETUTITSBUS[4], SLAICEPS[4] ) + copy.gsub!( /�*((?:\d+)|(?:x[a-f0-9]+));/ ) { + m=$1 + #m='0' if m=='' + m = "0#{m}" if m[0] == ?x + [Integer(m)].pack('U*') + } + end + copy + end + + EREFERENCE = /&(?!#{Entity::NAME};)/ + # Escapes all possible entities + def Text::normalize( input, doctype=nil, entity_filter=nil ) + copy = input.to_s + # Doing it like this rather than in a loop improves the speed + #copy = copy.gsub( EREFERENCE, '&' ) + copy = copy.gsub( "&", "&" ) if copy.include?("&") + if doctype + # Replace all ampersands that aren't part of an entity + doctype.entities.each_value do |entity| + copy = copy.gsub( entity.value, + "&#{entity.name};" ) if entity.value and + not( entity_filter and entity_filter.include?(entity.name) ) + end + else + # Replace all ampersands that aren't part of an entity + DocType::DEFAULT_ENTITIES.each_value do |entity| + if copy.include?(entity.value) + copy = copy.gsub(entity.value, "&#{entity.name};" ) + end + end + end + copy + end + + # Unescapes all possible entities + def Text::unnormalize( string, doctype=nil, filter=nil, illegal=nil, entity_expansion_text_limit: nil ) + entity_expansion_text_limit ||= Security.entity_expansion_text_limit + sum = 0 + string.gsub( /\r\n?/, "\n" ).gsub( REFERENCE ) { + s = Text.expand($&, doctype, filter) + if sum + s.bytesize > entity_expansion_text_limit + raise "entity expansion has grown too large" + else + sum += s.bytesize + end + s + } + end + + def Text.expand(ref, doctype, filter) + if ref[1] == ?# + if ref[2] == ?x + [ref[3...-1].to_i(16)].pack('U*') + else + [ref[2...-1].to_i].pack('U*') + end + elsif ref == '&' + '&' + elsif filter and filter.include?( ref[1...-1] ) + ref + elsif doctype + doctype.entity( ref[1...-1] ) or ref + else + entity_value = DocType::DEFAULT_ENTITIES[ ref[1...-1] ] + entity_value ? entity_value.value : ref + end + end + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/undefinednamespaceexception.rb b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/undefinednamespaceexception.rb new file mode 100644 index 0000000..492a098 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/undefinednamespaceexception.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: false +require_relative 'parseexception' +module REXML + class UndefinedNamespaceException < ParseException + def initialize( prefix, source, parser ) + super( "Undefined prefix #{prefix} found" ) + end + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/validation/relaxng.rb b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/validation/relaxng.rb new file mode 100644 index 0000000..c6894dc --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/validation/relaxng.rb @@ -0,0 +1,540 @@ +# frozen_string_literal: false +require_relative "validation" +require_relative "../parsers/baseparser" + +module REXML + module Validation + # Implemented: + # * empty + # * element + # * attribute + # * text + # * optional + # * choice + # * oneOrMore + # * zeroOrMore + # * group + # * value + # * interleave + # * mixed + # * ref + # * grammar + # * start + # * define + # + # Not implemented: + # * data + # * param + # * include + # * externalRef + # * notAllowed + # * anyName + # * nsName + # * except + # * name + class RelaxNG + include Validator + + INFINITY = 1.0 / 0.0 + EMPTY = Event.new( nil ) + TEXT = [:start_element, "text"] + attr_accessor :current + attr_accessor :count + attr_reader :references + + # FIXME: Namespaces + def initialize source + parser = REXML::Parsers::BaseParser.new( source ) + + @count = 0 + @references = {} + @root = @current = Sequence.new(self) + @root.previous = true + states = [ @current ] + begin + event = parser.pull + case event[0] + when :start_element + case event[1] + when "empty" + when "element", "attribute", "text", "value" + states[-1] << event + when "optional" + states << Optional.new( self ) + states[-2] << states[-1] + when "choice" + states << Choice.new( self ) + states[-2] << states[-1] + when "oneOrMore" + states << OneOrMore.new( self ) + states[-2] << states[-1] + when "zeroOrMore" + states << ZeroOrMore.new( self ) + states[-2] << states[-1] + when "group" + states << Sequence.new( self ) + states[-2] << states[-1] + when "interleave" + states << Interleave.new( self ) + states[-2] << states[-1] + when "mixed" + states << Interleave.new( self ) + states[-2] << states[-1] + states[-1] << TEXT + when "define" + states << [ event[2]["name"] ] + when "ref" + states[-1] << Ref.new( event[2]["name"] ) + when "anyName" + states << AnyName.new( self ) + states[-2] << states[-1] + when "nsName" + when "except" + when "name" + when "data" + when "param" + when "include" + when "grammar" + when "start" + when "externalRef" + when "notAllowed" + end + when :end_element + case event[1] + when "element", "attribute" + states[-1] << event + when "zeroOrMore", "oneOrMore", "choice", "optional", + "interleave", "group", "mixed" + states.pop + when "define" + ref = states.pop + @references[ ref.shift ] = ref + #when "empty" + end + when :end_document + states[-1] << event + when :text + states[-1] << event + end + end while event[0] != :end_document + end + + def receive event + validate( event ) + end + end + + class State + def initialize( context ) + @previous = [] + @events = [] + @current = 0 + @count = context.count += 1 + @references = context.references + @value = false + end + + def reset + return if @current == 0 + @current = 0 + @events.each {|s| s.reset if s.kind_of? State } + end + + def previous=( previous ) + @previous << previous + end + + def next( event ) + #print "In next with #{event.inspect}. " + #p @previous + return @previous.pop.next( event ) if @events[@current].nil? + expand_ref_in( @events, @current ) if @events[@current].class == Ref + if ( @events[@current].kind_of? State ) + @current += 1 + @events[@current-1].previous = self + return @events[@current-1].next( event ) + end + if ( @events[@current].matches?(event) ) + @current += 1 + if @events[@current].nil? + @previous.pop + elsif @events[@current].kind_of? State + @current += 1 + @events[@current-1].previous = self + @events[@current-1] + else + self + end + else + nil + end + end + + def to_s + # Abbreviated: + self.class.name =~ /(?:::)(\w)\w+$/ + # Full: + #self.class.name =~ /(?:::)(\w+)$/ + "#$1.#@count" + end + + def inspect + "< #{to_s} #{@events.collect{|e| + pre = e == @events[@current] ? '#' : '' + pre + e.inspect unless self == e + }.join(', ')} >" + end + + def expected + [@events[@current]] + end + + def <<( event ) + add_event_to_arry( @events, event ) + end + + + protected + def expand_ref_in( arry, ind ) + new_events = [] + @references[ arry[ind].to_s ].each{ |evt| + add_event_to_arry(new_events,evt) + } + arry[ind,1] = new_events + end + + def add_event_to_arry( arry, evt ) + evt = generate_event( evt ) + if evt.kind_of? String + arry[-1].event_arg = evt if arry[-1].kind_of? Event and @value + @value = false + else + arry << evt + end + end + + def generate_event( event ) + return event if event.kind_of? State or event.class == Ref + evt = nil + arg = nil + case event[0] + when :start_element + case event[1] + when "element" + evt = :start_element + arg = event[2]["name"] + when "attribute" + evt = :start_attribute + arg = event[2]["name"] + when "text" + evt = :text + when "value" + evt = :text + @value = true + end + when :text + return event[1] + when :end_document + return Event.new( event[0] ) + else # then :end_element + case event[1] + when "element" + evt = :end_element + when "attribute" + evt = :end_attribute + end + end + Event.new( evt, arg ) + end + end + + + class Sequence < State + def matches?(event) + @events[@current].matches?( event ) + end + end + + + class Optional < State + def next( event ) + if @current == 0 + rv = super + return rv if rv + @prior = @previous.pop + @prior.next( event ) + else + super + end + end + + def matches?(event) + @events[@current].matches?(event) || + (@current == 0 and @previous[-1].matches?(event)) + end + + def expected + return [ @prior.expected, @events[0] ].flatten if @current == 0 + [@events[@current]] + end + end + + + class ZeroOrMore < Optional + def next( event ) + expand_ref_in( @events, @current ) if @events[@current].class == Ref + if ( @events[@current].matches?(event) ) + @current += 1 + if @events[@current].nil? + @current = 0 + self + elsif @events[@current].kind_of? State + @current += 1 + @events[@current-1].previous = self + @events[@current-1] + else + self + end + else + @prior = @previous.pop + return @prior.next( event ) if @current == 0 + nil + end + end + + def expected + return [ @prior.expected, @events[0] ].flatten if @current == 0 + [@events[@current]] + end + end + + + class OneOrMore < State + def initialize context + super + @ord = 0 + end + + def reset + super + @ord = 0 + end + + def next( event ) + expand_ref_in( @events, @current ) if @events[@current].class == Ref + if ( @events[@current].matches?(event) ) + @current += 1 + @ord += 1 + if @events[@current].nil? + @current = 0 + self + elsif @events[@current].kind_of? State + @current += 1 + @events[@current-1].previous = self + @events[@current-1] + else + self + end + else + return @previous.pop.next( event ) if @current == 0 and @ord > 0 + nil + end + end + + def matches?( event ) + @events[@current].matches?(event) || + (@current == 0 and @ord > 0 and @previous[-1].matches?(event)) + end + + def expected + if @current == 0 and @ord > 0 + [@previous[-1].expected, @events[0]].flatten + else + [@events[@current]] + end + end + end + + + class Choice < State + def initialize context + super + @choices = [] + end + + def reset + super + @events = [] + @choices.each { |c| c.each { |s| s.reset if s.kind_of? State } } + end + + def <<( event ) + add_event_to_arry( @choices, event ) + end + + def next( event ) + # Make the choice if we haven't + if @events.size == 0 + c = 0 ; max = @choices.size + while c < max + if @choices[c][0].class == Ref + expand_ref_in( @choices[c], 0 ) + @choices += @choices[c] + @choices.delete( @choices[c] ) + max -= 1 + else + c += 1 + end + end + @events = @choices.find { |evt| evt[0].matches? event } + # Remove the references + # Find the events + end + unless @events + @events = [] + return nil + end + super + end + + def matches?( event ) + return @events[@current].matches?( event ) if @events.size > 0 + !@choices.find{|evt| evt[0].matches?(event)}.nil? + end + + def expected + return [@events[@current]] if @events.size > 0 + @choices.collect do |x| + if x[0].kind_of? State + x[0].expected + else + x[0] + end + end.flatten + end + + def inspect + "< #{to_s} #{@choices.collect{|e| e.collect{|f|f.to_s}.join(', ')}.join(' or ')} >" + end + + protected + def add_event_to_arry( arry, evt ) + if evt.kind_of? State or evt.class == Ref + arry << [evt] + elsif evt[0] == :text + if arry[-1] and + arry[-1][-1].kind_of?( Event ) and + arry[-1][-1].event_type == :text and @value + + arry[-1][-1].event_arg = evt[1] + @value = false + end + else + arry << [] if evt[0] == :start_element + arry[-1] << generate_event( evt ) + end + end + end + + + class Interleave < Choice + def initialize context + super + @choice = 0 + end + + def reset + @choice = 0 + end + + def next_current( event ) + # Expand references + c = 0 ; max = @choices.size + while c < max + if @choices[c][0].class == Ref + expand_ref_in( @choices[c], 0 ) + @choices += @choices[c] + @choices.delete( @choices[c] ) + max -= 1 + else + c += 1 + end + end + @events = @choices[@choice..-1].find { |evt| evt[0].matches? event } + @current = 0 + if @events + # reorder the choices + old = @choices[@choice] + idx = @choices.index( @events ) + @choices[@choice] = @events + @choices[idx] = old + @choice += 1 + end + + @events = [] unless @events + end + + + def next( event ) + # Find the next series + next_current(event) unless @events[@current] + return nil unless @events[@current] + + expand_ref_in( @events, @current ) if @events[@current].class == Ref + if ( @events[@current].kind_of? State ) + @current += 1 + @events[@current-1].previous = self + return @events[@current-1].next( event ) + end + return @previous.pop.next( event ) if @events[@current].nil? + if ( @events[@current].matches?(event) ) + @current += 1 + if @events[@current].nil? + return self unless @choices[@choice].nil? + @previous.pop + elsif @events[@current].kind_of? State + @current += 1 + @events[@current-1].previous = self + @events[@current-1] + else + self + end + else + nil + end + end + + def matches?( event ) + return @events[@current].matches?( event ) if @events[@current] + !@choices[@choice..-1].find{|evt| evt[0].matches?(event)}.nil? + end + + def expected + return [@events[@current]] if @events[@current] + @choices[@choice..-1].collect do |x| + if x[0].kind_of? State + x[0].expected + else + x[0] + end + end.flatten + end + + def inspect + "< #{to_s} #{@choices.collect{|e| e.collect{|f|f.to_s}.join(', ')}.join(' and ')} >" + end + end + + class Ref + def initialize value + @value = value + end + def to_s + @value + end + def inspect + "{#{to_s}}" + end + end + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/validation/validation.rb b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/validation/validation.rb new file mode 100644 index 0000000..6475c62 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/validation/validation.rb @@ -0,0 +1,144 @@ +# frozen_string_literal: false +require_relative 'validationexception' + +module REXML + module Validation + module Validator + NILEVENT = [ nil ] + def reset + @current = @root + @root.reset + @root.previous = true + @attr_stack = [] + self + end + def dump + puts @root.inspect + end + def validate( event ) + @attr_stack = [] unless defined? @attr_stack + match = @current.next(event) + raise ValidationException.new( "Validation error. Expected: "+ + @current.expected.join( " or " )+" from #{@current.inspect} "+ + " but got #{Event.new( event[0], event[1] ).inspect}" ) unless match + @current = match + + # Check for attributes + case event[0] + when :start_element + @attr_stack << event[2] + begin + sattr = [:start_attribute, nil] + eattr = [:end_attribute] + text = [:text, nil] + k, = event[2].find { |key,value| + sattr[1] = key + m = @current.next( sattr ) + if m + # If the state has text children... + if m.matches?( eattr ) + @current = m + else + text[1] = value + m = m.next( text ) + text[1] = nil + return false unless m + @current = m if m + end + m = @current.next( eattr ) + if m + @current = m + true + else + false + end + else + false + end + } + event[2].delete(k) if k + end while k + when :end_element + attrs = @attr_stack.pop + raise ValidationException.new( "Validation error. Illegal "+ + " attributes: #{attrs.inspect}") if attrs.length > 0 + end + end + end + + class Event + def initialize(event_type, event_arg=nil ) + @event_type = event_type + @event_arg = event_arg + end + + attr_reader :event_type + attr_accessor :event_arg + + def done? + @done + end + + def single? + (@event_type != :start_element and @event_type != :start_attribute) + end + + def matches?( event ) + return false unless event[0] == @event_type + case event[0] + when nil + true + when :start_element + event[1] == @event_arg + when :end_element + true + when :start_attribute + event[1] == @event_arg + when :end_attribute + true + when :end_document + true + when :text + @event_arg.nil? || @event_arg == event[1] +=begin + when :processing_instruction + false + when :xmldecl + false + when :start_doctype + false + when :end_doctype + false + when :externalentity + false + when :elementdecl + false + when :entity + false + when :attlistdecl + false + when :notationdecl + false + when :end_doctype + false +=end + else + false + end + end + + def ==( other ) + return false unless other.kind_of? Event + @event_type == other.event_type and @event_arg == other.event_arg + end + + def to_s + inspect + end + + def inspect + "#{@event_type.inspect}( #@event_arg )" + end + end + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/validation/validationexception.rb b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/validation/validationexception.rb new file mode 100644 index 0000000..78cd63f --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/validation/validationexception.rb @@ -0,0 +1,10 @@ +# frozen_string_literal: false +module REXML + module Validation + class ValidationException < RuntimeError + def initialize msg + super + end + end + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/xmldecl.rb b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/xmldecl.rb new file mode 100644 index 0000000..d19407c --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/xmldecl.rb @@ -0,0 +1,130 @@ +# frozen_string_literal: false + +require_relative 'encoding' +require_relative 'source' + +module REXML + # NEEDS DOCUMENTATION + class XMLDecl < Child + include Encoding + + DEFAULT_VERSION = "1.0" + DEFAULT_ENCODING = "UTF-8" + DEFAULT_STANDALONE = "no" + START = "<?xml" + STOP = "?>" + + attr_accessor :version, :standalone + attr_reader :writeencoding, :writethis + + def initialize(version=DEFAULT_VERSION, encoding=nil, standalone=nil) + @writethis = true + @writeencoding = !encoding.nil? + if version.kind_of? XMLDecl + super() + @version = version.version + self.encoding = version.encoding + @writeencoding = version.writeencoding + @standalone = version.standalone + @writethis = version.writethis + else + super() + @version = version + self.encoding = encoding + @standalone = standalone + end + @version = DEFAULT_VERSION if @version.nil? + end + + def clone + XMLDecl.new(self) + end + + # indent:: + # Ignored. There must be no whitespace before an XML declaration + # transitive:: + # Ignored + # ie_hack:: + # Ignored + def write(writer, indent=-1, transitive=false, ie_hack=false) + return nil unless @writethis or writer.kind_of? Output + writer << START + writer << " #{content encoding}" + writer << STOP + end + + def ==( other ) + other.kind_of?(XMLDecl) and + other.version == @version and + other.encoding == self.encoding and + other.standalone == @standalone + end + + def xmldecl version, encoding, standalone + @version = version + self.encoding = encoding + @standalone = standalone + end + + def node_type + :xmldecl + end + + alias :stand_alone? :standalone + alias :old_enc= :encoding= + + def encoding=( enc ) + if enc.nil? + self.old_enc = "UTF-8" + @writeencoding = false + else + self.old_enc = enc + @writeencoding = true + end + self.dowrite + end + + # Only use this if you do not want the XML declaration to be written; + # this object is ignored by the XML writer. Otherwise, instantiate your + # own XMLDecl and add it to the document. + # + # Note that XML 1.1 documents *must* include an XML declaration + def XMLDecl.default + rv = XMLDecl.new( "1.0" ) + rv.nowrite + rv + end + + def nowrite + @writethis = false + end + + def dowrite + @writethis = true + end + + def inspect + "#{START} ... #{STOP}" + end + + private + def content(enc) + context = nil + context = parent.context if parent + if context and context[:prologue_quote] == :quote + quote = "\"" + else + quote = "'" + end + + rv = "version=#{quote}#{@version}#{quote}" + if @writeencoding or enc !~ /\Autf-8\z/i + rv << " encoding=#{quote}#{enc}#{quote}" + end + if @standalone + rv << " standalone=#{quote}#{@standalone}#{quote}" + end + rv + end + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/xmltokens.rb b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/xmltokens.rb new file mode 100644 index 0000000..392b47b --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/xmltokens.rb @@ -0,0 +1,85 @@ +# frozen_string_literal: false +module REXML + # Defines a number of tokens used for parsing XML. Not for general + # consumption. + module XMLTokens + # From http://www.w3.org/TR/REC-xml/#sec-common-syn + # + # [4] NameStartChar ::= + # ":" | + # [A-Z] | + # "_" | + # [a-z] | + # [#xC0-#xD6] | + # [#xD8-#xF6] | + # [#xF8-#x2FF] | + # [#x370-#x37D] | + # [#x37F-#x1FFF] | + # [#x200C-#x200D] | + # [#x2070-#x218F] | + # [#x2C00-#x2FEF] | + # [#x3001-#xD7FF] | + # [#xF900-#xFDCF] | + # [#xFDF0-#xFFFD] | + # [#x10000-#xEFFFF] + name_start_chars = [ + ":", + "A-Z", + "_", + "a-z", + "\\u00C0-\\u00D6", + "\\u00D8-\\u00F6", + "\\u00F8-\\u02FF", + "\\u0370-\\u037D", + "\\u037F-\\u1FFF", + "\\u200C-\\u200D", + "\\u2070-\\u218F", + "\\u2C00-\\u2FEF", + "\\u3001-\\uD7FF", + "\\uF900-\\uFDCF", + "\\uFDF0-\\uFFFD", + "\\u{10000}-\\u{EFFFF}", + ] + # From http://www.w3.org/TR/REC-xml/#sec-common-syn + # + # [4a] NameChar ::= + # NameStartChar | + # "-" | + # "." | + # [0-9] | + # #xB7 | + # [#x0300-#x036F] | + # [#x203F-#x2040] + name_chars = name_start_chars + [ + "\\-", + "\\.", + "0-9", + "\\u00B7", + "\\u0300-\\u036F", + "\\u203F-\\u2040", + ] + NAME_START_CHAR = "[#{name_start_chars.join('')}]" + NAME_CHAR = "[#{name_chars.join('')}]" + NAMECHAR = NAME_CHAR # deprecated. Use NAME_CHAR instead. + + # From http://www.w3.org/TR/xml-names11/#NT-NCName + # + # [6] NCNameStartChar ::= NameStartChar - ':' + ncname_start_chars = name_start_chars - [":"] + # From http://www.w3.org/TR/xml-names11/#NT-NCName + # + # [5] NCNameChar ::= NameChar - ':' + ncname_chars = name_chars - [":"] + NCNAME_STR = "[#{ncname_start_chars.join('')}][#{ncname_chars.join('')}]*" + NAME_STR = "(?:#{NCNAME_STR}:)?#{NCNAME_STR}" + + NAME = "(#{NAME_START_CHAR}#{NAME_CHAR}*)" + NMTOKEN = "(?:#{NAME_CHAR})+" + NMTOKENS = "#{NMTOKEN}(\\s+#{NMTOKEN})*" + REFERENCE = "(?:&#{NAME};|&#\\d+;|&#x[0-9a-fA-F]+;)" + + #REFERENCE = "(?:#{ENTITYREF}|#{CHARREF})" + #ENTITYREF = "&#{NAME};" + #CHARREF = "&#\\d+;|&#x[0-9a-fA-F]+;" + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/xpath.rb b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/xpath.rb new file mode 100644 index 0000000..eed0300 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/xpath.rb @@ -0,0 +1,70 @@ +# frozen_string_literal: false +require_relative 'functions' +require_relative 'xpath_parser' + +module REXML + # Wrapper class. Use this class to access the XPath functions. + class XPath + include Functions + # A base Hash object, supposing to be used when initializing a + # default empty namespaces set, but is currently unused. + # TODO: either set the namespaces=EMPTY_HASH, or deprecate this. + EMPTY_HASH = {} + + # Finds and returns the first node that matches the supplied xpath. + # element:: + # The context element + # path:: + # The xpath to search for. If not supplied or nil, returns the first + # node matching '*'. + # namespaces:: + # If supplied, a Hash which defines a namespace mapping. + # variables:: + # If supplied, a Hash which maps $variables in the query + # to values. This can be used to avoid XPath injection attacks + # or to automatically handle escaping string values. + # + # XPath.first( node ) + # XPath.first( doc, "//b"} ) + # XPath.first( node, "a/x:b", { "x"=>"http://doofus" } ) + # XPath.first( node, '/book/publisher/text()=$publisher', {}, {"publisher"=>"O'Reilly"}) + def XPath::first(element, path=nil, namespaces=nil, variables={}, options={}) + raise "The namespaces argument, if supplied, must be a hash object." unless namespaces.nil? or namespaces.kind_of?(Hash) + raise "The variables argument, if supplied, must be a hash object." unless variables.kind_of?(Hash) + match(element, path, namespaces, variables, options).flatten[0] + end + + # Iterates over nodes that match the given path, calling the supplied + # block with the match. + # element:: + # The context element + # path:: + # The xpath to search for. If not supplied or nil, defaults to '*' + # namespaces:: + # If supplied, a Hash which defines a namespace mapping + # variables:: + # If supplied, a Hash which maps $variables in the query + # to values. This can be used to avoid XPath injection attacks + # or to automatically handle escaping string values. + # + # XPath.each( node ) { |el| ... } + # XPath.each( node, '/*[@attr='v']' ) { |el| ... } + # XPath.each( node, 'ancestor::x' ) { |el| ... } + # XPath.each( node, '/book/publisher/text()=$publisher', {}, {"publisher"=>"O'Reilly"}) \ + # {|el| ... } + def XPath::each(element, path=nil, namespaces=nil, variables={}, options={}, &block) + raise "The namespaces argument, if supplied, must be a hash object." unless namespaces.nil? or namespaces.kind_of?(Hash) + raise "The variables argument, if supplied, must be a hash object." unless variables.kind_of?(Hash) + match(element, path, namespaces, variables, options).each( &block ) + end + + # Returns an array of nodes matching a given XPath. + def XPath::match(element, path=nil, namespaces=nil, variables={}, options={}) + parser = XPathParser.new(**options) + parser.namespaces = namespaces + parser.variables = variables + path = "*" unless path + parser.parse(path,element) + end + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/xpath_parser.rb b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/xpath_parser.rb new file mode 100644 index 0000000..64c8846 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/rexml-3.4.4/lib/rexml/xpath_parser.rb @@ -0,0 +1,980 @@ +# frozen_string_literal: false + +require "pp" + +require_relative 'namespace' +require_relative 'xmltokens' +require_relative 'attribute' +require_relative 'parsers/xpathparser' + +module REXML + module DClonable + refine Object do + # provides a unified +clone+ operation, for REXML::XPathParser + # to use across multiple Object types + def dclone + clone + end + end + refine Symbol do + # provides a unified +clone+ operation, for REXML::XPathParser + # to use across multiple Object types + def dclone ; self ; end + end + refine Integer do + # provides a unified +clone+ operation, for REXML::XPathParser + # to use across multiple Object types + def dclone ; self ; end + end + refine Float do + # provides a unified +clone+ operation, for REXML::XPathParser + # to use across multiple Object types + def dclone ; self ; end + end + refine Array do + # provides a unified +clone+ operation, for REXML::XPathParser + # to use across multiple Object+ types + def dclone + klone = self.clone + klone.clear + self.each{|v| klone << v.dclone} + klone + end + end + end +end + +using REXML::DClonable + +module REXML + # You don't want to use this class. Really. Use XPath, which is a wrapper + # for this class. Believe me. You don't want to poke around in here. + # There is strange, dark magic at work in this code. Beware. Go back! Go + # back while you still can! + class XPathParser + include XMLTokens + LITERAL = /^'([^']*)'|^"([^"]*)"/u + + DEBUG = (ENV["REXML_XPATH_PARSER_DEBUG"] == "true") + + def initialize(strict: false) + @debug = DEBUG + @parser = REXML::Parsers::XPathParser.new + @namespaces = nil + @variables = {} + @nest = 0 + @strict = strict + end + + def namespaces=( namespaces={} ) + Functions::namespace_context = namespaces + @namespaces = namespaces + end + + def variables=( vars={} ) + Functions::variables = vars + @variables = vars + end + + def parse path, node + path_stack = @parser.parse( path ) + if node.is_a?(Array) + Kernel.warn("REXML::XPath.each, REXML::XPath.first, REXML::XPath.match dropped support for nodeset...", uplevel: 1) + return [] if node.empty? + node = node.first + end + + document = node.document + if document + document.__send__(:enable_cache) do + match( path_stack, node ) + end + else + match( path_stack, node ) + end + end + + def get_first path, node + path_stack = @parser.parse( path ) + first( path_stack, node ) + end + + def predicate path, node + path_stack = @parser.parse( path ) + match( path_stack, node ) + end + + def []=( variable_name, value ) + @variables[ variable_name ] = value + end + + + # Performs a depth-first (document order) XPath search, and returns the + # first match. This is the fastest, lightest way to return a single result. + # + # FIXME: This method is incomplete! + def first( path_stack, node ) + return nil if path.size == 0 + + case path[0] + when :document + # do nothing + first( path[1..-1], node ) + when :child + for c in node.children + r = first( path[1..-1], c ) + return r if r + end + when :qname + name = path[2] + if node.name == name + return node if path.size == 3 + first( path[3..-1], node ) + else + nil + end + when :descendant_or_self + r = first( path[1..-1], node ) + return r if r + for c in node.children + r = first( path, c ) + return r if r + end + when :node + first( path[1..-1], node ) + when :any + first( path[1..-1], node ) + else + nil + end + end + + + def match(path_stack, node) + nodeset = [XPathNode.new(node, position: 1)] + result = expr(path_stack, nodeset) + case result + when Array # nodeset + unnode(result).uniq + else + [result] + end + end + + private + def strict? + @strict + end + + # Returns a String namespace for a node, given a prefix + # The rules are: + # + # 1. Use the supplied namespace mapping first. + # 2. If no mapping was supplied, use the context node to look up the namespace + def get_namespace( node, prefix ) + if @namespaces + @namespaces[prefix] || '' + else + return node.namespace( prefix ) if node.node_type == :element + '' + end + end + + + # Expr takes a stack of path elements and a set of nodes (either a Parent + # or an Array and returns an Array of matching nodes + def expr( path_stack, nodeset, context=nil ) + enter(:expr, path_stack, nodeset) if @debug + return nodeset if path_stack.length == 0 || nodeset.length == 0 + while path_stack.length > 0 + trace(:while, path_stack, nodeset) if @debug + if nodeset.length == 0 + path_stack.clear + return [] + end + op = path_stack.shift + case op + when :document + first_raw_node = nodeset.first.raw_node + nodeset = [XPathNode.new(first_raw_node.root_node, position: 1)] + when :self + nodeset = step(path_stack) do + [nodeset] + end + when :child + nodeset = step(path_stack) do + child(nodeset) + end + when :literal + trace(:literal, path_stack, nodeset) if @debug + return path_stack.shift + when :attribute + nodeset = step(path_stack, any_type: :attribute) do + nodesets = [] + nodeset.each do |node| + raw_node = node.raw_node + next unless raw_node.node_type == :element + attributes = raw_node.attributes + next if attributes.empty? + nodesets << attributes.each_attribute.collect.with_index do |attribute, i| + XPathNode.new(attribute, position: i + 1) + end + end + nodesets + end + when :namespace + pre_defined_namespaces = { + "xml" => "http://www.w3.org/XML/1998/namespace", + } + nodeset = step(path_stack, any_type: :namespace) do + nodesets = [] + nodeset.each do |node| + raw_node = node.raw_node + case raw_node.node_type + when :element + if @namespaces + nodesets << pre_defined_namespaces.merge(@namespaces) + else + nodesets << pre_defined_namespaces.merge(raw_node.namespaces) + end + when :attribute + if @namespaces + nodesets << pre_defined_namespaces.merge(@namespaces) + else + nodesets << pre_defined_namespaces.merge(raw_node.element.namespaces) + end + end + end + nodesets + end + when :parent + nodeset = step(path_stack) do + nodesets = [] + nodeset.each do |node| + raw_node = node.raw_node + if raw_node.node_type == :attribute + parent = raw_node.element + else + parent = raw_node.parent + end + nodesets << [XPathNode.new(parent, position: 1)] if parent + end + nodesets + end + when :ancestor + nodeset = step(path_stack) do + nodesets = [] + # new_nodes = {} + nodeset.each do |node| + raw_node = node.raw_node + new_nodeset = [] + while raw_node.parent + raw_node = raw_node.parent + # next if new_nodes.key?(node) + new_nodeset << XPathNode.new(raw_node, + position: new_nodeset.size + 1) + # new_nodes[node] = true + end + nodesets << new_nodeset unless new_nodeset.empty? + end + nodesets + end + when :ancestor_or_self + nodeset = step(path_stack) do + nodesets = [] + # new_nodes = {} + nodeset.each do |node| + raw_node = node.raw_node + next unless raw_node.node_type == :element + new_nodeset = [XPathNode.new(raw_node, position: 1)] + # new_nodes[node] = true + while raw_node.parent + raw_node = raw_node.parent + # next if new_nodes.key?(node) + new_nodeset << XPathNode.new(raw_node, + position: new_nodeset.size + 1) + # new_nodes[node] = true + end + nodesets << new_nodeset unless new_nodeset.empty? + end + nodesets + end + when :descendant_or_self + nodeset = step(path_stack) do + descendant(nodeset, true) + end + when :descendant + nodeset = step(path_stack) do + descendant(nodeset, false) + end + when :following_sibling + nodeset = step(path_stack) do + nodesets = [] + nodeset.each do |node| + raw_node = node.raw_node + next unless raw_node.respond_to?(:parent) + next if raw_node.parent.nil? + all_siblings = raw_node.parent.children + current_index = all_siblings.index(raw_node) + following_siblings = all_siblings[(current_index + 1)..-1] + next if following_siblings.empty? + nodesets << following_siblings.collect.with_index do |sibling, i| + XPathNode.new(sibling, position: i + 1) + end + end + nodesets + end + when :preceding_sibling + nodeset = step(path_stack, order: :reverse) do + nodesets = [] + nodeset.each do |node| + raw_node = node.raw_node + next unless raw_node.respond_to?(:parent) + next if raw_node.parent.nil? + all_siblings = raw_node.parent.children + current_index = all_siblings.index(raw_node) + preceding_siblings = all_siblings[0, current_index].reverse + next if preceding_siblings.empty? + nodesets << preceding_siblings.collect.with_index do |sibling, i| + XPathNode.new(sibling, position: i + 1) + end + end + nodesets + end + when :preceding + nodeset = step(path_stack, order: :reverse) do + unnode(nodeset) do |node| + preceding(node) + end + end + when :following + nodeset = step(path_stack) do + unnode(nodeset) do |node| + following(node) + end + end + when :variable + var_name = path_stack.shift + return [@variables[var_name]] + + when :eq, :neq, :lt, :lteq, :gt, :gteq + left = expr( path_stack.shift, nodeset.dup, context ) + right = expr( path_stack.shift, nodeset.dup, context ) + res = equality_relational_compare( left, op, right ) + trace(op, left, right, res) if @debug + return res + + when :or + left = expr(path_stack.shift, nodeset.dup, context) + return true if Functions.boolean(left) + right = expr(path_stack.shift, nodeset.dup, context) + return Functions.boolean(right) + + when :and + left = expr(path_stack.shift, nodeset.dup, context) + return false unless Functions.boolean(left) + right = expr(path_stack.shift, nodeset.dup, context) + return Functions.boolean(right) + + when :div, :mod, :mult, :plus, :minus + left = expr(path_stack.shift, nodeset, context) + right = expr(path_stack.shift, nodeset, context) + left = unnode(left) if left.is_a?(Array) + right = unnode(right) if right.is_a?(Array) + left = Functions::number(left) + right = Functions::number(right) + case op + when :div + return left / right + when :mod + return left % right + when :mult + return left * right + when :plus + return left + right + when :minus + return left - right + else + raise "[BUG] Unexpected operator: <#{op.inspect}>" + end + when :union + left = expr( path_stack.shift, nodeset, context ) + right = expr( path_stack.shift, nodeset, context ) + left = unnode(left) if left.is_a?(Array) + right = unnode(right) if right.is_a?(Array) + return (left | right) + when :neg + res = expr( path_stack, nodeset, context ) + res = unnode(res) if res.is_a?(Array) + return -Functions.number(res) + when :not + when :function + func_name = path_stack.shift.tr('-','_') + arguments = path_stack.shift + + if nodeset.size != 1 + message = "[BUG] Node set size must be 1 for function call: " + message += "<#{func_name}>: <#{nodeset.inspect}>: " + message += "<#{arguments.inspect}>" + raise message + end + + node = nodeset.first + if context + target_context = context + else + target_context = {:size => nodeset.size} + if node.is_a?(XPathNode) + target_context[:node] = node.raw_node + target_context[:index] = node.position + else + target_context[:node] = node + target_context[:index] = 1 + end + end + args = arguments.dclone.collect do |arg| + result = expr(arg, nodeset, target_context) + result = unnode(result) if result.is_a?(Array) + result + end + Functions.context = target_context + return Functions.send(func_name, *args) + + else + raise "[BUG] Unexpected path: <#{op.inspect}>: <#{path_stack.inspect}>" + end + end # while + return nodeset + ensure + leave(:expr, path_stack, nodeset) if @debug + end + + def step(path_stack, any_type: :element, order: :forward) + nodesets = yield + begin + enter(:step, path_stack, nodesets) if @debug + nodesets = node_test(path_stack, nodesets, any_type: any_type) + while path_stack[0] == :predicate + path_stack.shift # :predicate + predicate_expression = path_stack.shift.dclone + nodesets = evaluate_predicate(predicate_expression, nodesets) + end + if nodesets.size == 1 + ordered_nodeset = nodesets[0] + else + raw_nodes = [] + nodesets.each do |nodeset| + nodeset.each do |node| + if node.respond_to?(:raw_node) + raw_nodes << node.raw_node + else + raw_nodes << node + end + end + end + ordered_nodeset = sort(raw_nodes, order) + end + new_nodeset = [] + ordered_nodeset.each do |node| + # TODO: Remove duplicated + new_nodeset << XPathNode.new(node, position: new_nodeset.size + 1) + end + new_nodeset + ensure + leave(:step, path_stack, new_nodeset) if @debug + end + end + + def node_test(path_stack, nodesets, any_type: :element) + enter(:node_test, path_stack, nodesets) if @debug + operator = path_stack.shift + case operator + when :qname + prefix = path_stack.shift + name = path_stack.shift + new_nodesets = nodesets.collect do |nodeset| + filter_nodeset(nodeset) do |node| + raw_node = node.raw_node + case raw_node.node_type + when :element + if prefix.nil? + raw_node.name == name + elsif prefix.empty? + if strict? + raw_node.name == name and raw_node.namespace == "" + else + raw_node.name == name and raw_node.namespace == get_namespace(raw_node, prefix) + end + else + raw_node.name == name and raw_node.namespace == get_namespace(raw_node, prefix) + end + when :attribute + if prefix.nil? + raw_node.name == name + elsif prefix.empty? + raw_node.name == name and raw_node.namespace == "" + else + raw_node.name == name and raw_node.namespace == get_namespace(raw_node.element, prefix) + end + else + false + end + end + end + when :namespace + prefix = path_stack.shift + new_nodesets = nodesets.collect do |nodeset| + filter_nodeset(nodeset) do |node| + raw_node = node.raw_node + case raw_node.node_type + when :element + namespaces = @namespaces || raw_node.namespaces + raw_node.namespace == namespaces[prefix] + when :attribute + namespaces = @namespaces || raw_node.element.namespaces + raw_node.namespace == namespaces[prefix] + else + false + end + end + end + when :any + new_nodesets = nodesets.collect do |nodeset| + filter_nodeset(nodeset) do |node| + raw_node = node.raw_node + raw_node.node_type == any_type + end + end + when :comment + new_nodesets = nodesets.collect do |nodeset| + filter_nodeset(nodeset) do |node| + raw_node = node.raw_node + raw_node.node_type == :comment + end + end + when :text + new_nodesets = nodesets.collect do |nodeset| + filter_nodeset(nodeset) do |node| + raw_node = node.raw_node + raw_node.node_type == :text + end + end + when :processing_instruction + target = path_stack.shift + new_nodesets = nodesets.collect do |nodeset| + filter_nodeset(nodeset) do |node| + raw_node = node.raw_node + (raw_node.node_type == :processing_instruction) and + (target.empty? or (raw_node.target == target)) + end + end + when :node + new_nodesets = nodesets.collect do |nodeset| + filter_nodeset(nodeset) do |node| + true + end + end + else + message = "[BUG] Unexpected node test: " + + "<#{operator.inspect}>: <#{path_stack.inspect}>" + raise message + end + new_nodesets + ensure + leave(:node_test, path_stack, new_nodesets) if @debug + end + + def filter_nodeset(nodeset) + new_nodeset = [] + nodeset.each do |node| + next unless yield(node) + new_nodeset << XPathNode.new(node, position: new_nodeset.size + 1) + end + new_nodeset + end + + def evaluate_predicate(expression, nodesets) + enter(:predicate, expression, nodesets) if @debug + new_nodeset_count = 0 + new_nodesets = nodesets.collect do |nodeset| + new_nodeset = [] + subcontext = { :size => nodeset.size } + nodeset.each_with_index do |node, index| + if node.is_a?(XPathNode) + subcontext[:node] = node.raw_node + subcontext[:index] = node.position + else + subcontext[:node] = node + subcontext[:index] = index + 1 + end + result = expr(expression.dclone, [node], subcontext) + trace(:predicate_evaluate, expression, node, subcontext, result) if @debug + result = result[0] if result.kind_of? Array and result.length == 1 + if result.kind_of? Numeric + if result == node.position + new_nodeset_count += 1 + new_nodeset << XPathNode.new(node, position: new_nodeset_count) + end + elsif result.instance_of? Array + if result.size > 0 and result.inject(false) {|k,s| s or k} + if result.size > 0 + new_nodeset_count += 1 + new_nodeset << XPathNode.new(node, position: new_nodeset_count) + end + end + else + if result + new_nodeset_count += 1 + new_nodeset << XPathNode.new(node, position: new_nodeset_count) + end + end + end + new_nodeset + end + new_nodesets + ensure + leave(:predicate, new_nodesets) if @debug + end + + def trace(*args) + indent = " " * @nest + PP.pp(args, "").each_line do |line| + puts("#{indent}#{line}") + end + end + + def enter(tag, *args) + trace(:enter, tag, *args) + @nest += 1 + end + + def leave(tag, *args) + @nest -= 1 + trace(:leave, tag, *args) + end + + # Reorders an array of nodes so that they are in document order + # It tries to do this efficiently. + # + # FIXME: I need to get rid of this, but the issue is that most of the XPath + # interpreter functions as a filter, which means that we lose context going + # in and out of function calls. If I knew what the index of the nodes was, + # I wouldn't have to do this. Maybe add a document IDX for each node? + # Problems with mutable documents. Or, rewrite everything. + def sort(array_of_nodes, order) + new_arry = [] + array_of_nodes.each { |node| + node_idx = [] + np = node.node_type == :attribute ? node.element : node + while np.parent and np.parent.node_type == :element + node_idx << np.parent.index( np ) + np = np.parent + end + new_arry << [ node_idx.reverse, node ] + } + ordered = new_arry.sort_by do |index, node| + if order == :forward + index + else + index.map(&:-@) + end + end + ordered.collect do |_index, node| + node + end + end + + def descendant(nodeset, include_self) + nodesets = [] + nodeset.each do |node| + new_nodeset = [] + new_nodes = {} + descendant_recursive(node.raw_node, new_nodeset, new_nodes, include_self) + nodesets << new_nodeset unless new_nodeset.empty? + end + nodesets + end + + def descendant_recursive(raw_node, new_nodeset, new_nodes, include_self) + if include_self + return if new_nodes.key?(raw_node) + new_nodeset << XPathNode.new(raw_node, position: new_nodeset.size + 1) + new_nodes[raw_node] = true + end + + node_type = raw_node.node_type + if node_type == :element or node_type == :document + raw_node.children.each do |child| + descendant_recursive(child, new_nodeset, new_nodes, true) + end + end + end + + # Builds a nodeset of all of the preceding nodes of the supplied node, + # in reverse document order + # preceding:: includes every element in the document that precedes this node, + # except for ancestors + def preceding(node) + ancestors = [] + parent = node.parent + while parent + ancestors << parent + parent = parent.parent + end + + precedings = [] + preceding_node = preceding_node_of(node) + while preceding_node + if ancestors.include?(preceding_node) + ancestors.delete(preceding_node) + else + precedings << XPathNode.new(preceding_node, + position: precedings.size + 1) + end + preceding_node = preceding_node_of(preceding_node) + end + precedings + end + + def preceding_node_of( node ) + psn = node.previous_sibling_node + if psn.nil? + if node.parent.nil? or node.parent.class == Document + return nil + end + return node.parent + #psn = preceding_node_of( node.parent ) + end + while psn and psn.kind_of? Element and psn.children.size > 0 + psn = psn.children[-1] + end + psn + end + + def following(node) + followings = [] + following_node = next_sibling_node(node) + while following_node + followings << XPathNode.new(following_node, + position: followings.size + 1) + following_node = following_node_of(following_node) + end + followings + end + + def following_node_of( node ) + return node.children[0] if node.kind_of?(Element) and node.children.size > 0 + + next_sibling_node(node) + end + + def next_sibling_node(node) + psn = node.next_sibling_node + while psn.nil? + return nil if node.parent.nil? or node.parent.class == Document + node = node.parent + psn = node.next_sibling_node + end + psn + end + + def child(nodeset) + nodesets = [] + nodeset.each do |node| + raw_node = node.raw_node + node_type = raw_node.node_type + # trace(:child, node_type, node) + case node_type + when :element + nodesets << raw_node.children.collect.with_index do |child_node, i| + XPathNode.new(child_node, position: i + 1) + end + when :document + new_nodeset = [] + raw_node.children.each do |child| + case child + when XMLDecl, Text + # Ignore + else + new_nodeset << XPathNode.new(child, position: new_nodeset.size + 1) + end + end + nodesets << new_nodeset unless new_nodeset.empty? + end + end + nodesets + end + + def norm b + case b + when true, false + b + when 'true', 'false' + Functions::boolean( b ) + when /^\d+(\.\d+)?$/, Numeric + Functions::number( b ) + else + Functions::string( b ) + end + end + + def equality_relational_compare(set1, op, set2) + set1 = unnode(set1) if set1.is_a?(Array) + set2 = unnode(set2) if set2.is_a?(Array) + + if set1.kind_of? Array and set2.kind_of? Array + # If both objects to be compared are node-sets, then the + # comparison will be true if and only if there is a node in the + # first node-set and a node in the second node-set such that the + # result of performing the comparison on the string-values of + # the two nodes is true. + set1.product(set2).any? do |node1, node2| + node_string1 = Functions.string(node1) + node_string2 = Functions.string(node2) + compare(node_string1, op, node_string2) + end + elsif set1.kind_of? Array or set2.kind_of? Array + # If one is nodeset and other is number, compare number to each item + # in nodeset s.t. number op number(string(item)) + # If one is nodeset and other is string, compare string to each item + # in nodeset s.t. string op string(item) + # If one is nodeset and other is boolean, compare boolean to each item + # in nodeset s.t. boolean op boolean(item) + if set1.kind_of? Array + a = set1 + b = set2 + else + a = set2 + b = set1 + end + + case b + when true, false + each_unnode(a).any? do |unnoded| + compare(Functions.boolean(unnoded), op, b) + end + when Numeric + each_unnode(a).any? do |unnoded| + compare(Functions.number(unnoded), op, b) + end + when /\A\d+(\.\d+)?\z/ + b = Functions.number(b) + each_unnode(a).any? do |unnoded| + compare(Functions.number(unnoded), op, b) + end + else + b = Functions::string(b) + each_unnode(a).any? do |unnoded| + compare(Functions::string(unnoded), op, b) + end + end + else + # If neither is nodeset, + # If op is = or != + # If either boolean, convert to boolean + # If either number, convert to number + # Else, convert to string + # Else + # Convert both to numbers and compare + compare(set1, op, set2) + end + end + + def value_type(value) + case value + when true, false + :boolean + when Numeric + :number + when String + :string + else + raise "[BUG] Unexpected value type: <#{value.inspect}>" + end + end + + def normalize_compare_values(a, operator, b) + a_type = value_type(a) + b_type = value_type(b) + case operator + when :eq, :neq + if a_type == :boolean or b_type == :boolean + a = Functions.boolean(a) unless a_type == :boolean + b = Functions.boolean(b) unless b_type == :boolean + elsif a_type == :number or b_type == :number + a = Functions.number(a) unless a_type == :number + b = Functions.number(b) unless b_type == :number + else + a = Functions.string(a) unless a_type == :string + b = Functions.string(b) unless b_type == :string + end + when :lt, :lteq, :gt, :gteq + a = Functions.number(a) unless a_type == :number + b = Functions.number(b) unless b_type == :number + else + message = "[BUG] Unexpected compare operator: " + + "<#{operator.inspect}>: <#{a.inspect}>: <#{b.inspect}>" + raise message + end + [a, b] + end + + def compare(a, operator, b) + a, b = normalize_compare_values(a, operator, b) + case operator + when :eq + a == b + when :neq + a != b + when :lt + a < b + when :lteq + a <= b + when :gt + a > b + when :gteq + a >= b + else + message = "[BUG] Unexpected compare operator: " + + "<#{operator.inspect}>: <#{a.inspect}>: <#{b.inspect}>" + raise message + end + end + + def each_unnode(nodeset) + return to_enum(__method__, nodeset) unless block_given? + nodeset.each do |node| + if node.is_a?(XPathNode) + unnoded = node.raw_node + else + unnoded = node + end + yield(unnoded) + end + end + + def unnode(nodeset) + each_unnode(nodeset).collect do |unnoded| + unnoded = yield(unnoded) if block_given? + unnoded + end + end + end + + # @private + class XPathNode + attr_reader :raw_node, :context + def initialize(node, context=nil) + if node.is_a?(XPathNode) + @raw_node = node.raw_node + else + @raw_node = node + end + @context = context || {} + end + + def position + @context[:position] + end + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/LICENSE b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/LICENSE new file mode 100644 index 0000000..f060fab --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2012 Eloy Durán <eloy.de.enige@gmail.com> + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/README.md b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/README.md new file mode 100644 index 0000000..48cdc31 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/README.md @@ -0,0 +1,95 @@ +# Xcodeproj + +[![Build Status](https://github.com/CocoaPods/Xcodeproj/workflows/Specs/badge.svg)](https://github.com/CocoaPods/Xcodeproj/actions/workflows/Specs.yml) +[![Maintainability](https://api.codeclimate.com/v1/badges/40ae104586c859d3581e/maintainability)](https://codeclimate.com/github/CocoaPods/Xcodeproj/maintainability) +[![Test Coverage](https://api.codeclimate.com/v1/badges/40ae104586c859d3581e/test_coverage)](https://codeclimate.com/github/CocoaPods/Xcodeproj/test_coverage) + +Xcodeproj lets you create and modify Xcode projects from [Ruby][ruby]. +Script boring management tasks or build Xcode-friendly libraries. Also includes +support for Xcode workspaces (`.xcworkspace`), configuration files (`.xcconfig`) and +Xcode Scheme files (`.xcscheme`). + +It is used in [CocoaPods](https://github.com/CocoaPods/CocoaPods) to create a +collection of supplemental libraries or frameworks, for all platforms Xcode supports. + +The API reference can be found [here](http://www.rubydoc.info/gems/xcodeproj). + +## Installing Xcodeproj + +Xcodeproj itself installs through RubyGems, the Ruby package manager. Install it +by performing the following command: + + $ [sudo] gem install xcodeproj + +## Quickstart + +To begin editing an xcodeproj file start by opening it as an Xcodeproj with: + +```ruby +require 'xcodeproj' +project_path = '/your_path/your_project.xcodeproj' +project = Xcodeproj::Project.open(project_path) +``` + +#### Some Small Examples To Get You Started + +> Look through all targets + +```ruby +project.targets.each do |target| + puts target.name +end +``` + +> Get all source files for a target + +```ruby +target = project.targets.first +files = target.source_build_phase.files.to_a.map do |pbx_build_file| + pbx_build_file.file_ref.real_path.to_s + +end.select do |path| + path.end_with?(".m", ".mm", ".swift") + +end.select do |path| + File.exists?(path) +end +``` + +> Set a specific build configuration to all targets + +```ruby +project.targets.each do |target| + target.build_configurations.each do |config| + config.build_settings['MY_CUSTOM_FLAG'] ||= 'TRUE' + end +end +project.save +``` + +## Command Line Tool + +Installing the Xcodeproj gem will also install a command-line tool `xcodeproj` which you can +use to generate project diffs, target diffs, output all configurations and show a YAML representation. + +For more information consult `xcodeproj --help`. + +## Collaborate + +All Xcodeproj development happens on [GitHub][xcodeproj]. Contributing patches +is really easy and gratifying. + +Follow [@CocoaPods][twitter] to get up to date information about what's +going on in the CocoaPods world. + + +## LICENSE + +These works are available under the MIT license. See the [LICENSE][license] file +for more info. + +[twitter]: http://twitter.com/CocoaPods +[ruby]: http://www.ruby-lang.org/en/ +[xcodeproj]: https://github.com/cocoapods/xcodeproj +[tickets]: https://github.com/cocoapods/xcodeproj/issues +[license]: LICENSE diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/bin/xcodeproj b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/bin/xcodeproj new file mode 100644 index 0000000..5d163fe --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/bin/xcodeproj @@ -0,0 +1,10 @@ +#!/usr/bin/env ruby + +if $PROGRAM_NAME == __FILE__ + ENV['BUNDLE_GEMFILE'] = File.expand_path('../../Gemfile', __FILE__) + require 'bundler/setup' +end + +require 'xcodeproj' + +Xcodeproj::Command.run(ARGV) diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj.rb b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj.rb new file mode 100644 index 0000000..3a179d0 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj.rb @@ -0,0 +1,29 @@ +module Xcodeproj + require 'pathname' + require 'claide' + require 'colored2' + + class PlainInformative < StandardError + include CLAide::InformativeError + end + + class Informative < PlainInformative + def message + super !~ /\[!\]/ ? "[!] #{super}\n".red : super + end + end + + require 'xcodeproj/gem_version' + require 'xcodeproj/user_interface' + + autoload :Command, 'xcodeproj/command' + autoload :Config, 'xcodeproj/config' + autoload :Constants, 'xcodeproj/constants' + autoload :Differ, 'xcodeproj/differ' + autoload :Helper, 'xcodeproj/helper' + autoload :Plist, 'xcodeproj/plist' + autoload :Project, 'xcodeproj/project' + autoload :Workspace, 'xcodeproj/workspace' + autoload :XCScheme, 'xcodeproj/scheme' + autoload :XcodebuildHelper, 'xcodeproj/xcodebuild_helper' +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/command.rb b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/command.rb new file mode 100644 index 0000000..c11a658 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/command.rb @@ -0,0 +1,66 @@ +module Xcodeproj + require 'colored2' + require 'claide' + + class Command < CLAide::Command + require 'xcodeproj/command/config_dump' + require 'xcodeproj/command/target_diff' + require 'xcodeproj/command/project_diff' + require 'xcodeproj/command/show' + require 'xcodeproj/command/sort' + + self.abstract_command = true + self.command = 'xcodeproj' + self.version = VERSION + self.description = 'Xcodeproj lets you create and modify Xcode projects from Ruby.' + self.plugin_prefixes = %w(claide xcodeproj) + + def initialize(argv) + super + unless self.ansi_output? + Colored2.disable! + String.send(:define_method, :colorize) { |string, _| string } + end + end + + private + + def xcodeproj_path + unless @xcodeproj_path + projects = Dir.glob('*.xcodeproj') + if projects.size == 1 + xcodeproj_path = projects.first + elsif projects.size > 1 + raise Informative, 'There are more than one Xcode project documents ' \ + 'in the current working directory. Please specify ' \ + 'the project as the first argument, or specify ' \ + 'which to use with the --project option if using ' \ + 'target-diff.' + else + raise Informative, 'No Xcode project document found in the current ' \ + 'working directory. Please specify the project ' \ + 'as the first argument, or specify which to use ' \ + 'with the --project option if using target-diff.' \ + end + @xcodeproj_path = Pathname.new(xcodeproj_path).expand_path + end + @xcodeproj_path + end + + def open_project!(*paths) + if paths.empty? + [xcodeproj] + else + paths.map { |path| Project.open(path) } + end + end + + def xcodeproj_path=(path) + @xcodeproj_path = path && Pathname.new(path).expand_path + end + + def xcodeproj + @xcodeproj ||= Project.open(xcodeproj_path) + end + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/command/config_dump.rb b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/command/config_dump.rb new file mode 100644 index 0000000..dac7645 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/command/config_dump.rb @@ -0,0 +1,91 @@ +module Xcodeproj + class Command + class ConfigDump < Command + self.description = <<-eos + Dumps the build settings of all project targets for all configurations in + directories named by the target in given output directory. + + It extracts common build settings in a per target base.xcconfig file. + + If no `PROJECT` is specified then the current work directory is searched + for one. + + If no `OUTPUT` is specified then the project directory will be used. + eos + + self.summary = 'Dumps the build settings of all project targets for ' \ + 'all configurations in directories named by the target ' \ + 'in the given output directory.' + + self.arguments = [ + CLAide::Argument.new('PROJECT', false), + CLAide::Argument.new('OUTPUT', false), + ] + + def initialize(argv) + self.xcodeproj_path = argv.shift_argument + @output_path = Pathname(argv.shift_argument || '.') + + super + end + + def validate! + super + + raise Informative, 'The output path must be a directory.' unless @output_path.directory? + open_project! + end + + def run + dump_all_configs(xcodeproj, 'Project') + + xcodeproj.targets.each do |target| + dump_all_configs(target, target.name) + end + end + + def dump_all_configs(configurable, name) + path = Pathname(name) + + # Dump base configuration to file + base_settings = extract_common_settings!(configurable.build_configurations) + base_file_path = path + "#{name}_base.xcconfig" + dump_config_to_file(base_settings, base_file_path) + + # Dump each configuration to file + configurable.build_configurations.each do |config| + settings = config.build_settings + dump_config_to_file(settings, path + "#{name}_#{config.name.downcase}.xcconfig", [base_file_path]) + end + end + + def extract_common_settings!(build_configurations) + # Grasp all common build settings + all_build_settings = build_configurations.map(&:build_settings) + common_build_settings = all_build_settings.reduce do |settings, config_build_settings| + settings.select { |key, value| value == config_build_settings[key] } + end + + # Remove all common build settings from each configuration specific build settings + build_configurations.each do |config| + config.build_settings.reject! { |key| !common_build_settings[key].nil? } + end + + common_build_settings + end + + def dump_config_to_file(settings, file_path, includes = []) + dir = @output_path + file_path + '..' + dir.mkpath + + settings = Hash[settings.map do |k, v| + [k, Array(v).join(' ')] + end] + + config = Config.new(settings) + config.includes = includes + config.save_as(@output_path + file_path) + end + end + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/command/project_diff.rb b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/command/project_diff.rb new file mode 100644 index 0000000..2f5d553 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/command/project_diff.rb @@ -0,0 +1,56 @@ +module Xcodeproj + class Command + class ProjectDiff < Command + self.summary = 'Shows the difference between two projects' + + self.description = summary + <<-EOS.gsub(/ {8}/, '') + + It shows the difference in a UUID agnostic fashion. + + To reduce the noise (and to simplify implementation) differences in the + order of arrays are ignored. + EOS + + def self.options + [ + ['--ignore=KEY', 'A key to ignore in the comparison. Can be specified multiple times.'], + ].concat(super) + end + + self.arguments = [ + CLAide::Argument.new('PROJECT1', true), + CLAide::Argument.new('PROJECT2', true), + ] + + def initialize(argv) + @path_project1 = argv.shift_argument + @path_project2 = argv.shift_argument + @keys_to_ignore = argv.all_options('ignore') + super + end + + def validate! + super + @project1, @project2 = open_project!(@path_project1, @path_project2) + end + + def run + hash_1 = @project1.to_tree_hash.dup + hash_2 = @project2.to_tree_hash.dup + @keys_to_ignore.each do |key| + Differ.clean_hash!(hash_1, key) + Differ.clean_hash!(hash_2, key) + end + + diff = Differ.project_diff(hash_1, hash_2, @path_project1, @path_project2) + + require 'yaml' + yaml = diff.to_yaml + yaml.gsub!(@path_project1, @path_project1.cyan) + yaml.gsub!(@path_project2, @path_project2.magenta) + yaml.gsub!(':diff:', 'diff:'.yellow) + puts yaml + end + end + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/command/show.rb b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/command/show.rb new file mode 100644 index 0000000..5c36c06 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/command/show.rb @@ -0,0 +1,60 @@ +module Xcodeproj + class Command + class Show < Command + self.summary = 'Shows an overview of a project in a YAML representation.' + + def self.options + [ + ['--format=[hash|tree_hash|raw]', 'YAML output format'], + ].concat(super) + end + + self.arguments = [ + CLAide::Argument.new('PROJECT', false), + ] + + def initialize(argv) + self.xcodeproj_path = argv.shift_argument + @output_format = argv.option('format') + @output_format &&= @output_format.to_sym + super + end + + def validate + super + unless [nil, :hash, :tree_hash, :raw].include?(@output_format) + help! "Unknown format `#{@output_format}`" + end + open_project! + end + + def run + require 'yaml' + + if @output_format + case @output_format + when :hash + puts xcodeproj.to_hash.to_yaml + when :tree_hash + puts xcodeproj.to_tree_hash.to_yaml + when :raw + puts xcodeproj.to_yaml + end + return + end + + pretty_print = xcodeproj.pretty_print + sections = [] + pretty_print.each do |key, value| + section = key.green + yaml = value.to_yaml + yaml.gsub!(/^---$/, '') + yaml.gsub!(/^-/, "\n-") + yaml.prepend(section) + sections << yaml + end + puts sections * "\n\n" + end + end + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/command/sort.rb b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/command/sort.rb new file mode 100644 index 0000000..5f4b70f --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/command/sort.rb @@ -0,0 +1,44 @@ +module Xcodeproj + class Command + class Sort < Command + self.description = <<-eos + Sorts the given project. + + If no `PROJECT' is specified then the current work directory is searched for one. + eos + + self.summary = 'Sorts the given project.' + + def self.options + [ + ['--group-option=[above|below]', 'The position of the groups when sorting. If no option is specified, sorting will interleave groups and files.'], + ].concat(super) + end + + self.arguments = [ + CLAide::Argument.new('PROJECT', false), + ] + + def initialize(argv) + self.xcodeproj_path = argv.shift_argument + @group_option = argv.option('group-option') + @group_option &&= @group_option.to_sym + super + end + + def validate! + super + unless [nil, :above, :below].include?(@group_option) + help! "Unknown format `#{@group_option}`" + end + open_project! + end + + def run + xcodeproj.sort(:groups_position => @group_option) + xcodeproj.save + puts "The `#{File.basename(xcodeproj_path)}` project was sorted" + end + end + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/command/target_diff.rb b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/command/target_diff.rb new file mode 100644 index 0000000..7390bee --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/command/target_diff.rb @@ -0,0 +1,43 @@ +module Xcodeproj + class Command + class TargetDiff < Command + self.summary = 'Shows the difference between two targets' + + def self.options + [ + ['--project PATH', 'The Xcode project document to use.'], + ].concat(super) + end + + self.arguments = [ + CLAide::Argument.new('TARGET1', true), + CLAide::Argument.new('TARGET2', true), + ] + + def initialize(argv) + @target1 = argv.shift_argument + @target2 = argv.shift_argument + self.xcodeproj_path = argv.option('--project') + super + end + + def validate! + super + open_project! + end + + def run + require 'yaml' + differ = Helper::TargetDiff.new(xcodeproj, @target1, @target2) + files = differ.new_source_build_files.map do |build_file| + { + 'Name' => build_file.file_ref.name, + 'Path' => build_file.file_ref.path, + 'Build settings' => build_file.settings, + } + end + puts files.to_yaml + end + end + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/config.rb b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/config.rb new file mode 100644 index 0000000..e022602 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/config.rb @@ -0,0 +1,386 @@ +# frozen_string_literal: true +require 'shellwords' +require 'xcodeproj/config/other_linker_flags_parser' + +module Xcodeproj + # This class holds the data for a Xcode build settings file (xcconfig) and + # provides support for serialization. + # + class Config + require 'set' + + KEY_VALUE_PATTERN = / + ( + [^=\[]+ # Any char, but not an assignment operator + # or subscript (non-greedy) + (?: # One or multiple conditional subscripts + \[ + [^\]]* # The subscript key + (?: + = # The subscript comparison operator + [^\]]* # The subscript value + )? + \] + )* + ) + \s* # Whitespaces after the key (needed because subscripts + # always end with ']') + = # The assignment operator + (.*) # The value + /x + private_constant :KEY_VALUE_PATTERN + + INHERITED = %w($(inherited) ${inherited}).freeze + private_constant :INHERITED + + INHERITED_REGEXP = Regexp.union(INHERITED) + private_constant :INHERITED_REGEXP + + # @return [Hash{String => String}] The attributes of the settings file + # excluding frameworks, weak_framework and libraries. + # + attr_accessor :attributes + + # @return [Hash{Symbol => Set<String>}] The other linker flags by key. + # Xcodeproj handles them in a dedicated way to prevent duplication + # of the libraries and of the frameworks. + # + attr_accessor :other_linker_flags + + # @return [Array] The list of the configuration files included by this + # configuration file (`#include "SomeConfig"`). + # + attr_accessor :includes + + # @param [Hash, File, String] xcconfig_hash_or_file + # The initial data. + # + def initialize(xcconfig_hash_or_file = {}) + @attributes = {} + @includes = [] + @other_linker_flags = {} + [:simple, :frameworks, :weak_frameworks, :libraries, :arg_files, :force_load].each do |key| + @other_linker_flags[key] = Set.new + end + merge!(extract_hash(xcconfig_hash_or_file)) + end + + def inspect + to_hash.inspect + end + + def ==(other) + other.attributes == attributes && other.other_linker_flags == other_linker_flags && other.includes == includes + end + + public + + # @!group Serialization + #-------------------------------------------------------------------------# + + # Sorts the internal data by setting name and serializes it in the xcconfig + # format. + # + # @example + # + # config = Config.new('PODS_ROOT' => '"$(SRCROOT)/Pods"', 'OTHER_LDFLAGS' => '-lxml2') + # config.to_s # => "OTHER_LDFLAGS = -lxml2\nPODS_ROOT = \"$(SRCROOT)/Pods\"" + # + # @return [String] The serialized internal data. + # + def to_s(prefix = nil) + include_lines = includes.map { |path| "#include \"#{normalized_xcconfig_path(path)}\"" } + settings = to_hash(prefix).sort_by(&:first).map { |k, v| "#{k} = #{v}".strip } + (include_lines + settings).join("\n") << "\n" + end + + # Writes the serialized representation of the internal data to the given + # path. + # + # @param [Pathname] pathname + # The file where the data should be written to. + # + # @return [void] + # + def save_as(pathname, prefix = nil) + if File.exist?(pathname) + return if Config.new(pathname) == self + end + + pathname.open('w') { |file| file << to_s(prefix) } + end + + # The hash representation of the xcconfig. The hash includes the + # frameworks, the weak frameworks, the libraries and the simple other + # linker flags in the `Other Linker Flags` (`OTHER_LDFLAGS`). + # + # @note All the values are sorted to have a consistent output in Ruby + # 1.8.7. + # + # @return [Hash] The hash representation + # + def to_hash(prefix = nil) + list = [] + list += other_linker_flags[:simple].to_a.sort + modifiers = { + :frameworks => '-framework ', + :weak_frameworks => '-weak_framework ', + :libraries => '-l', + :arg_files => '@', + :force_load => '-force_load', + } + [:libraries, :frameworks, :weak_frameworks, :arg_files, :force_load].each do |key| + modifier = modifiers[key] + sorted = other_linker_flags[key].to_a.sort + if key == :force_load + list += sorted.map { |l| %(#{modifier} #{l}) } + else + list += sorted.map { |l| %(#{modifier}"#{l}") } + end + end + + result = attributes.dup + result['OTHER_LDFLAGS'] = list.join(' ') unless list.empty? + result.reject! { |_, v| INHERITED.any? { |i| i == v.to_s.strip } } + + result = @includes.map do |incl| + path = File.expand_path(incl, @filepath.dirname) + if File.readable? path + Xcodeproj::Config.new(path).to_hash + else + {} + end + end.inject(&:merge).merge(result) unless @filepath.nil? || @includes.empty? + + if prefix + Hash[result.map { |k, v| [prefix + k, v] }] + else + result + end + end + + alias_method :to_h, :to_hash + + # @return [Set<String>] The list of the frameworks required by this + # settings file. + # + def frameworks + other_linker_flags[:frameworks] + end + + # @return [Set<String>] The list of the *weak* frameworks required by + # this settings file. + # + def weak_frameworks + other_linker_flags[:weak_frameworks] + end + + # @return [Set<String>] The list of the libraries required by this + # settings file. + # + def libraries + other_linker_flags[:libraries] + end + + # @return [Set<String>] The list of the arg files required by this + # settings file. + # + def arg_files + other_linker_flags[:arg_files] + end + + public + + # @!group Merging + #-------------------------------------------------------------------------# + + # Merges the given xcconfig representation in the receiver. + # + # @example + # + # config = Config.new('PODS_ROOT' => '"$(SRCROOT)/Pods"', 'OTHER_LDFLAGS' => '-lxml2') + # config.merge!('OTHER_LDFLAGS' => '-lz', 'HEADER_SEARCH_PATHS' => '"$(PODS_ROOT)/Headers"') + # config.to_hash # => { 'PODS_ROOT' => '"$(SRCROOT)/Pods"', 'OTHER_LDFLAGS' => '-lxml2 -lz', 'HEADER_SEARCH_PATHS' => '"$(PODS_ROOT)/Headers"' } + # + # @note If a key in the given hash already exists in the internal data + # then its value is appended. + # + # @param [Hash, Config] config + # The xcconfig representation to merge. + # + # @todo The logic to normalize an hash should be extracted and the + # initializer should not call this method. + # + # @return [void] + # + def merge!(xcconfig) + if xcconfig.is_a? Config + merge_attributes!(xcconfig.attributes) + other_linker_flags.keys.each do |key| + other_linker_flags[key].merge(xcconfig.other_linker_flags[key]) + end + else + merge_attributes!(xcconfig.to_hash) + if flags = attributes.delete('OTHER_LDFLAGS') + flags_by_key = OtherLinkerFlagsParser.parse(flags) + other_linker_flags.keys.each do |key| + other_linker_flags[key].merge(flags_by_key[key]) + end + end + end + end + alias_method :<<, :merge! + + # Creates a new #{Config} with the data of the receiver merged with the + # given xcconfig representation. + # + # @param [Hash, Config] config + # The xcconfig representation to merge. + # + # @return [Config] the new xcconfig. + # + def merge(config) + dup.tap { |x| x.merge!(config) } + end + + # @return [Config] A copy of the receiver. + # + def dup + Xcodeproj::Config.new(to_hash.dup) + end + + #-------------------------------------------------------------------------# + + private + + # @!group Private Helpers + + # Returns a hash from the given argument reading it from disk if necessary. + # + # @param [String, Pathname, Hash] argument + # The source from where the hash should be extracted. + # + # @return [Hash] + # + def extract_hash(argument) + return argument if argument.is_a?(Hash) + if argument.respond_to? :read + @filepath = Pathname.new(argument.to_path) + hash_from_file_content(argument.read) + elsif File.readable?(argument.to_s) + @filepath = Pathname.new(argument.to_s) + hash_from_file_content(File.read(argument)) + else + argument + end + end + + # Returns a hash from the string representation of an Xcconfig file. + # + # @param [String] string + # The string representation of an xcconfig file. + # + # @return [Hash] the hash containing the xcconfig data. + # + def hash_from_file_content(string) + hash = {} + string.split("\n").each do |line| + uncommented_line = strip_comment(line) + if include = extract_include(uncommented_line) + @includes.push normalized_xcconfig_path(include) + else + key, value = extract_key_value(uncommented_line) + next unless key + value.gsub!(INHERITED_REGEXP) { |m| hash.fetch(key, m) } + hash[key] = value + end + end + hash + end + + # Merges the given attributes hash while ensuring values are not duplicated. + # + # @param [Hash] attributes + # The attributes hash to merge into @attributes. + # + # @return [void] + # + def merge_attributes!(attributes) + @attributes.merge!(attributes) do |_, v1, v2| + v1 = v1.strip + v2 = v2.strip + v1_split = v1.shellsplit + v2_split = v2.shellsplit + if (v2_split - v1_split).empty? || v1_split.first(v2_split.size) == v2_split + v1 + elsif v2_split.first(v1_split.size) == v1_split + v2 + else + "#{v1} #{v2}" + end + end + end + + # Strips the comments from a line of an xcconfig string. + # + # @param [String] line + # the line to process. + # + # @return [String] the uncommented line. + # + def strip_comment(line) + line.partition('//').first + end + + # Returns the file included by a line of an xcconfig string if present. + # + # @param [String] line + # the line to process. + # + # @return [String] the included file. + # @return [Nil] if no include was found in the line. + # + def extract_include(line) + regexp = /#include\??\s*"(.+)"/ + match = line.match(regexp) + match[1] if match + end + + # Returns the key and the value described by the given line of an xcconfig. + # + # @param [String] line + # the line to process. + # + # @return [Array] A tuple where the first entry is the key and the second + # entry is the value. + # + def extract_key_value(line) + match = line.match(KEY_VALUE_PATTERN) + if match + key = match[1] + value = match[2] + [key.strip, value.strip] + else + [] + end + end + + # Normalizes the given path to an xcconfing file to be used in includes, + # appending the extension if necessary. + # + # @param [String] path + # The path of the file which will be included in the xcconfig. + # + # @return [String] The normalized path. + # + def normalized_xcconfig_path(path) + if File.extname(path) == '.xcconfig' + path + else + "#{path}.xcconfig" + end + end + + #-------------------------------------------------------------------------# + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/config/other_linker_flags_parser.rb b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/config/other_linker_flags_parser.rb new file mode 100644 index 0000000..31eccef --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/config/other_linker_flags_parser.rb @@ -0,0 +1,73 @@ +require 'shellwords' + +module Xcodeproj + class Config + # Parses other linker flags values. + # + module OtherLinkerFlagsParser + # @return [Hash{Symbol, Array[String]}] Splits the given + # other linker flags value by type. + # + # @param [String, Array] flags + # The other linker flags value. + # + def self.parse(flags) + result = { + :frameworks => [], + :weak_frameworks => [], + :libraries => [], + :arg_files => [], + :simple => [], + :force_load => [], + } + + key = nil + if flags.is_a? String + flags = split(flags) + end + flags.each do |token| + case token + when '-framework' + key = :frameworks + when '-weak_framework' + key = :weak_frameworks + when '-l' + key = :libraries + when '@' + key = :arg_files + when '-force_load' + key = :force_load + else + if key + result[key] << token + key = nil + else + result[:simple] << token + end + end + end + result + end + + # @return [Array<String>] Split the given other linker + # flags value, taking into account quoting and + # the fact that the `-l` flag might omit the + # space. + # + # @param [String] flags + # The other linker flags value. + # + def self.split(flags) + flags.strip.shellsplit.flat_map do |string| + if string =~ /\A-l.+/ + ['-l', string[2..-1]] + elsif string =~ /\A@.+/ + ['@', string[1..-1]] + else + string + end + end + end + end + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/constants.rb b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/constants.rb new file mode 100644 index 0000000..f7e563f --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/constants.rb @@ -0,0 +1,476 @@ +module Xcodeproj + # This modules groups all the constants known to Xcodeproj. + # + module Constants + # @return [String] The last known iOS SDK (stable). + # + LAST_KNOWN_IOS_SDK = '18.0' + + # @return [String] The last known OS X SDK (stable). + # + LAST_KNOWN_OSX_SDK = '15.0' + + # @return [String] The last known tvOS SDK (stable). + # + LAST_KNOWN_TVOS_SDK = '18.0' + + # @return [String] The last known visionOS SDK (unstable). + # + LAST_KNOWN_VISIONOS_SDK = '2.0' + + # @return [String] The last known watchOS SDK (stable). + # + LAST_KNOWN_WATCHOS_SDK = '11.0' + + # @return [String] The last known archive version to Xcodeproj. + # + LAST_KNOWN_ARCHIVE_VERSION = 1 + + # @return [String] The last known Swift version (stable). + # + LAST_KNOWN_SWIFT_VERSION = '5.0' + + # @return [String] The default object version for Xcodeproj. + # + DEFAULT_OBJECT_VERSION = 46 + + # @return [String] The last known object version to Xcodeproj. + # + LAST_KNOWN_OBJECT_VERSION = 77 + + # @return [String] The last known Xcode version to Xcodeproj. + # + LAST_UPGRADE_CHECK = '1600' + + # @return [String] The last known Xcode version to Xcodeproj. + # + LAST_SWIFT_UPGRADE_CHECK = '1600' + + # @return [String] The version of `.xcscheme` files supported by Xcodeproj + # + XCSCHEME_FORMAT_VERSION = '1.3' + + # @return [Hash] The all the known ISAs grouped by superclass. + # + KNOWN_ISAS = { + 'AbstractObject' => %w( + PBXBuildFile + AbstractBuildPhase + PBXBuildRule + XCBuildConfiguration + XCConfigurationList + PBXContainerItemProxy + PBXFileReference + PBXGroup + PBXProject + PBXTargetDependency + PBXReferenceProxy + AbstractTarget + ), + + 'AbstractBuildPhase' => %w( + PBXCopyFilesBuildPhase + PBXResourcesBuildPhase + PBXSourcesBuildPhase + PBXFrameworksBuildPhase + PBXHeadersBuildPhase + PBXShellScriptBuildPhase + ), + + 'AbstractTarget' => %w( + PBXNativeTarget + PBXAggregateTarget + PBXLegacyTarget + ), + + 'PBXGroup' => %w( + XCVersionGroup + PBXVariantGroup + ), + }.freeze + + # @return [Hash] The known file types corresponding to each extension. + # + FILE_TYPES_BY_EXTENSION = { + 'a' => 'archive.ar', + 'apns' => 'text', + 'app' => 'wrapper.application', + 'appex' => 'wrapper.app-extension', + 'bundle' => 'wrapper.plug-in', + 'cpp' => 'sourcecode.cpp.cpp', + 'dylib' => 'compiled.mach-o.dylib', + 'entitlements' => 'text.plist.entitlements', + 'framework' => 'wrapper.framework', + 'gif' => 'image.gif', + 'gpx' => 'text.xml', + 'h' => 'sourcecode.c.h', + 'hpp' => 'sourcecode.cpp.h', + 'm' => 'sourcecode.c.objc', + 'markdown' => 'text', + 'mdimporter' => 'wrapper.cfbundle', + 'modulemap' => 'sourcecode.module', + 'mov' => 'video.quicktime', + 'mp3' => 'audio.mp3', + 'octest' => 'wrapper.cfbundle', + 'pch' => 'sourcecode.c.h', + 'plist' => 'text.plist.xml', + 'png' => 'image.png', + 'sh' => 'text.script.sh', + 'sks' => 'file.sks', + 'storyboard' => 'file.storyboard', + 'strings' => 'text.plist.strings', + 'swift' => 'sourcecode.swift', + 'xcassets' => 'folder.assetcatalog', + 'xcconfig' => 'text.xcconfig', + 'xcdatamodel' => 'wrapper.xcdatamodel', + 'xcodeproj' => 'wrapper.pb-project', + 'xctest' => 'wrapper.cfbundle', + 'xib' => 'file.xib', + 'zip' => 'archive.zip', + }.freeze + + # @return [Hash] The compatibility version string for different object versions. + # + COMPATIBILITY_VERSION_BY_OBJECT_VERSION = { + 77 => 'Xcode 16.0', + 63 => 'Xcode 15.3', + 60 => 'Xcode 15.0', + 56 => 'Xcode 14.0', + 55 => 'Xcode 13.0', + 54 => 'Xcode 12.0', + 53 => 'Xcode 11.4', + 52 => 'Xcode 11.0', + 51 => 'Xcode 10.0', + 50 => 'Xcode 9.3', + 48 => 'Xcode 8.0', + 47 => 'Xcode 6.3', + 46 => 'Xcode 3.2', + 45 => 'Xcode 3.1', + }.freeze + + # @return [Hash] The uniform type identifier of various product types. + # + PRODUCT_TYPE_UTI = { + :application => 'com.apple.product-type.application', + :application_on_demand_install_capable => 'com.apple.product-type.application.on-demand-install-capable', + :framework => 'com.apple.product-type.framework', + :dynamic_library => 'com.apple.product-type.library.dynamic', + :static_library => 'com.apple.product-type.library.static', + :bundle => 'com.apple.product-type.bundle', + :octest_bundle => 'com.apple.product-type.bundle', + :unit_test_bundle => 'com.apple.product-type.bundle.unit-test', + :ui_test_bundle => 'com.apple.product-type.bundle.ui-testing', + :app_extension => 'com.apple.product-type.app-extension', + :command_line_tool => 'com.apple.product-type.tool', + :watch_app => 'com.apple.product-type.application.watchapp', + :watch2_app => 'com.apple.product-type.application.watchapp2', + :watch2_app_container => 'com.apple.product-type.application.watchapp2-container', + :watch_extension => 'com.apple.product-type.watchkit-extension', + :watch2_extension => 'com.apple.product-type.watchkit2-extension', + :tv_extension => 'com.apple.product-type.tv-app-extension', + :messages_application => 'com.apple.product-type.application.messages', + :messages_extension => 'com.apple.product-type.app-extension.messages', + :sticker_pack => 'com.apple.product-type.app-extension.messages-sticker-pack', + :xpc_service => 'com.apple.product-type.xpc-service', + }.freeze + + # @return [Hash] The extensions or the various product UTIs. + # + PRODUCT_UTI_EXTENSIONS = { + :application => 'app', + :application_on_demand_install_capable => 'app', + :framework => 'framework', + :dynamic_library => 'dylib', + :static_library => 'a', + :bundle => 'bundle', + :octest_bundle => 'octest', + :unit_test_bundle => 'xctest', + :ui_test_bundle => 'xctest', + :app_extension => 'appex', + :messages_application => 'app', + :messages_extension => 'appex', + :sticker_pack => 'appex', + :watch2_extension => 'appex', + :watch2_app => 'app', + :watch2_app_container => 'app', + }.freeze + + # @return [Hash] The common build settings grouped by platform, and build + # configuration name. + # + COMMON_BUILD_SETTINGS = { + :all => { + # empty? + # come from the project settings + }.freeze, + [:debug] => { + # empty? + # come from the project settings + }.freeze, + [:release] => { + # empty? + # come from the project settings + }.freeze, + [:ios] => { + 'SDKROOT' => 'iphoneos', + }.freeze, + [:osx] => { + 'SDKROOT' => 'macosx', + }.freeze, + [:tvos] => { + 'SDKROOT' => 'appletvos', + }.freeze, + [:visionos] => { + 'SDKROOT' => 'xros', + }.freeze, + [:watchos] => { + 'SDKROOT' => 'watchos', + }.freeze, + [:debug, :osx] => { + # Empty? + }.freeze, + [:release, :osx] => { + # Empty? + }.freeze, + [:debug, :ios] => { + # Empty? + }.freeze, + [:release, :ios] => { + 'VALIDATE_PRODUCT' => 'YES', + }.freeze, + [:debug, :tvos] => { + # Empty? + }.freeze, + [:release, :tvos] => { + 'VALIDATE_PRODUCT' => 'YES', + }.freeze, + [:debug, :watchos] => { + # Empty? + }.freeze, + [:release, :watchos] => { + 'VALIDATE_PRODUCT' => 'YES', + }.freeze, + [:swift] => { + # Empty? + # The swift version, like deployment target, is set in + # ProjectHelper#common_build_settings + }.freeze, + [:debug, :application, :swift] => { + # Empty? + }.freeze, + [:debug, :swift] => { + # Swift optimization settings are provided by the project settings + }.freeze, + [:release, :swift] => { + # Swift optimization settings are provided by the project settings + }.freeze, + [:debug, :static_library, :swift] => { + }.freeze, + [:framework] => { + 'CURRENT_PROJECT_VERSION' => '1', + 'DEFINES_MODULE' => 'YES', + 'DYLIB_COMPATIBILITY_VERSION' => '1', + 'DYLIB_CURRENT_VERSION' => '1', + 'DYLIB_INSTALL_NAME_BASE' => '@rpath', + 'INSTALL_PATH' => '$(LOCAL_LIBRARY_DIR)/Frameworks', + 'PRODUCT_NAME' => '$(TARGET_NAME:c99extidentifier)', + 'SKIP_INSTALL' => 'YES', + 'VERSION_INFO_PREFIX' => '', + 'VERSIONING_SYSTEM' => 'apple-generic', + }.freeze, + [:ios, :framework] => { + 'LD_RUNPATH_SEARCH_PATHS' => '$(inherited) @executable_path/Frameworks @loader_path/Frameworks', + 'TARGETED_DEVICE_FAMILY' => '1,2', + }.freeze, + [:osx, :framework] => { + 'COMBINE_HIDPI_IMAGES' => 'YES', + 'LD_RUNPATH_SEARCH_PATHS' => '$(inherited) @executable_path/../Frameworks @loader_path/Frameworks', + }.freeze, + [:watchos, :framework] => { + 'APPLICATION_EXTENSION_API_ONLY' => 'YES', + 'LD_RUNPATH_SEARCH_PATHS' => '$(inherited) @executable_path/Frameworks @loader_path/Frameworks', + 'TARGETED_DEVICE_FAMILY' => '4', + }.freeze, + [:tvos, :framework] => { + 'LD_RUNPATH_SEARCH_PATHS' => '$(inherited) @executable_path/Frameworks @loader_path/Frameworks', + 'TARGETED_DEVICE_FAMILY' => '3', + }.freeze, + [:framework, :swift] => { + 'DEFINES_MODULE' => 'YES', + }.freeze, + [:osx, :static_library] => { + 'EXECUTABLE_PREFIX' => 'lib', + 'SKIP_INSTALL' => 'YES', + }.freeze, + [:ios, :static_library] => { + 'OTHER_LDFLAGS' => '-ObjC', + 'SKIP_INSTALL' => 'YES', + 'TARGETED_DEVICE_FAMILY' => '1,2', + }.freeze, + [:watchos, :static_library] => { + 'OTHER_LDFLAGS' => '-ObjC', + 'SKIP_INSTALL' => 'YES', + 'TARGETED_DEVICE_FAMILY' => '4', + }.freeze, + [:tvos, :static_library] => { + 'OTHER_LDFLAGS' => '-ObjC', + 'SKIP_INSTALL' => 'YES', + 'TARGETED_DEVICE_FAMILY' => '3', + }.freeze, + [:osx, :dynamic_library] => { + 'DYLIB_COMPATIBILITY_VERSION' => '1', + 'DYLIB_CURRENT_VERSION' => '1', + 'EXECUTABLE_PREFIX' => 'lib', + 'SKIP_INSTALL' => 'YES', + }.freeze, + [:application] => { + 'ASSETCATALOG_COMPILER_APPICON_NAME' => 'AppIcon', + 'ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME' => 'AccentColor', + }.freeze, + [:ios, :application] => { + 'LD_RUNPATH_SEARCH_PATHS' => '$(inherited) @executable_path/Frameworks', + 'TARGETED_DEVICE_FAMILY' => '1,2', + }.freeze, + [:osx, :application] => { + 'COMBINE_HIDPI_IMAGES' => 'YES', + 'LD_RUNPATH_SEARCH_PATHS' => '$(inherited) @executable_path/../Frameworks', + }.freeze, + [:watchos, :application] => { + 'SKIP_INSTALL' => 'YES', + 'TARGETED_DEVICE_FAMILY' => '4', + }.freeze, + [:tvos, :application] => { + 'ASSETCATALOG_COMPILER_APPICON_NAME' => 'App Icon & Top Shelf Image', + 'LD_RUNPATH_SEARCH_PATHS' => '$(inherited) @executable_path/Frameworks', + 'TARGETED_DEVICE_FAMILY' => '3', + }.freeze, + [:tvos, :application, :swift] => { + 'ENABLE_PREVIEWS' => 'YES', + }.freeze, + [:watchos, :application, :swift] => { + 'ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES' => 'YES', + }.freeze, + [:bundle] => { + 'WRAPPER_EXTENSION' => 'bundle', + 'SKIP_INSTALL' => 'YES', + }.freeze, + [:ios, :bundle] => { + 'SDKROOT' => 'iphoneos', + }.freeze, + [:osx, :bundle] => { + 'COMBINE_HIDPI_IMAGES' => 'YES', + 'INSTALL_PATH' => '$(LOCAL_LIBRARY_DIR)/Bundles', + 'SDKROOT' => 'macosx', + }.freeze, + }.freeze + + # @return [Hash] The default build settings for a new project. + # + PROJECT_DEFAULT_BUILD_SETTINGS = { + :all => { + 'ALWAYS_SEARCH_USER_PATHS' => 'NO', + 'CLANG_ANALYZER_NONNULL' => 'YES', + 'CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION' => 'YES_AGGRESSIVE', + 'CLANG_CXX_LANGUAGE_STANDARD' => 'gnu++14', + 'CLANG_CXX_LIBRARY' => 'libc++', + 'CLANG_ENABLE_MODULES' => 'YES', + 'CLANG_ENABLE_OBJC_ARC' => 'YES', + 'CLANG_ENABLE_OBJC_WEAK' => 'YES', + 'CLANG_WARN__DUPLICATE_METHOD_MATCH' => 'YES', + 'CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING' => 'YES', + 'CLANG_WARN_BOOL_CONVERSION' => 'YES', + 'CLANG_WARN_COMMA' => 'YES', + 'CLANG_WARN_CONSTANT_CONVERSION' => 'YES', + 'CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS' => 'YES', + 'CLANG_WARN_DIRECT_OBJC_ISA_USAGE' => 'YES_ERROR', + 'CLANG_WARN_DOCUMENTATION_COMMENTS' => 'YES', + 'CLANG_WARN_EMPTY_BODY' => 'YES', + 'CLANG_WARN_ENUM_CONVERSION' => 'YES', + 'CLANG_WARN_INFINITE_RECURSION' => 'YES', + 'CLANG_WARN_INT_CONVERSION' => 'YES', + 'CLANG_WARN_NON_LITERAL_NULL_CONVERSION' => 'YES', + 'CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF' => 'YES', + 'CLANG_WARN_OBJC_LITERAL_CONVERSION' => 'YES', + 'CLANG_WARN_OBJC_ROOT_CLASS' => 'YES_ERROR', + 'CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER' => 'YES', + 'CLANG_WARN_RANGE_LOOP_ANALYSIS' => 'YES', + 'CLANG_WARN_STRICT_PROTOTYPES' => 'YES', + 'CLANG_WARN_SUSPICIOUS_MOVE' => 'YES', + 'CLANG_WARN_UNGUARDED_AVAILABILITY' => 'YES_AGGRESSIVE', + 'CLANG_WARN_UNREACHABLE_CODE' => 'YES', + 'COPY_PHASE_STRIP' => 'NO', + 'ENABLE_STRICT_OBJC_MSGSEND' => 'YES', + 'GCC_C_LANGUAGE_STANDARD' => 'gnu11', + 'GCC_NO_COMMON_BLOCKS' => 'YES', + 'GCC_WARN_64_TO_32_BIT_CONVERSION' => 'YES', + 'GCC_WARN_ABOUT_RETURN_TYPE' => 'YES_ERROR', + 'GCC_WARN_UNDECLARED_SELECTOR' => 'YES', + 'GCC_WARN_UNINITIALIZED_AUTOS' => 'YES_AGGRESSIVE', + 'GCC_WARN_UNUSED_FUNCTION' => 'YES', + 'GCC_WARN_UNUSED_VARIABLE' => 'YES', + 'MTL_FAST_MATH' => 'YES', + 'PRODUCT_NAME' => '$(TARGET_NAME)', + 'SWIFT_VERSION' => '5.0', + }, + :release => { + 'DEBUG_INFORMATION_FORMAT' => 'dwarf-with-dsym', + 'ENABLE_NS_ASSERTIONS' => 'NO', + 'MTL_ENABLE_DEBUG_INFO' => 'NO', + 'SWIFT_COMPILATION_MODE' => 'wholemodule', + 'SWIFT_OPTIMIZATION_LEVEL' => '-O', + }.freeze, + :debug => { + 'DEBUG_INFORMATION_FORMAT' => 'dwarf', + 'ENABLE_TESTABILITY' => 'YES', + 'GCC_DYNAMIC_NO_PIC' => 'NO', + 'GCC_OPTIMIZATION_LEVEL' => '0', + 'GCC_PREPROCESSOR_DEFINITIONS' => ['DEBUG=1', '$(inherited)'], + 'MTL_ENABLE_DEBUG_INFO' => 'INCLUDE_SOURCE', + 'ONLY_ACTIVE_ARCH' => 'YES', + 'SWIFT_ACTIVE_COMPILATION_CONDITIONS' => 'DEBUG', + 'SWIFT_OPTIMIZATION_LEVEL' => '-Onone', + }.freeze, + }.freeze + + # @return [Hash] The corresponding numeric value of each copy build phase + # destination. + # + COPY_FILES_BUILD_PHASE_DESTINATIONS = { + :absolute_path => '0', + :products_directory => '16', + :wrapper => '1', + :resources => '7', # default + :executables => '6', + :java_resources => '15', + :frameworks => '10', + :shared_frameworks => '11', + :shared_support => '12', + :plug_ins => '13', + }.freeze + + # @return [Hash] The corresponding numeric value of each proxy type for + # PBXContainerItemProxy. + PROXY_TYPES = { + :native_target => '1', + :reference => '2', + }.freeze + + # @return [Array] The extensions which are associated with header files. + # + HEADER_FILES_EXTENSIONS = %w(.h .hh .hpp .ipp .tpp .hxx .def .inl .inc).freeze + + # @return [Array] The keywords Xcode use to identify a build setting can + # inherit values from a previous precedence level + INHERITED_KEYWORDS = %w( + $(inherited) + ${inherited} + ).freeze + + # @return [Hash] Possible types for a scheme's 'ExecutionAction' node + # + EXECUTION_ACTION_TYPE = { + :shell_script => 'Xcode.IDEStandardExecutionActionsCore.ExecutionActionType.ShellScriptAction', + :send_email => 'Xcode.IDEStandardExecutionActionsCore.ExecutionActionType.SendEmailAction', + }.freeze + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/differ.rb b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/differ.rb new file mode 100644 index 0000000..345e7ec --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/differ.rb @@ -0,0 +1,270 @@ +module Xcodeproj + # Computes the recursive diff of Hashes, Array and other objects. + # + # Useful to compare two projects. Inspired from + # 'active_support/core_ext/hash/diff'. + # + # @example + # h1 = { :common => 'value', :changed => 'v1' } + # h2 = { :common => 'value', :changed => 'v2', :addition => 'new_value' } + # h1.recursive_diff(h2) == { + # :changed => { + # :self => 'v1', + # :other => 'v2' + # }, + # :addition => { + # :self => nil, + # :other => 'new_value' + # } + # } #=> true + # + # + # + # + module Differ + # Computes the recursive difference of two given values. + # + # @param [Object] value_1 + # The first value to compare. + # + # @param [Object] value_2 + # The second value to compare. + # + # @param [Object] key_1 + # The key for the diff of value_1. + # + # @param [Object] key_2 + # The key for the diff of value_2. + # + # @param [Object] id_key + # The key used to identify correspondent hashes in an array. + # + # @return [Hash] The diff + # @return [Nil] if the given values are equal. + # + def self.diff(value_1, value_2, options = {}) + options[:key_1] ||= 'value_1' + options[:key_2] ||= 'value_2' + options[:id_key] ||= nil + + method = if value_1.class == value_2.class + case value_1 + when Hash then :hash_diff + when Array then :array_diff + else :generic_diff + end + else + :generic_diff + end + send(method, value_1, value_2, options) + end + + # Optimized for reducing the noise from the tree hash of projects + # + def self.project_diff(project_1, project_2, key_1 = 'project_1', key_2 = 'project_2') + project_1 = project_1.to_tree_hash unless project_1.is_a?(Hash) + project_2 = project_2.to_tree_hash unless project_2.is_a?(Hash) + options = { + :key_1 => key_1, + :key_2 => key_2, + :id_key => 'displayName', + } + diff(project_1, project_2, options) + end + + #-------------------------------------------------------------------------# + + public + + # @!group Type specific handlers + + # Computes the recursive difference of two hashes. + # + # @see diff + # + def self.hash_diff(value_1, value_2, options) + ensure_class(value_1, Hash) + ensure_class(value_2, Hash) + return nil if value_1 == value_2 + + result = {} + all_keys = (value_1.keys + value_2.keys).uniq + all_keys.each do |key| + key_value_1 = value_1[key] + key_value_2 = value_2[key] + diff = diff(key_value_1, key_value_2, options) + if diff + result[key] = diff if diff + end + end + if result.empty? + nil + else + result + end + end + + # Returns the recursive diff of two arrays. + # + # @see diff + # + def self.array_diff(value_1, value_2, options) + ensure_class(value_1, Array) + ensure_class(value_2, Array) + return nil if value_1 == value_2 + + new_objects_value_1 = array_non_unique_diff(value_1, value_2) + new_objects_value_2 = array_non_unique_diff(value_2, value_1) + return nil if value_1.empty? && value_2.empty? + + matched_diff = {} + if id_key = options[:id_key] + matched_value_1 = [] + matched_value_2 = [] + new_objects_value_1.each do |entry_value_1| + if entry_value_1.is_a?(Hash) + id_value = entry_value_1[id_key] + entry_value_2 = new_objects_value_2.find do |entry| + entry[id_key] == id_value + end + if entry_value_2 + matched_value_1 << entry_value_1 + matched_value_2 << entry_value_2 + diff = diff(entry_value_1, entry_value_2, options) + matched_diff[id_value] = diff if diff + end + end + end + + new_objects_value_1 -= matched_value_1 + new_objects_value_2 -= matched_value_2 + end + + if new_objects_value_1.empty? && new_objects_value_2.empty? + if matched_diff.empty? + nil + else + matched_diff + end + else + result = {} + result[options[:key_1]] = new_objects_value_1 unless new_objects_value_1.empty? + result[options[:key_2]] = new_objects_value_2 unless new_objects_value_2.empty? + result[:diff] = matched_diff unless matched_diff.empty? + result + end + end + + # Returns the diff of two generic objects. + # + # @see diff + # + def self.generic_diff(value_1, value_2, options) + return nil if value_1 == value_2 + + { + options[:key_1] => value_1, + options[:key_2] => value_2, + } + end + + #-------------------------------------------------------------------------# + + public + + # @!group Cleaning + + # Returns a copy of the hash where the given key is removed recursively. + # + # @param [Hash] hash + # The hash to clean + # + # @param [Object] key + # The key to remove. + # + # @return [Hash] A copy of the hash without the key. + # + def self.clean_hash(hash, key) + new_hash = hash.dup + self.clean_hash!(new_hash, key) + new_hash + end + + # Recursively cleans a key from the given hash. + # + # @param [Hash] hash + # The hash to clean + # + # @param [Object] key + # The key to remove. + # + # @return [void] + # + def self.clean_hash!(hash, key) + hash.delete(key) + hash.each do |_, value| + case value + when Hash + clean_hash!(value, key) + when Array + value.each { |entry| clean_hash!(entry, key) if entry.is_a?(Hash) } + end + end + end + + #-------------------------------------------------------------------------# + + private + + # @! Helpers + + # Ensures that the given object belongs to the given class. + # + # @param [Object] object + # The object to check. + # + # @param [Class] klass + # the expected class of the object. + # + # @raise If the object doesn't belong to the given class. + # + # @return [void] + # + def self.ensure_class(object, klass) + raise "Wrong type `#{object.inspect}`" unless object.is_a?(klass) + end + + # Returns the difference between two arrays, taking into account the number of times an element + # repeats in both arrays. + # + # @param [Array] value_1 + # First array to the difference operation. + # + # @param [Array] value_2 + # Second array to the difference operation. + # + # @return [Array] + # + def self.array_non_unique_diff(value_1, value_2) + value_2_elements_by_count = value_2.reduce({}) do |hash, element| + updated_element_hash = hash.key?(element) ? { element => hash[element] + 1 } : { element => 1 } + hash.merge(updated_element_hash) + end + + value_1_elements_by_deletions = + value_1.to_set.map do |element| + times_to_delete_element = value_2_elements_by_count[element] || 0 + next [element, times_to_delete_element] + end.to_h + + value_1.select do |element| + if value_1_elements_by_deletions[element] > 0 + value_1_elements_by_deletions[element] -= 1 + next false + end + next true + end + end + #-------------------------------------------------------------------------# + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/gem_version.rb b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/gem_version.rb new file mode 100644 index 0000000..daeb542 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/gem_version.rb @@ -0,0 +1,5 @@ +module Xcodeproj + # The version of the xcodeproj gem. + # + VERSION = '1.27.0'.freeze unless defined? Xcodeproj::VERSION +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/helper.rb b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/helper.rb new file mode 100644 index 0000000..baaa80d --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/helper.rb @@ -0,0 +1,30 @@ +module Xcodeproj + module Helper + class TargetDiff + attr_reader :project, :target1, :target2 + + def initialize(project, target1_name, target2_name) + @project = project + unless @target1 = @project.targets.find { |target| target.name == target1_name } + raise ArgumentError, "Target 1 by name `#{target1_name}' not found in the project." + end + unless @target2 = @project.targets.find { |target| target.name == target2_name } + raise ArgumentError, "Target 1 by name `#{target2_name}' not found in the project." + end + end + + # @return [Array<PBXBuildFile>] A list of source files (that will be + # compiled) which are in ‘target 2’ but not in ‘target 1’. The + # list is sorted by file path. + # + def new_source_build_files + new = @target2.source_build_phase.files.reject do |target2_build_file| + @target1.source_build_phase.files.any? do |target1_build_file| + target1_build_file.file_ref.path == target2_build_file.file_ref.path + end + end + new.sort_by { |build_file| build_file.file_ref.path } + end + end + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/plist.rb b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/plist.rb new file mode 100644 index 0000000..50b0137 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/plist.rb @@ -0,0 +1,94 @@ +autoload :Nanaimo, 'nanaimo' +autoload :CFPropertyList, 'cfpropertylist' + +module Xcodeproj + # Provides support for loading and serializing property list files. + # + module Plist + # @return [Hash] Returns the native objects loaded from a property list + # file. + # + # @param [#to_s] path + # The path of the file. + # + def self.read_from_path(path) + path = path.to_s + unless File.exist?(path) + raise Informative, "The plist file at path `#{path}` doesn't exist." + end + contents = File.read(path) + if file_in_conflict?(contents) + raise Informative, "The file `#{path}` is in a merge conflict." + end + case Nanaimo::Reader.plist_type(contents) + when :xml, :binary + CFPropertyList.native_types(CFPropertyList::List.new(:data => contents).value) + else + Nanaimo::Reader.new(contents).parse!.as_ruby + end + end + + # Serializes a hash as an XML property list file. + # + # @param [#to_hash] hash + # The hash to store. + # + # @param [#to_s] path + # The path of the file. + # + def self.write_to_path(hash, path) + if hash.respond_to?(:to_hash) + hash = hash.to_hash + else + raise TypeError, "The given `#{hash.inspect}` must respond " \ + "to #to_hash'." + end + + unless path.is_a?(String) || path.is_a?(Pathname) + raise TypeError, "The given `#{path}` must be a string or 'pathname'." + end + path = path.to_s + raise IOError, 'Empty path.' if path.empty? + + File.open(path, 'w') do |f| + plist = Nanaimo::Plist.new(hash, :xml) + Nanaimo::Writer::XMLWriter.new(plist, :pretty => true, :output => f, :strict => false).write + end + end + + # The known modules that can serialize plists. + # + KNOWN_IMPLEMENTATIONS = [] + + class << self + # @deprecated This method will be removed in 2.0 + # + # @return [Nil] + # + attr_accessor :implementation + end + + # @deprecated This method will be removed in 2.0 + # + # @return [Nil] + # + def self.autoload_implementation + end + + # @return [Bool] Checks whether there are merge conflicts in the file. + # + # @param [#to_s] contents + # The contents of the file. + # + def self.file_in_conflict?(contents) + conflict_regex = / + ^<{7}(?!<) # Exactly 7 left arrows at the beginning of the line + [\w\W]* # Anything + ^={7}(?!=) # Exactly 7 equality symbols at the beginning of the line + [\w\W]* # Anything + ^>{7}(?!>) # Exactly 7 right arrows at the beginning of the line + /xm + contents.match(conflict_regex) + end + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/project.rb b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/project.rb new file mode 100644 index 0000000..09f61fb --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/project.rb @@ -0,0 +1,870 @@ +# frozen_string_literal: true +require 'atomos' +require 'fileutils' +require 'securerandom' + +require 'xcodeproj/project/object' +require 'xcodeproj/project/project_helper' +require 'xcodeproj/project/uuid_generator' +require 'xcodeproj/plist' + +module Xcodeproj + # This class represents a Xcode project document. + # + # It can be used to manipulate existing documents or even create new ones + # from scratch. + # + # An Xcode project document is a plist file where the root is a dictionary + # containing the following keys: + # + # - archiveVersion: the version of the document. + # - objectVersion: the version of the objects description. + # - classes: a key that apparently is always empty. + # - objects: a dictionary where the UUID of every object is associated to + # its attributes. + # - rootObject: the UUID identifier of the root object ({PBXProject}). + # + # Every object is in turn a dictionary that specifies an `isa` (the class of + # the object) and in accordance to it maintains a set attributes. Those + # attributes might reference one or more other objects by UUID. If the + # reference is a collection, it is ordered. + # + # The {Project} API returns instances of {AbstractObject} which wrap the + # objects described in the Xcode project document. All the attributes types + # are preserved from the plist, except for the relationships which are + # replaced with objects instead of UUIDs. + # + # An object might be referenced by multiple objects, an when no other object + # is references it, it becomes unreachable (the root object is referenced by + # the project itself). Xcodeproj takes care of adding and removing those + # objects from the `objects` dictionary so the project is always in a + # consistent state. + # + class Project + include Object + + # @return [Pathname] the path of the project. + # + attr_reader :path + + # @return [Pathname] the directory of the project + # + attr_reader :project_dir + + # @param [Pathname, String] path @see path + # The path provided will be expanded to an absolute path. + # @param [Bool] skip_initialization + # Wether the project should be initialized from scratch. + # @param [Int] object_version + # Object version to use for serialization, defaults to Xcode 3.2 compatible. + # + # @example Creating a project + # Project.new("path/to/Project.xcodeproj") + # + # @note When initializing the project, Xcodeproj mimics the Xcode behaviour + # including the setup of a debug and release configuration. If you want a + # clean project without any configurations, you should override the + # `initialize_from_scratch` method to not add these configurations and + # manually set the object version. + # + def initialize(path, skip_initialization = false, object_version = Constants::DEFAULT_OBJECT_VERSION) + @path = Pathname.new(path).expand_path + @project_dir = @path.dirname + @objects_by_uuid = {} + @generated_uuids = [] + @available_uuids = [] + @dirty = true + unless skip_initialization.is_a?(TrueClass) || skip_initialization.is_a?(FalseClass) + raise ArgumentError, '[Xcodeproj] Initialization parameter expected to ' \ + "be a boolean #{skip_initialization}" + end + unless skip_initialization + initialize_from_scratch + @object_version = object_version.to_s + unless Constants::COMPATIBILITY_VERSION_BY_OBJECT_VERSION.key?(object_version) + raise ArgumentError, "[Xcodeproj] Unable to find compatibility version string for object version `#{object_version}`." + end + root_object.compatibility_version = Constants::COMPATIBILITY_VERSION_BY_OBJECT_VERSION[object_version] + end + end + + # Opens the project at the given path. + # + # @param [Pathname, String] path + # The path to the Xcode project document (xcodeproj). + # + # @raise If the project versions are more recent than the ones know to + # Xcodeproj to prevent it from corrupting existing projects. + # Naturally, this would never happen with a project generated by + # xcodeproj itself. + # + # @raise If it can't find the root object. This means that the project is + # malformed. + # + # @example Opening a project + # Project.open("path/to/Project.xcodeproj") + # + def self.open(path) + path = Pathname.pwd + path + unless Pathname.new(path).exist? + raise "[Xcodeproj] Unable to open `#{path}` because it doesn't exist." + end + project = new(path, true) + project.send(:initialize_from_file) + project + end + + # @return [String] the archive version. + # + attr_reader :archive_version + + # @return [Hash] an dictionary whose purpose is unknown. + # + attr_reader :classes + + # @return [String] the objects version. + # + attr_reader :object_version + + # @return [Hash{String => AbstractObject}] A hash containing all the + # objects of the project by UUID. + # + attr_reader :objects_by_uuid + + # @return [PBXProject] the root object of the project. + # + attr_reader :root_object + + # A fast way to see if two {Project} instances refer to the same projects on + # disk. Use this over {#eql?} when you do not need to compare the full data. + # + # This shallow comparison was chosen as the (common) `==` implementation, + # because it was too easy to introduce changes into the Xcodeproj code-base + # that were slower than O(1). + # + # @return [Boolean] whether or not the two `Project` instances refer to the + # same projects on disk, determined solely by {#path} and + # `root_object.uuid` equality. + # + # @todo If ever needed, we could also compare `uuids.sort` instead. + # + def ==(other) + other && path == other.path && root_object.uuid == other.root_object.uuid + end + + # Compares the project to another one, or to a plist representation. + # + # @note This operation can be extremely expensive, because it converts a + # `Project` instance to a hash, and should _only_ ever be used to + # determine wether or not the data contents of two `Project` instances + # are completely equal. + # + # To simply determine wether or not two {Project} instances refer to + # the same projects on disk, use the {#==} method instead. + # + # @param [#to_hash] other the object to compare. + # + # @return [Boolean] whether the project is equivalent to the given object. + # + def eql?(other) + other.respond_to?(:to_hash) && to_hash == other.to_hash + end + + def to_s + "#<#{self.class}> path:`#{path}` UUID:`#{root_object.uuid}`" + end + + alias_method :inspect, :to_s + + public + + # @!group Initialization + #-------------------------------------------------------------------------# + + # Initializes the instance from scratch. + # + def initialize_from_scratch + @archive_version = Constants::LAST_KNOWN_ARCHIVE_VERSION.to_s + @classes = {} + + root_object.remove_referrer(self) if root_object + @root_object = new(PBXProject) + root_object.add_referrer(self) + + root_object.main_group = new(PBXGroup) + root_object.product_ref_group = root_object.main_group.new_group('Products') + + config_list = new(XCConfigurationList) + root_object.build_configuration_list = config_list + config_list.default_configuration_name = 'Release' + config_list.default_configuration_is_visible = '0' + add_build_configuration('Debug', :debug) + add_build_configuration('Release', :release) + + new_group('Frameworks') + end + + # Initializes the instance with the project stored in the `path` attribute. + # + def initialize_from_file + pbxproj_path = path + 'project.pbxproj' + plist = Plist.read_from_path(pbxproj_path.to_s) + root_object.remove_referrer(self) if root_object + @root_object = new_from_plist(plist['rootObject'], plist['objects'], self) + @archive_version = plist['archiveVersion'] + @object_version = plist['objectVersion'] + @classes = plist['classes'] || {} + @dirty = false + + unless root_object + raise "[Xcodeproj] Unable to find a root object in #{pbxproj_path}." + end + + if archive_version.to_i > Constants::LAST_KNOWN_ARCHIVE_VERSION + UI.warn "[Xcodeproj] Archive version (#{archive_version.to_i}) is higher than the latest supported by xcodeproj (#{Constants::LAST_KNOWN_ARCHIVE_VERSION})." + end + + if object_version.to_i > Constants::LAST_KNOWN_OBJECT_VERSION + UI.warn "[Xcodeproj] Xcode project version (#{object_version.to_i}) is higher than the latest supported by xcodeproj (#{Constants::LAST_KNOWN_OBJECT_VERSION})." + end + + # Projects can have product_ref_groups that are not listed in the main_groups["Products"] + root_object.product_ref_group ||= root_object.main_group['Products'] || root_object.main_group.new_group('Products') + end + + public + + # @!group Plist serialization + #-------------------------------------------------------------------------# + + # Creates a new object from the given UUID and `objects` hash (of a plist). + # + # The method sets up any relationship of the new object, generating the + # destination object(s) if not already present in the project. + # + # @note This method is used to generate the root object + # from a plist. Subsequent invocation are called by the + # {AbstractObject#configure_with_plist}. Clients of {Xcodeproj} are + # not expected to call this method. + # + # @param [String] uuid + # The UUID of the object that needs to be generated. + # + # @param [Hash {String => Hash}] objects_by_uuid_plist + # The `objects` hash of the plist representation of the project. + # + # @param [Boolean] root_object + # Whether the requested object is the root object and needs to be + # retained by the project before configuration to add it to the + # `objects` hash and avoid infinite loops. + # + # @return [AbstractObject] the new object. + # + # @visibility private. + # + def new_from_plist(uuid, objects_by_uuid_plist, root_object = false) + attributes = objects_by_uuid_plist[uuid] + if attributes + klass = Object.const_get(attributes['isa']) + object = klass.new(self, uuid) + objects_by_uuid[uuid] = object + object.add_referrer(self) if root_object + object.configure_with_plist(objects_by_uuid_plist) + object + end + end + + # @return [Hash] The hash representation of the project. + # + def to_hash + plist = {} + objects_dictionary = {} + objects.each { |obj| objects_dictionary[obj.uuid] = obj.to_hash } + plist['objects'] = objects_dictionary + plist['archiveVersion'] = archive_version.to_s + plist['objectVersion'] = object_version.to_s + plist['classes'] = classes + plist['rootObject'] = root_object.uuid + plist + end + + def to_ascii_plist + plist = {} + objects_dictionary = {} + objects + .sort_by { |o| [o.isa, o.uuid] } + .each do |obj| + key = Nanaimo::String.new(obj.uuid, obj.ascii_plist_annotation) + value = obj.to_ascii_plist.tap { |a| a.annotation = nil } + objects_dictionary[key] = value + end + plist['archiveVersion'] = archive_version.to_s + plist['classes'] = classes + plist['objectVersion'] = object_version.to_s + plist['objects'] = objects_dictionary + plist['rootObject'] = Nanaimo::String.new(root_object.uuid, root_object.ascii_plist_annotation) + Nanaimo::Plist.new.tap { |p| p.root_object = plist } + end + + # Converts the objects tree to a hash substituting the hash + # of the referenced to their UUID reference. As a consequence the hash of + # an object might appear multiple times and the information about their + # uniqueness is lost. + # + # This method is designed to work in conjunction with {Hash#recursive_diff} + # to provide a complete, yet readable, diff of two projects *not* affected + # by differences in UUIDs. + # + # @return [Hash] a hash representation of the project different from the + # plist one. + # + def to_tree_hash + hash = {} + objects_dictionary = {} + hash['objects'] = objects_dictionary + hash['archiveVersion'] = archive_version.to_s + hash['objectVersion'] = object_version.to_s + hash['classes'] = classes + hash['rootObject'] = root_object.to_tree_hash + hash + end + + # @return [Hash{String => Hash}] A hash suitable to display the project + # to the user. + # + def pretty_print + build_configurations = root_object.build_configuration_list.build_configurations + { + 'File References' => root_object.main_group.pretty_print.values.first, + 'Targets' => root_object.targets.map(&:pretty_print), + 'Build Configurations' => build_configurations.sort_by(&:name).map(&:pretty_print), + } + end + + # Serializes the project in the xcodeproj format using the path provided + # during initialization or the given path (`xcodeproj` file). If a path is + # provided file references depending on the root of the project are not + # updated automatically, thus clients are responsible to perform any needed + # modification before saving. + # + # @param [String, Pathname] path + # The optional path where the project should be saved. + # + # @example Saving a project + # project.save + # project.save + # + # @return [void] + # + def save(save_path = nil) + save_path ||= path + @dirty = false if save_path == path + FileUtils.mkdir_p(save_path) + file = File.join(save_path, 'project.pbxproj') + Atomos.atomic_write(file) do |f| + Nanaimo::Writer::PBXProjWriter.new(to_ascii_plist, :pretty => true, :output => f, :strict => false).write + end + end + + # Marks the project as dirty, that is, modified from what is on disk. + # + # @return [void] + # + def mark_dirty! + @dirty = true + end + + # @return [Boolean] Whether this project has been modified since read from + # disk or saved. + # + def dirty? + @dirty == true + end + + # Replaces all the UUIDs in the project with deterministic MD5 checksums. + # + # @note The current sorting of the project is taken into account when + # generating the new UUIDs. + # + # @note This method should only be used for entirely machine-generated + # projects, as true UUIDs are useful for tracking changes in the + # project. + # + # @return [void] + # + def predictabilize_uuids + UUIDGenerator.new([self]).generate! + end + + # Replaces all the UUIDs in the list of provided projects with deterministic MD5 checksums. + # + # @param [Array<Project>] projects + # + # @note The current sorting of the project is taken into account when + # generating the new UUIDs. + # + # @note This method should only be used for entirely machine-generated + # projects, as true UUIDs are useful for tracking changes in the + # project. + # + # @return [void] + # + def self.predictabilize_uuids(projects) + UUIDGenerator.new(projects).generate! + end + + public + + # @!group Creating objects + #-------------------------------------------------------------------------# + + # Creates a new object with a suitable UUID. + # + # The object is only configured with the default values of the `:simple` + # attributes, for this reason it is better to use the convenience methods + # offered by the {AbstractObject} subclasses or by this class. + # + # @param [Class, String] klass + # The concrete subclass of AbstractObject for new object or its + # ISA. + # + # @return [AbstractObject] the new object. + # + def new(klass) + if klass.is_a?(String) + klass = Object.const_get(klass) + end + object = klass.new(self, generate_uuid) + object.initialize_defaults + object + end + + # Generates a UUID unique for the project. + # + # @note UUIDs are not guaranteed to be generated unique because we need + # to trim the ones generated in the xcodeproj extension. + # + # @note Implementation detail: as objects usually are created serially + # this method creates a batch of UUID and stores the not colliding + # ones, so the search for collisions with known UUIDS (a + # performance bottleneck) is performed less often. + # + # @return [String] A UUID unique to the project. + # + def generate_uuid + generate_available_uuid_list while @available_uuids.empty? + @available_uuids.shift + end + + # @return [Array<String>] the list of all the generated UUIDs. + # + # @note Used for checking new UUIDs for duplicates with UUIDs already + # generated but used for objects which are not yet part of the + # `objects` hash but which might be added at a later time. + # + attr_reader :generated_uuids + + # Pre-generates the given number of UUIDs. Useful for optimizing + # performance when the rough number of objects that will be created is + # known in advance. + # + # @param [Integer] count + # the number of UUIDs that should be generated. + # + # @note This method might generated a minor number of uniques UUIDs than + # the given count, because some might be duplicated a thus will be + # discarded. + # + # @return [void] + # + def generate_available_uuid_list(count = 100) + new_uuids = (0..count).map { SecureRandom.hex(12).upcase } + uniques = (new_uuids - (@generated_uuids + uuids)) + @generated_uuids += uniques + @available_uuids += uniques + end + + public + + # @!group Convenience accessors + #-------------------------------------------------------------------------# + + # @return [Array<AbstractObject>] all the objects of the project. + # + def objects + objects_by_uuid.values + end + + # @return [Array<String>] all the UUIDs of the project. + # + def uuids + objects_by_uuid.keys + end + + # @return [Array<AbstractObject>] all the objects of the project with a + # given ISA. + # + def list_by_class(klass) + objects.select { |o| o.class == klass } + end + + # @return [PBXGroup] the main top-level group. + # + def main_group + root_object.main_group + end + + # @return [ObjectList<PBXGroup>] a list of all the groups in the + # project. + # + def groups + main_group.groups + end + + # Returns a group at the given subpath relative to the main group. + # + # @example + # frameworks = project['Frameworks'] + # frameworks.name #=> 'Frameworks' + # main_group.children.include? frameworks #=> True + # + # @param [String] group_path @see MobileCoreServices + # + # @return [PBXGroup] the group at the given subpath. + # + def [](group_path) + main_group[group_path] + end + + # @return [ObjectList<PBXFileReference>] a list of all the files in the + # project. + # + def files + objects.grep(PBXFileReference) + end + + # Returns the file reference for the given absolute path. + # + # @param [#to_s] absolute_path + # The absolute path of the file whose reference is needed. + # + # @return [PBXFileReference] The file reference. + # @return [Nil] If no file reference could be found. + # + def reference_for_path(absolute_path) + absolute_pathname = Pathname.new(absolute_path) + + unless absolute_pathname.absolute? + raise ArgumentError, "Paths must be absolute #{absolute_path}" + end + + objects.find do |child| + child.isa == 'PBXFileReference' && child.real_path == absolute_pathname + end + end + + # @return [ObjectList<AbstractTarget>] A list of all the targets in the + # project. + # + def targets + root_object.targets + end + + # @return [ObjectList<PBXNativeTarget>] A list of all the targets in the + # project excluding aggregate targets. + # + def native_targets + root_object.targets.grep(PBXNativeTarget) + end + + # Checks the native target for any targets in the project + # that are dependent on the native target and would be + # embedded in it at build time + # + # @param [PBXNativeTarget] native target to check for + # embedded targets + # + # + # @return [Array<PBXNativeTarget>] A list of all targets that + # are embedded in the passed in target + # + def embedded_targets_in_native_target(native_target) + native_targets.select do |target| + host_targets_for_embedded_target(target).any? { |host| host.uuid == native_target.uuid } + end + end + + # Returns the native targets, in which the embedded target is + # embedded. This works by traversing the targets to find those + # where the target is a dependency. + # + # @param [PBXNativeTarget] native target that might be embedded + # in another target + # + # @return [Array<PBXNativeTarget>] the native targets that host the + # embedded target + # + def host_targets_for_embedded_target(embedded_target) + native_targets.select do |native_target| + ((embedded_target.uuid != native_target.uuid) && + (native_target.dependencies.map(&:native_target_uuid).include? embedded_target.uuid)) + end + end + + # @return [PBXGroup] The group which holds the product file references. + # + def products_group + root_object.product_ref_group + end + + # @return [ObjectList<PBXFileReference>] A list of the product file + # references. + # + def products + products_group.children + end + + # @return [PBXGroup] the `Frameworks` group creating it if necessary. + # + def frameworks_group + main_group['Frameworks'] || main_group.new_group('Frameworks') + end + + # @return [ObjectList<XCConfigurationList>] The build configuration list of + # the project. + # + def build_configuration_list + root_object.build_configuration_list + end + + # @return [ObjectList<XCBuildConfiguration>] A list of project wide + # build configurations. + # + def build_configurations + root_object.build_configuration_list.build_configurations + end + + # Returns the build settings of the project wide build configuration with + # the given name. + # + # @param [String] name + # The name of a project wide build configuration. + # + # @return [Hash] The build settings. + # + def build_settings(name) + root_object.build_configuration_list.build_settings(name) + end + + public + + # @!group Helpers + #-------------------------------------------------------------------------# + + # Creates a new file reference in the main group. + # + # @param @see PBXGroup#new_file + # + # @return [PBXFileReference] the new file. + # + def new_file(path, source_tree = :group) + main_group.new_file(path, source_tree) + end + + # Creates a new group at the given subpath of the main group. + # + # @param @see PBXGroup#new_group + # + # @return [PBXGroup] the new group. + # + def new_group(name, path = nil, source_tree = :group) + main_group.new_group(name, path, source_tree) + end + + # Creates a new target and adds it to the project. + # + # The target is configured for the given platform and its file reference it + # is added to the {products_group}. + # + # The target is pre-populated with common build settings, and the + # appropriate Framework according to the platform is added to to its + # Frameworks phase. + # + # @param [Symbol] type + # the type of target. Can be `:application`, `:framework`, + # `:dynamic_library` or `:static_library`. + # + # @param [String] name + # the name of the target product. + # + # @param [Symbol] platform + # the platform of the target. Can be `:ios` or `:osx`. + # + # @param [String] deployment_target + # the deployment target for the platform. + # + # @param [PBXGroup] product_group + # the product group, where to add to a file reference of the + # created target. + # + # @param [Symbol] language + # the primary language of the target, can be `:objc` or `:swift`. + # + # @return [PBXNativeTarget] the target. + # + def new_target(type, name, platform, deployment_target = nil, product_group = nil, language = nil, product_basename = nil) + product_group ||= products_group + product_basename ||= name + ProjectHelper.new_target(self, type, name, platform, deployment_target, product_group, language, product_basename) + end + + # Creates a new resource bundles target and adds it to the project. + # + # The target is configured for the given platform and its file reference it + # is added to the {products_group}. + # + # The target is pre-populated with common build settings + # + # @param [String] name + # the name of the resources bundle. + # + # @param [Symbol] platform + # the platform of the resources bundle. Can be `:ios` or `:osx`. + # + # @return [PBXNativeTarget] the target. + # + def new_resources_bundle(name, platform, product_group = nil, product_basename = nil) + product_group ||= products_group + product_basename ||= name + ProjectHelper.new_resources_bundle(self, name, platform, product_group, product_basename) + end + + # Creates a new target and adds it to the project. + # + # The target is configured for the given platform and its file reference it + # is added to the {products_group}. + # + # The target is pre-populated with common build settings, and the + # appropriate Framework according to the platform is added to to its + # Frameworks phase. + # + # @param [String] name + # the name of the target. + # + # @param [Array<AbstractTarget>] target_dependencies + # targets, which should be added as dependencies. + # + # @param [Symbol] platform + # the platform of the aggregate target. Can be `:ios` or `:osx`. + # + # @param [String] deployment_target + # the deployment target for the platform. + # + # @return [PBXNativeTarget] the target. + # + def new_aggregate_target(name, target_dependencies = [], platform = nil, deployment_target = nil) + ProjectHelper.new_aggregate_target(self, name, platform, deployment_target).tap do |aggregate_target| + target_dependencies.each do |dep| + aggregate_target.add_dependency(dep) + end + end + end + + # Adds a new build configuration to the project and populates its with + # default settings according to the provided type. + # + # @param [String] name + # The name of the build configuration. + # + # @param [Symbol] type + # The type of the build configuration used to populate the build + # settings, must be :debug or :release. + # + # @return [XCBuildConfiguration] The new build configuration. + # + def add_build_configuration(name, type) + build_configuration_list = root_object.build_configuration_list + if build_configuration = build_configuration_list[name] + build_configuration + else + build_configuration = new(XCBuildConfiguration) + build_configuration.name = name + common_settings = Constants::PROJECT_DEFAULT_BUILD_SETTINGS + settings = ProjectHelper.deep_dup(common_settings[:all]) + settings.merge!(ProjectHelper.deep_dup(common_settings[type])) + build_configuration.build_settings = settings + build_configuration_list.build_configurations << build_configuration + build_configuration + end + end + + # Sorts the project. + # + # @param [Hash] options + # the sorting options. + # @option options [Symbol] :groups_position + # the position of the groups can be either `:above` or `:below`. + # + # @return [void] + # + def sort(options = nil) + root_object.sort_recursively(options) + end + + public + + # @!group Schemes + #-------------------------------------------------------------------------# + + # Get list of shared schemes in project + # + # @param [String] path + # project path + # + # @return [Array] + # + def self.schemes(project_path) + schemes = Dir[File.join(project_path, 'xcshareddata', 'xcschemes', '*.xcscheme')].map do |scheme| + File.basename(scheme, '.xcscheme') + end + schemes << File.basename(project_path, '.xcodeproj') if schemes.empty? + schemes + end + + # Recreates the user schemes of the project from scratch (removes the + # folder) and optionally hides them. + # + # @param [Bool] visible + # Whether the schemes should be visible or hidden. + # + # @return [void] + # + def recreate_user_schemes(visible = true) + schemes_dir = XCScheme.user_data_dir(path) + FileUtils.rm_rf(schemes_dir) + FileUtils.mkdir_p(schemes_dir) + + xcschememanagement = {} + xcschememanagement['SchemeUserState'] = {} + xcschememanagement['SuppressBuildableAutocreation'] = {} + + targets.each do |target| + scheme = XCScheme.new + + test_target = target if target.respond_to?(:test_target_type?) && target.test_target_type? + launch_target = target.respond_to?(:launchable_target_type?) && target.launchable_target_type? + scheme.configure_with_targets(target, test_target, :launch_target => launch_target) + + yield scheme, target if block_given? + scheme.save_as(path, target.name, false) + xcschememanagement['SchemeUserState']["#{target.name}.xcscheme"] = {} + xcschememanagement['SchemeUserState']["#{target.name}.xcscheme"]['isShown'] = visible + end + + xcschememanagement_path = schemes_dir + 'xcschememanagement.plist' + Plist.write_to_path(xcschememanagement, xcschememanagement_path) + end + + #-------------------------------------------------------------------------# + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/project/case_converter.rb b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/project/case_converter.rb new file mode 100644 index 0000000..1f2fe1d --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/project/case_converter.rb @@ -0,0 +1,90 @@ +module Xcodeproj + class Project + module Object + # Converts between camel case names used in the xcodeproj plist files + # and the ruby symbols used to represent them. + # + module CaseConverter + # @return [String] The plist equivalent of the given Ruby name. + # + # @param [Symbol, String] name + # The name to convert + # + # @param [Symbol, Nil] type + # The type of conversion. Pass `nil` for normal camel case and + # `:lower` for camel case starting with a lower case letter. + # + # @example + # CaseConverter.convert_to_plist(:project_ref) #=> ProjectRef + # + def self.convert_to_plist(name, type = nil) + case name + when :remote_global_id_string + 'remoteGlobalIDString' + else + if type == :lower + cache = plist_cache[:lower] ||= {} + cache[name] ||= camelize(name, :uppercase_first_letter => false) + else + cache = plist_cache[:normal] ||= {} + cache[name] ||= camelize(name) + end + end + end + + # The following two methods are taken from activesupport, + # https://github.com/rails/rails/blob/v5.0.2/activesupport/lib/active_support/inflector/methods.rb + # all credit for them goes to the original authors. + # + # The code is used under the MIT license. + + def self.camelize(term, uppercase_first_letter: true) + string = term.to_s + string = if uppercase_first_letter + string.sub(/^[a-z\d]*/, &:capitalize) + else + string.sub(/^(?:(?=a)b(?=\b|[A-Z_])|\w)/, &:downcase) + end + string.gsub!(%r{(?:_|(/))([a-z\d]*)}i) { "#{Regexp.last_match(1)}#{Regexp.last_match(2).capitalize}" } + string.gsub!('/'.freeze, '::'.freeze) + string + end + private_class_method :camelize + + def self.underscore(camel_cased_word) + return camel_cased_word unless camel_cased_word =~ /[A-Z-]|::/ + word = camel_cased_word.to_s.gsub('::'.freeze, '/'.freeze) + word.gsub!(/(?:(?<=([A-Za-z\d]))|\b)((?=a)b)(?=\b|[^a-z])/) { "#{Regexp.last_match(1) && '_'.freeze}#{Regexp.last_match(2).downcase}" } + word.gsub!(/([A-Z\d]+)([A-Z][a-z])/, '\1_\2'.freeze) + word.gsub!(/([a-z\d])([A-Z])/, '\1_\2'.freeze) + word.tr!('-'.freeze, '_'.freeze) + word.downcase! + word + end + private_class_method :underscore + + # @return [Symbol] The Ruby equivalent of the given plist name. + # + # @param [String] name + # The name to convert + # + # @example + # CaseConverter.convert_to_ruby('ProjectRef') #=> :project_ref + # + def self.convert_to_ruby(name) + underscore(name.to_s).to_sym + end + + # @return [Hash] A cache for the conversion to the Plist format. + # + # @note A cache is used because this operation is performed for each + # attribute of the project when it is saved and caching it has + # an important performance benefit. + # + def self.plist_cache + @plist_cache ||= {} + end + end + end + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/project/object.rb b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/project/object.rb new file mode 100644 index 0000000..ce582c0 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/project/object.rb @@ -0,0 +1,537 @@ +module Xcodeproj + class Project + # This is the namespace in which all the classes that wrap the objects in + # a Xcode project reside. + # + # The base class from which all classes inherit is AbstractObject. + # + # If you need to deal with these classes directly, it's possible to include + # this namespace into yours, making it unnecessary to prefix them with + # Xcodeproj::Project::Object. + # + # @example + # class SourceFileSorter + # include Xcodeproj::Project::Object + # end + # + module Object + # @abstract + # + # This is the base class of all object types that can exist in a Xcode + # project. As such it provides common behavior, but you can only use + # instances of subclasses of AbstractObject, because this class does + # not exist in actual Xcode projects. + # + # Almost all the methods implemented by this class are not expected to be + # used by {Xcodeproj} clients. + # + # Subclasses should clearly identify which methods reflect the xcodeproj + # document model and which methods are offered as convenience. Object + # lists always represent a relationship to many of the model while simple + # arrays represent dynamically generated values offered a convenience for + # clients. + # + class AbstractObject + # @!group AbstractObject + + # @return [String] the ISA of the class. + # + def self.isa + @isa ||= name.split('::').last + end + + # @return [String] the object's class name. + # + attr_reader :isa + + # It is not recommended to instantiate objects through this + # constructor. To create objects manually is easier to use + # the {Project#new}. Otherwise, it is possible to use the convenience + # methods offered by {Xcodeproj} which take care of configuring the + # objects for common usage cases. + # + # @param [Project] project + # the project that will host the object. + # + # @param [String] uuid + # the UUID of the new object. + # + # @visibility private + # + def initialize(project, uuid) + @project = project + @uuid = uuid + @isa = self.class.isa + @referrers = [] + unless @isa =~ /^(PBX|XC)/ + raise "[Xcodeproj] Attempt to initialize an abstract class (#{self.class})." + end + end + + # Initializes the object with the default values of simple attributes. + # + # This method is called by the {Project#new} and is not performed on + # initialization to prevent adding defaults to objects generated by a + # plist. + # + # @return [void] + # + # @visibility private + # + def initialize_defaults + simple_attributes.each { |a| a.set_default(self) } + end + + # @return [String] the object universally unique identifier. + # + attr_reader :uuid + + # @return [Project] the project that owns the object. + # + attr_reader :project + + # Removes the object from the project by asking to its referrers to + # remove the reference to it. + # + # @note The root object is owned by the project and should not be + # manipulated with this method. + # + # @return [void] + # + def remove_from_project + mark_project_as_dirty! + project.objects_by_uuid.delete(uuid) + + referrers.dup.each do |referrer| + referrer.remove_reference(self) + end + + to_one_attributes.each do |attrb| + object = attrb.get_value(self) + object.remove_referrer(self) if object + end + + to_many_attributes.each do |attrb| + list = attrb.get_value(self) + list.clear + end + + unless referrers.count == 0 + raise "[Xcodeproj] BUG: #{self} should have no referrers instead" \ + "the following objects are still referencing it #{referrers}" + end + end + + # Returns the value of the name attribute or returns a generic name for + # the object. + # + # @note Not all concrete classes implement the name attribute and this + # method prevents from overriding it in plist. + # + # @return [String] a name for the object. + # + def display_name + declared_name = name if self.respond_to?(:name) + if declared_name && !declared_name.empty? + declared_name + else + isa.gsub(/^(PBX|XC)/, '') + end + end + alias_method :to_s, :display_name + + # Sorts the to many attributes of the object according to the display + # name. + # + def sort(_options = nil) + to_many_attributes.each do |attrb| + list = attrb.get_value(self) + list.sort! do |x, y| + x.display_name.downcase <=> y.display_name.downcase + end + end + end + + # Sorts the object and the objects that it references. + # + # @param [Hash] options + # the sorting options. + # @option options [Symbol] :groups_position + # the position of the groups can be either `:above` or + # `:below`. + # + # @note Some objects may in turn refer back to objects higher in the + # object tree, which will lead to stack level deep errors. + # These objects should **not** try to perform a recursive sort, + # also because these objects would get sorted through other + # paths in the tree anyways. + # + # At the time of writing the only known case is + # `PBXTargetDependency`. + # + def sort_recursively(options = nil) + to_one_attributes.each do |attrb| + value = attrb.get_value(self) + value.sort_recursively(options) if value + end + + to_many_attributes.each do |attrb| + list = attrb.get_value(self) + list.each { |entry| entry.sort_recursively(options) } + end + + sort(options) + end + + # @!group Reference counting + + # @return [Array<ObjectList>] The list of the objects that have a + # reference to this object. + # + # @visibility private + # + attr_reader :referrers + + # Informs the object that another object is referencing it. If the + # object had no previous references it is added to the project UUIDs + # hash. + # + # @return [void] + # + # @visibility private + # + def add_referrer(referrer) + @referrers << referrer + @project.objects_by_uuid[uuid] = self + end + + # Informs the object that another object stopped referencing it. If the + # object has no other references it is removed from the project UUIDs + # hash because it is unreachable. + # + # @return [void] + # + # @visibility private + # + def remove_referrer(referrer) + @referrers.delete(referrer) + if @referrers.count == 0 + mark_project_as_dirty! + @project.objects_by_uuid.delete(uuid) + end + end + + # Removes all the references to a given object. + # + # @return [void] + # + # @visibility private + # + def remove_reference(object) + to_one_attributes.each do |attrb| + value = attrb.get_value(self) + attrb.set_value(self, nil) if value.equal?(object) + end + + to_many_attributes.each do |attrb| + list = attrb.get_value(self) + list.delete(object) + end + + references_by_keys_attributes.each do |attrb| + list = attrb.get_value(self) + list.each { |dictionary| dictionary.remove_reference(object) } + end + end + + # Marks the project that this object belongs to as having been modified. + # + # @return [void] + # + # @visibility private + # + def mark_project_as_dirty! + project.mark_dirty! + end + + #---------------------------------------------------------------------# + + public + + # @!group Plist related methods + + # Configures the object with the objects hash from a plist. + # + # **Implementation detail**: it is important that the attributes for a + # given concrete class are unique because the value is removed from the + # array at each iteration and duplicate would result in nil values. + # + # @return [void] + # + # @visibility private + # + def configure_with_plist(objects_by_uuid_plist) + object_plist = objects_by_uuid_plist[uuid].dup + + unless object_plist['isa'] == isa + raise "[Xcodeproj] Attempt to initialize `#{isa}` from plist with " \ + "different isa `#{object_plist}`" + end + object_plist.delete('isa') + + simple_attributes.each do |attrb| + attrb.set_value(self, object_plist[attrb.plist_name]) + object_plist.delete(attrb.plist_name) + end + + to_one_attributes.each do |attrb| + ref_uuid = object_plist[attrb.plist_name] + if ref_uuid + ref = object_with_uuid(ref_uuid, objects_by_uuid_plist, attrb) + attrb.set_value(self, ref) if ref + end + object_plist.delete(attrb.plist_name) + end + + to_many_attributes.each do |attrb| + ref_uuids = object_plist[attrb.plist_name] || [] + list = attrb.get_value(self) + ref_uuids.each do |uuid| + ref = object_with_uuid(uuid, objects_by_uuid_plist, attrb) + list << ref if ref + end + object_plist.delete(attrb.plist_name) + end + + references_by_keys_attributes.each do |attrb| + hashes = object_plist[attrb.plist_name] || {} + list = attrb.get_value(self) + hashes.each do |hash| + dictionary = ObjectDictionary.new(attrb, self) + hash.each do |key, uuid| + ref = object_with_uuid(uuid, objects_by_uuid_plist, attrb) + dictionary[key] = ref if ref + end + list << dictionary + end + object_plist.delete(attrb.plist_name) + end + + unless object_plist.empty? + UI.warn "[!] Xcodeproj doesn't know about the following " \ + "attributes #{object_plist.inspect} for the '#{isa}' isa." \ + "\nIf this attribute was generated by Xcode please file " \ + 'an issue: https://github.com/CocoaPods/Xcodeproj/issues/new' + end + end + + # Initializes and returns the object with the given UUID. + # + # @param [String] uuid + # The UUID of the object that should be initialized. + # + # @param [Hash{String=>String}] objects_by_uuid_plist + # The hash contained by `objects` key of the plist containing + # the information about the object that should be initialized. + # + # @param [AbstractObjectAttribute] attribute + # The attribute that requested the object. It is used only for + # exceptions. + # + # @raise If the hash for the given UUID contains an unknown ISA. + # + # @return [AbstractObject] the initialized object. + # @return [Nil] if the UUID could not be found in the objects hash. In + # this case a warning is printed to STDERR. + # + # @visibility private + # + def object_with_uuid(uuid, objects_by_uuid_plist, attribute) + unless object = project.objects_by_uuid[uuid] || project.new_from_plist(uuid, objects_by_uuid_plist) + UI.warn "`#{inspect}` attempted to initialize an object with " \ + "an unknown UUID. `#{uuid}` for attribute: " \ + "`#{attribute.name}`. This can be the result of a merge and " \ + 'the unknown UUID is being discarded.' + end + object + rescue NameError + attributes = objects_by_uuid_plist[uuid] + raise "`#{isa}` attempted to initialize an object with unknown ISA "\ + "`#{attributes['isa']}` from attributes: `#{attributes}`\n" \ + 'If this ISA was generated by Xcode please file an issue: ' \ + 'https://github.com/CocoaPods/Xcodeproj/issues/new' + end + + # Returns a cascade representation of the object with UUIDs. + # + # @return [Hash] a hash representation of the project. + # + # @visibility public + # + # @note the key for simple and to_one attributes usually appears only + # if there is a value. To-many keys always appear with an empty + # array. + # + def to_hash + to_hash_as + end + + def to_hash_as(method = :to_hash) + plist = {} + plist['isa'] = isa + + simple_attributes.each do |attrb| + value = attrb.get_value(self) + plist[attrb.plist_name] = value if value + end + + to_one_attributes.each do |attrb| + obj = attrb.get_value(self) + plist[attrb.plist_name] = nested_object_for_hash(obj, method) if obj + end + + to_many_attributes.each do |attrb| + list = attrb.get_value(self) + plist[attrb.plist_name] = list.map { |o| nested_object_for_hash(o, method) } + end + + references_by_keys_attributes.each do |attrb| + list = attrb.get_value(self) + plist[attrb.plist_name] = list.map(&method) + end + + plist + end + private :to_hash_as + + def nested_object_for_hash(object, method) + case method + when :to_ascii_plist + Nanaimo::String.new(object.uuid, object.ascii_plist_annotation) + else + object.uuid + end + end + + def ascii_plist_annotation + " #{display_name} " + end + + def to_ascii_plist + Nanaimo::Dictionary.new(to_hash_as(:to_ascii_plist), ascii_plist_annotation) + end + + # Returns a cascade representation of the object without UUIDs. + # + # This method is designed to work in conjunction with + # {Hash#recursive_diff} to provide a complete, yet readable, diff of + # two projects *not* affected by ISA differences. + # + # @todo The current implementation might lead to infinite loops. + # + # @return [Hash] a hash representation of the project different from + # the plist one. + # + # @visibility private + # + def to_tree_hash + hash = {} + hash['displayName'] = display_name + hash['isa'] = isa + + simple_attributes.each do |attrb| + value = attrb.get_value(self) + hash[attrb.plist_name] = value if value + end + + to_one_attributes.each do |attrb| + obj = attrb.get_value(self) + hash[attrb.plist_name] = obj.to_tree_hash if obj + end + + to_many_attributes.each do |attrb| + list = attrb.get_value(self) + hash[attrb.plist_name] = list.map(&:to_tree_hash) + end + + references_by_keys_attributes.each do |attrb| + list = attrb.get_value(self) + hash[attrb.plist_name] = list.map(&:to_tree_hash) + end + + hash + end + + # @return [Hash{String => Hash}] A hash suitable to display the object + # to the user. + # + def pretty_print + if to_many_attributes.count == 1 + children = to_many_attributes.first.get_value(self) + { display_name => children.map(&:pretty_print) } + else + display_name + end + end + + #---------------------------------------------------------------------# + + public + + # @!group Object methods + + def ==(other) + other.is_a?(AbstractObject) && to_hash == other.to_hash + end + + def <=>(other) + uuid <=> other.uuid + end + + def inspect + optional = '' + optional << " name=`#{name}`" if respond_to?(:name) && name + optional << " path=`#{path}`" if respond_to?(:path) && path + "<#{isa}#{optional} UUID=`#{uuid}`>" + end + end + end + end +end + +require 'xcodeproj/project/case_converter' +require 'xcodeproj/project/object_attributes' +require 'xcodeproj/project/object_dictionary' +require 'xcodeproj/project/object_list' + +# Required because some classes have cyclical references to each other. +# +# @todo I'm sure that there is a method to achieve the same result which +# doesn't present the risk of some rubist laughing at me :-) +# +Xcodeproj::Constants::KNOWN_ISAS.each do |superclass_name, isas| + superklass = Xcodeproj::Project::Object.const_get(superclass_name) + isas.each do |isa| + c = Class.new(superklass) + Xcodeproj::Project::Object.const_set(isa, c) + end +end + +# Now load the concrete subclasses. +require 'xcodeproj/project/object/swift_package_remote_reference' +require 'xcodeproj/project/object/swift_package_local_reference' +require 'xcodeproj/project/object/swift_package_product_dependency' +require 'xcodeproj/project/object/build_configuration' +require 'xcodeproj/project/object/build_file' +require 'xcodeproj/project/object/build_phase' +require 'xcodeproj/project/object/build_rule' +require 'xcodeproj/project/object/configuration_list' +require 'xcodeproj/project/object/container_item_proxy' +require 'xcodeproj/project/object/file_reference' +require 'xcodeproj/project/object/group' +require 'xcodeproj/project/object/native_target' +require 'xcodeproj/project/object/root_object' +require 'xcodeproj/project/object/target_dependency' +require 'xcodeproj/project/object/reference_proxy' +require 'xcodeproj/project/object/file_system_synchronized_root_group' +require 'xcodeproj/project/object/file_system_synchronized_exception_set' diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/project/object/build_configuration.rb b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/project/object/build_configuration.rb new file mode 100644 index 0000000..624e8c8 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/project/object/build_configuration.rb @@ -0,0 +1,271 @@ +require 'xcodeproj/project/object/file_system_synchronized_root_group' + +module Xcodeproj + class Project + module Object + # Encapsulates the information a specific build configuration referenced + # by a {XCConfigurationList} which in turn might be referenced by a + # {PBXProject} or a {PBXNativeTarget}. + # + class XCBuildConfiguration < AbstractObject + MUTUAL_RECURSION_SENTINEL = 'xcodeproj.mutual_recursion_sentinel'.freeze + + private_constant :MUTUAL_RECURSION_SENTINEL + + # @!group Attributes + + # @return [String] the name of the configuration. + # + attribute :name, String + + # @return [Hash] the build settings to use for building the target. + # + attribute :build_settings, Hash, {} + + # @return [PBXFileReference] an optional file reference to a + # configuration file (`.xcconfig`). + # + has_one :base_configuration_reference, PBXFileReference + + # @return [PBXFileSystemSynchronizedRootGroup] an optional reference to a group + # synchronized with the file system that contains a configuration file (`.xcconfig`). + # + # @note the configuration file relative path must be provided in `base_configuration_reference_relative_path` + # + has_one :base_configuration_reference_anchor, PBXFileSystemSynchronizedRootGroup + + # @return [String] the relative path of a configuration file (`.xcconfig`) + # inside a group synchronized with the file system. + # + # @note the configuration file group must be provided in `base_configuration_reference_anchor` + # + attribute :base_configuration_reference_relative_path, String + + public + + # @!group AbstractObject Hooks + #---------------------------------------------------------------------# + + # @return [Hash{String => Hash}] A hash suitable to display the object + # to the user. + # + def pretty_print + data = {} + data['Build Settings'] = sorted_build_settings + if base_configuration_reference + data['Base Configuration'] = base_configuration_reference.pretty_print + end + { name => data } + end + + def to_hash_as(method = :to_hash) + super.tap do |hash| + normalize_array_settings(hash['buildSettings']) + end + end + + # Sorts the build settings. Valid only in Ruby > 1.9.2 because in + # previous versions the hash are not sorted. + # + # @return [void] + # + def sort(_options = nil) + self.build_settings = sorted_build_settings + end + + # @return [Boolean] Whether this configuration is configured for + # debugging. + # + def debug? + gcc_preprocessor_definitions = resolve_build_setting('GCC_PREPROCESSOR_DEFINITIONS') + gcc_preprocessor_definitions && gcc_preprocessor_definitions.include?('DEBUG=1') + end + + # @return [Symbol] The symbolic type of this configuration, either + # `:debug` or `:release`. + # + def type + debug? ? :debug : :release + end + + # @!group Helpers + #---------------------------------------------------------------------# + + # Gets the value for the given build setting considering any configuration + # file present and resolving inheritance between them. It also takes in + # consideration environment variables. + # + # @param [String] key + # the key of the build setting. + # + # @param [PBXNativeTarget] root_target + # use this to resolve complete recursion between project and targets. + # + # @param [String] previous_key + # use this to resolve complete recursion between different build settings. + # + # @return [String] The value of the build setting + # + def resolve_build_setting(key, root_target = nil, previous_key = nil) + setting = build_settings[key] + setting = resolve_variable_substitution(key, setting, root_target, previous_key) + + config_setting = config[key] + config_setting = resolve_variable_substitution(key, config_setting, root_target, previous_key) + + project_setting = project.build_configuration_list[name] + project_setting = nil if equal?(project_setting) + project_setting &&= project_setting.resolve_build_setting(key, root_target) + + defaults = { + 'CONFIGURATION' => name, + 'SRCROOT' => project.project_dir.to_s, + } + + # if previous_key is nil, it means that we're back at the first call, so we can replace our sentinel string + # used to prevent recursion with nil + if previous_key.nil? && setting == MUTUAL_RECURSION_SENTINEL + setting = nil + end + + [defaults[key], project_setting, config_setting, setting, ENV[key]].compact.reduce(nil) do |inherited, value| + expand_build_setting(value, inherited) + end + end + + #---------------------------------------------------------------------# + + private + + VARIABLE_NAME_PATTERN = + '( # capture block + [_a-zA-Z0-9]+? # non-greedy lookup for everything contained in this list + )'.freeze + private_constant :VARIABLE_NAME_PATTERN + + CAPTURE_VARIABLE_IN_BUILD_CONFIG = / + \$ # matches dollar sign literally + (?: # non-capturing group + [{] # matches a single character on this list + #{VARIABLE_NAME_PATTERN} + [}] # matches a single character on this list + | # or + [(] # matches a single character on this list + #{VARIABLE_NAME_PATTERN} + [)] # matches a single character on this list + ) + /x + private_constant :CAPTURE_VARIABLE_IN_BUILD_CONFIG + + def expand_build_setting(build_setting_value, config_value) + if build_setting_value.is_a?(Array) && config_value.is_a?(String) + config_value = split_build_setting_array_to_string(config_value) + elsif build_setting_value.is_a?(String) && config_value.is_a?(Array) + build_setting_value = split_build_setting_array_to_string(build_setting_value) + end + + default = build_setting_value.is_a?(String) ? '' : [] + inherited = config_value || default + + return build_setting_value.gsub(Regexp.union(Constants::INHERITED_KEYWORDS), inherited) if build_setting_value.is_a? String + build_setting_value.flat_map { |value| Constants::INHERITED_KEYWORDS.include?(value) ? inherited : value } + end + + def resolve_variable_substitution(key, value, root_target, previous_key = nil) + case value + when Array + return value.map { |v| resolve_variable_substitution(key, v, root_target) } + when nil + return + when String + # we know how to resolve strings! + nil + else + raise ArgumentError, "Settings values can only be nil, string, or array, got #{value.inspect} for #{key}" + end + + unless variable_match_data = value.match(CAPTURE_VARIABLE_IN_BUILD_CONFIG) + # no variables left, return the value unchanged + return value + end + variable_reference, variable = *variable_match_data.values_at(0, 1, 2).compact + + case variable + when 'inherited' + # this is handled separately, after resolving all other variable references + value + when key + # to prevent infinite recursion + nil + when previous_key + # to prevent infinite recursion; we don't return nil as for the self recursion because it needs to be + # distinguished outside this method too + MUTUAL_RECURSION_SENTINEL + else + configuration_to_resolve_against = root_target ? root_target.build_configuration_list[name] : self + resolved_value_for_variable = configuration_to_resolve_against.resolve_build_setting(variable, root_target, key) || '' + + # we use this sentinel string instead of nil, because, otherwise, it would be swallowed by the default empty + # string from the preceding line, and we want to distinguish between mutual recursion and other cases + if resolved_value_for_variable == MUTUAL_RECURSION_SENTINEL + return MUTUAL_RECURSION_SENTINEL + end + + value = value.gsub(variable_reference, resolved_value_for_variable) + resolve_variable_substitution(key, value, root_target) + end + end + + def sorted_build_settings + sorted = {} + build_settings.keys.sort.each do |key| + sorted[key] = build_settings[key] + end + sorted + end + + def normalize_array_settings(settings) + return unless settings + + array_settings = BuildSettingsArraySettingsByObjectVersion[project.object_version] + + settings.keys.each do |key| + next unless value = settings[key] + stripped_key = key.sub(/\[[^\]]+\]$/, '') + case value + when String + next unless array_settings.include?(stripped_key) + array_value = split_build_setting_array_to_string(value) + next unless array_value.size > 1 + settings[key] = array_value + when Array + next if value.size > 1 && array_settings.include?(stripped_key) + settings[key] = value.join(' ') + end + end + end + + def split_build_setting_array_to_string(string) + regexp = / *((['"]?).*?[^\\]\2)(?=( |\z))/ + string.scan(regexp).map(&:first) + end + + def config + return {} unless base_configuration_reference + @config ||= + if base_configuration_reference.real_path.exist? + Xcodeproj::Config.new(base_configuration_reference.real_path).to_hash.tap do |hash| + normalize_array_settings(hash) + end + else + {} + end + end + + #---------------------------------------------------------------------# + end + end + end +end + +require 'xcodeproj/project/object/helpers/build_settings_array_settings_by_object_version' diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/project/object/build_file.rb b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/project/object/build_file.rb new file mode 100644 index 0000000..2e6a9fc --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/project/object/build_file.rb @@ -0,0 +1,84 @@ +module Xcodeproj + class Project + module Object + # Contains the information about the build settings of a file used by an + # {AbstractBuildPhase}. + # + class PBXBuildFile < AbstractObject + # @!group Attributes + + # @return [Hash] the list of build settings for this file. + # + # @note The contents of this array depend on the phase of the build + # file. + # + # For PBXHeadersBuildPhase is `{ "ATTRIBUTES" => [:value] }` + # where `:value` can be `Public`, `Private`, or nil + # (Protected). + # + attribute :settings, Hash + + # @return [PBXFileReference] the file to build. + # + # @todo I think that is possible to add any kind of group (for + # example folders linked to a path). + # + has_one :file_ref, [ + PBXFileReference, + PBXGroup, + PBXVariantGroup, + XCVersionGroup, + PBXReferenceProxy, + ] + + # @return [XCSwiftPackageProductDependency] the Swift Package file to build. + # + has_one :product_ref, XCSwiftPackageProductDependency + + # @return [String] the platform filter for this build file. + # + attribute :platform_filter, String + + # @return [Array<String>] the platform filters for this build file. + # + attribute :platform_filters, Array + + #---------------------------------------------------------------------# + + public + + # @!group AbstractObject Hooks + + # @return [String] A name suitable for displaying the object to the + # user. + # + def display_name + if product_ref + product_ref.display_name + elsif file_ref + file_ref.display_name + else + super + end + end + + # @return [Hash{String => Hash}, String] A hash suitable to display the + # object to the user. + # + def pretty_print + if settings.nil? || settings.empty? + display_name + else + { display_name => settings } + end + end + + def ascii_plist_annotation + " #{display_name} in #{GroupableHelper.parent(self).display_name} " + end + + #---------------------------------------------------------------------# + end + end + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/project/object/build_phase.rb b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/project/object/build_phase.rb new file mode 100644 index 0000000..340dee2 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/project/object/build_phase.rb @@ -0,0 +1,369 @@ +module Xcodeproj + class Project + module Object + # @abstract + # + # This class is abstract and it doesn't appear in the project document. + # + class AbstractBuildPhase < AbstractObject + # @!group Attributes + + # @return [ObjectList<PBXBuildFile>] the files processed by this build + # configuration. + # + has_many :files, PBXBuildFile + + # @return [String] some kind of magic number which usually is + # '2147483647' (can be also `8` and `12` in + # PBXCopyFilesBuildPhase, one of the masks is + # run_only_for_deployment_postprocessing). + # + attribute :build_action_mask, String, '2147483647' + + # @return [String] whether or not this should only be processed before + # deployment. Can be either '0', or '1'. + # + # @note This option is exposed in Xcode in the UI of + # PBXCopyFilesBuildPhase as `Copy only when installing` or in + # PBXShellScriptBuildPhase as `Run script only when + # installing`. + # + attribute :run_only_for_deployment_postprocessing, String, '0' + + # @return [String] whether or not this run script will be forced to + # run even on incremental builds. Can be either '1', or + # missing. By default this option is disabled in Xcode. + # + # @note This setting is exposed in Xcode in the UI of + # PBXShellScriptBuildPhase as `Based on + # dependency analysis` (selected by default). + # + attribute :always_out_of_date, String + + # @return [String] Comments associated with this build phase. + # + # @note This is apparently no longer used by Xcode. + # + attribute :comments, String + + #--------------------------------------# + + public + + # @!group Helpers + + # @return [Array<PBXFileReference>] the list of all the files + # referenced by this build phase. + # + def files_references + files.map(&:file_ref) + end + + # @return [Array<String>] The display name of the build files. + # + def file_display_names + files.map(&:display_name) + end + + # @return [PBXBuildFile] the first build file associated with the given + # file reference if one exists. + # + def build_file(file_ref) + (file_ref.referrers & files).first + end + + # Returns whether a build file for the given file reference exists. + # + # @param [PBXFileReference] file_ref + # + # @return [Bool] whether the reference is already present. + # + def include?(file_ref) + !build_file(file_ref).nil? + end + + # Adds a new build file, initialized with the given file reference, to + # the phase. + # + # @param [PBXFileReference] file_ref + # The file reference that should be added to the build phase. + # + # @return [PBXBuildFile] the build file generated. + # + def add_file_reference(file_ref, avoid_duplicates = false) + if avoid_duplicates && existing = build_file(file_ref) + existing + else + build_file = project.new(PBXBuildFile) + build_file.file_ref = file_ref + files << build_file + build_file + end + end + + # Removes the build file associated with the given file reference from + # the phase. + # + # @param [PBXFileReference] file_ref + # The file to remove + # + # @return [void] + # + def remove_file_reference(file_ref) + build_file = files.find { |bf| bf.file_ref == file_ref } + remove_build_file(build_file) if build_file + end + + # Removes a build file from the phase and clears its relationship to + # the file reference. + # + # @param [PBXBuildFile] build_file the file to remove + # + # @return [void] + # + def remove_build_file(build_file) + build_file.file_ref = nil + build_file.remove_from_project + end + + # Removes all the build files from the phase and clears their + # relationship to the file reference. + # + # @return [void] + # + def clear + files.objects.each do |bf| + remove_build_file(bf) + end + end + alias_method :clear_build_files, :clear + + def display_name + super.gsub(/BuildPhase$/, '') + end + + def ascii_plist_annotation + " #{display_name} " + end + + # Sorts the build files of the phase according to the display + # name or the path. + # + # @param [Hash] _options + # Not used. + # + # @return [void] + # + def sort(_options = nil) + files.sort! do |x, y| + result = File.basename(x.display_name.downcase, '.*') <=> File.basename(y.display_name.downcase, '.*') + if result.zero? + result = File.extname(x.display_name.downcase) <=> File.extname(y.display_name.downcase) + if result.zero? && x.file_ref.respond_to?(:full_path) && y.file_ref.respond_to?(:full_path) + result = x.file_ref.full_path.to_s.downcase <=> y.file_ref.full_path.to_s.downcase + end + end + result + end + end + end + + #-----------------------------------------------------------------------# + + # The phase responsible of copying headers. Known as `Copy Headers` in + # the UI. + # + # @note This phase can appear only once in a target. + # + class PBXHeadersBuildPhase < AbstractBuildPhase + end + + #-----------------------------------------------------------------------# + + # The phase responsible of compiling the files. Known as `Compile + # Sources` in the UI. + # + # @note This phase can appear only once in a target. + # + class PBXSourcesBuildPhase < AbstractBuildPhase + end + + #-----------------------------------------------------------------------# + + # The phase responsible on linking with frameworks. Known as `Link Binary + # With Libraries` in the UI. + # + # @note This phase can appear only once in a target. + # + class PBXFrameworksBuildPhase < AbstractBuildPhase + end + + #-----------------------------------------------------------------------# + + # The resources build phase apparently is a specialized copy build phase + # for resources. Known as `Copy Bundle Resources` in the UI. It is + # unclear if this is the only one capable of optimizing PNG. + # + # @note This phase can appear only once in a target. + # + class PBXResourcesBuildPhase < AbstractBuildPhase + end + + #-----------------------------------------------------------------------# + + # Phase that copies the files to the bundle of the target (aka `Copy + # Files`). + # + # @note This phase can appear multiple times in a target. + # + class PBXCopyFilesBuildPhase < AbstractBuildPhase + # @!group Attributes + + # @return [String] the name of the build phase. + # + attribute :name, String + + # @return [String] the subpath of `dst_subfolder_spec` where this file + # should be copied to. + # + # @note Can accept environment variables like `$(PRODUCT_NAME)`. + # + attribute :dst_path, String, '' + + # @return [String] the path (destination) where the files should be + # copied to. + # + attribute :dst_subfolder_spec, String, Constants::COPY_FILES_BUILD_PHASE_DESTINATIONS[:resources] + + # @return [Hash{String => Hash}] A hash suitable to display the build + # phase to the user. + # + def pretty_print + { + display_name => { + 'Destination Path' => dst_path, + 'Destination Subfolder' => Constants::COPY_FILES_BUILD_PHASE_DESTINATIONS.key(dst_subfolder_spec).to_s, + 'Files' => files.map(&:pretty_print), + }, + } + end + + # Alias method for #dst_subfolder_spec=, which accepts symbol values + # instead of numeric string values. + # + # @param [Symbol] value + # one of `COPY_FILES_BUILD_PHASE_DESTINATIONS.keys` + # + # @raise [StandardError] if value is not a valid known key + # + def symbol_dst_subfolder_spec=(value) + numeric_value = Constants::COPY_FILES_BUILD_PHASE_DESTINATIONS[value] + raise "[Xcodeproj] Value checking error: got `#{value.inspect}` for" \ + ' attribute: dst_subfolder_spec' if numeric_value.nil? + self.dst_subfolder_spec = numeric_value + end + + # Alias method for #dst_subfolder_spec, which returns symbol values + # instead of numeric string values. + # + # @return [Symbol] + # + def symbol_dst_subfolder_spec + key = Constants::COPY_FILES_BUILD_PHASE_DESTINATIONS.find { |_, num| num == dst_subfolder_spec } + key ? key.first : nil + end + end + + #-----------------------------------------------------------------------# + + # A phase responsible of running a shell script (aka `Run Script`). + # + # @note This phase can appear multiple times in a target. + # + class PBXShellScriptBuildPhase < AbstractBuildPhase + # @!group Attributes + + # @return [String] the name of the build phase. + # + attribute :name, String + + # @return [Array<String>] an array of the paths to pass to the script. + # + # @example + # "$(SRCROOT)/myfile" + # + attribute :input_paths, Array, [] + + # @return [Array<String>] an array of input file list paths of the script. + # + # @example + # "$(SRCROOT)/newInputFile.xcfilelist" + # + attribute :input_file_list_paths, Array, [] + + # @return [Array<String>] an array of output paths of the script. + # + # @example + # "$(DERIVED_FILE_DIR)/myfile" + # + attribute :output_paths, Array, [] + + # @return [Array<String>] an array of output file list paths of the script. + # + # @example + # "$(SRCROOT)/newOutputFile.xcfilelist" + # + attribute :output_file_list_paths, Array, [] + + # @return [String] the path to the script interpreter. + # + # @note Defaults to `/bin/sh`. + # + attribute :shell_path, String, '/bin/sh' + + # @return [String] the actual script to perform. + # + # @note Defaults to a comment string. + # + attribute :shell_script, String, "# Type a script or drag a script file from your workspace to insert its path.\n" + + # @return [String] whether or not the ENV variables should be shown in + # the build log. + # + attribute :show_env_vars_in_log, String + + # @return [String] the discovered dependency file to use. + # + attribute :dependency_file, String + + # @return [Hash{String => Hash}] A hash suitable to display the build + # phase to the user. + # + def pretty_print + { + display_name => { + 'Input File List Paths' => input_file_list_paths || [], + 'Input Paths' => input_paths || [], + 'Output File List Paths' => output_file_list_paths || [], + 'Output Paths' => output_paths || [], + 'Shell Path' => shell_path, + 'Shell Script' => shell_script, + }, + } + end + end + + #-----------------------------------------------------------------------# + + # Apparently a build phase named `Build Carbon Resources` (Observed for + # kernel extensions targets). + # + # @note This phase can appear multiple times in a target. + # + class PBXRezBuildPhase < AbstractBuildPhase + end + + #-----------------------------------------------------------------------# + end + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/project/object/build_rule.rb b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/project/object/build_rule.rb new file mode 100644 index 0000000..a3e8cac --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/project/object/build_rule.rb @@ -0,0 +1,109 @@ +module Xcodeproj + class Project + module Object + # This class represents a custom build rule of a Target. + # + class PBXBuildRule < AbstractObject + # @!group Attributes + + # @return [String] the name of the rule. + # + attribute :name, String + + # @return [String] a string representing what compiler to use. + # + # @example + # `com.apple.compilers.proxy.script`. + # + attribute :compiler_spec, String + + # @return [String] the discovered dependency file to use. + # + # @example + # `$(DERIVED_FILES_DIR)/$(INPUT_FILE_NAME).d`. + # + attribute :dependency_file, String + + # @return [String] the type of the files that should be processed by + # this rule. + # + # @example + # `pattern.proxy`. + # + attribute :file_type, String + + # @return [String] the pattern of the files that should be processed by + # this rule. This attribute is an alternative to to + # `file_type`. + # + # @example + # `*.css`. + # + attribute :file_patterns, String + + # @return [String] whether the rule is editable. + # + # @example + # `1`. + # + attribute :is_editable, String, '1' + + # @return [ObjectList<PBXFileReference>] the file references for the + # input files files. + # + attribute :input_files, Array + + # @return [ObjectList<PBXFileReference>] the file references for the + # output files. + # + attribute :output_files, Array + + # @return [ObjectList<String>] the compiler flags used when creating the + # respective output files. + # + attribute :output_files_compiler_flags, Array + + # @return [String] whether the rule should be run once per architecture. + # + # @example + # `0`. + # + attribute :run_once_per_architecture, String + + # @return [String] the content of the script to use for the build rule. + # + # @note This attribute is present if the #{#compiler_spec} is + # `com.apple.compilers.proxy.script` + # + attribute :script, String + + # @!group Helpers + + # Adds an output file with the specified compiler flags. + # + # @param [PBXFileReference] file the file to add. + # + # @param [String] compiler_flags the compiler flags for the file. + # + # @return [Void] + # + def add_output_file(file, compiler_flags = '') + (self.output_files ||= []) << file + (self.output_files_compiler_flags ||= []) << compiler_flags + end + + # @return [Array<[PBXFileReference, String]>] + # An array containing tuples of output files and their compiler + # flags. + # + def output_files_and_flags + (output_files || []).zip(output_files_compiler_flags || []) + end + + def ascii_plist_annotation + " #{isa} " + end + end + end + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/project/object/configuration_list.rb b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/project/object/configuration_list.rb new file mode 100644 index 0000000..d39834f --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/project/object/configuration_list.rb @@ -0,0 +1,117 @@ +module Xcodeproj + class Project + module Object + # The primary purpose of this class is to maintain a collection of + # related build configurations of a {PBXProject} or a {PBXNativeTarget}. + # + class XCConfigurationList < AbstractObject + # @!group Attributes + + # @return [String] whether the default configuration is visible. + # Usually `0`. The purpose of this flag and how Xcode displays + # it in the UI is unknown. + # + attribute :default_configuration_is_visible, String, '0' + + # @return [String] the name of the default configuration. + # Usually `Release`. Xcode exposes this attribute as the + # configuration for the command line tools and only allows to + # set it at the project level. + # + attribute :default_configuration_name, String, 'Release' + + # @return [ObjectList<XCBuildConfiguration>] the build + # configurations of the target. + # + has_many :build_configurations, XCBuildConfiguration + + public + + # @!group Helpers + # --------------------------------------------------------------------# + + # Returns the build configuration with the given name. + # + # @param [String] name + # The name of the build configuration. + # + # @return [XCBuildConfiguration] The build configuration. + # @return [Nil] If not build configuration with the given name is found. + # + def [](name) + build_configurations.find { |bc| bc.name == name } + end + + # Returns the build settings of the build configuration with + # the given name. + # + # @param [String] build_configuration_name + # The name of the build configuration. + # + # @return [Hash {String=>String}] the build settings + # + def build_settings(build_configuration_name) + if config = self[build_configuration_name] + config.build_settings + end + end + + # Gets the value for the given build setting in all the build + # configurations. + # + # @param [String] key + # the key of the build setting. + # + # @param [Bool] resolve_against_xcconfig + # wether the retrieved setting should take in consideration any + # configuration file present. + # + # @param [PBXNativeTarget] root_target + # use this to resolve complete recursion between project and targets + # + # @return [Hash{String => String}] The value of the build setting + # grouped by the name of the build configuration. + # + def get_setting(key, resolve_against_xcconfig = false, root_target = nil) + result = {} + build_configurations.each do |bc| + result[bc.name] = resolve_against_xcconfig ? bc.resolve_build_setting(key, root_target) : bc.build_settings[key] + end + result + end + + # Sets the given value for the build setting associated with the given + # key across all the build configurations. + # + # @param [String] key + # the key of the build setting. + # + # @param [String] value + # the value for the build setting. + # + # @return [void] + # + def set_setting(key, value) + build_configurations.each do |bc| + bc.build_settings[key] = value + end + end + + def target + return project.root_object if project.build_configuration_list.uuid == uuid + project.targets.find { |t| t.build_configuration_list.uuid == uuid } + end + + #---------------------------------------------------------------------# + + def ascii_plist_annotation + if target.nil? + ' Build configuration list for <deleted target> ' + else + " Build configuration list for #{target.isa} \"#{target}\" " + end + end + end + end + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/project/object/container_item_proxy.rb b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/project/object/container_item_proxy.rb new file mode 100644 index 0000000..30abdd9 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/project/object/container_item_proxy.rb @@ -0,0 +1,116 @@ +module Xcodeproj + class Project + module Object + # Apparently a proxy for another object which might belong another + # project contained in the same workspace of the project document. + # + # This class is referenced by {PBXTargetDependency} for information about + # it usage see the specs of that class. + # + # @note This class references the other objects by UUID instead of + # creating proper relationships because the other objects might be + # part of another project. This implies that the references to + # other objects should not increase the retain count of the + # targets. + # + # @todo: This class needs some work to support targets across workspaces, + # as the container portal might not be initialized leading + # xcodeproj to raise because ti can't find the UUID. + # + class PBXContainerItemProxy < AbstractObject + # @!group Attributes + + # @return [String] apparently the UUID of the root object + # {PBXProject} of the project containing the represented + # object. + # + # @todo this is an attribute because a it is usually a reference to + # the root object or to a file reference to another project. + # The reference to the root object causes a retain cycle that + # could cause issues (e.g. in to_tree_hash). Usually those + # objects are retained by at least another object (the + # {Project} for the root object and a {PBXGroup} for the + # reference to another project) and so the referenced object + # should be serialized. + # + # If this assumption is incorrect, there could be loss of + # information opening and saving an existing project. + # + # @todo This is the external reference that 'contains' other proxy + # items. + attribute :container_portal, String + + # @return [String] the type of the proxy. + # + # @note @see {Constants::PROXY_TYPE.values} for valid values. + # + attribute :proxy_type, String + + # @return [String] apparently the UUID of the represented + # object. + # + # @note If the object is in another project the UUID would not be + # present in the {Project#objects_by_uuid} hash. For this + # reason this is not an `has_one` attribute. It is assumes that + # if the object belongs to the project at least another object + # should be retaining it. This assumption is reasonable because + # this is a proxy class. + # + # If this assumption is incorrect, there could be loss of + # information opening and saving an existing project. + # + attribute :remote_global_id_string, String + + # @return [String] apparently the name of the object represented by + # the proxy. + # + attribute :remote_info, String + + # Checks whether the reference points to a remote project. + # + # @return [Bool] + # + def remote? + project.root_object.uuid != container_portal + end + + # Get the proxied object + # + # @return [AbstractObject] + # + def proxied_object + container_portal_object.objects_by_uuid[remote_global_id_string] + end + + def container_portal_object + if remote? + container_portal_file_ref = project.objects_by_uuid[container_portal] + Project.open(container_portal_file_ref.real_path) + else + project + end + end + + def container_portal_annotation + if remote? + " #{File.basename(project.objects_by_uuid[container_portal].real_path)} " + else + project.root_object.ascii_plist_annotation + end + end + + def to_hash_as(method = :to_hash) + hash = super + if method == :to_ascii_plist + hash['containerPortal'] = Nanaimo::String.new(container_portal, container_portal_annotation) + end + hash + end + + def ascii_plist_annotation + " #{isa} " + end + end + end + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/project/object/file_reference.rb b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/project/object/file_reference.rb new file mode 100644 index 0000000..2e32e93 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/project/object/file_reference.rb @@ -0,0 +1,346 @@ +require 'xcodeproj/project/object/helpers/groupable_helper' + +module Xcodeproj + class Project + module Object + # This class represents a reference to a file in the file system. + # + class PBXFileReference < AbstractObject + # @!group Attributes + + # @return [String] the name of the reference, often not present. + # + attribute :name, String + + # @return [String] the path to the file relative to the source tree + # + attribute :path, String + + # @return [String] the directory to which the path is relative. + # + # @note The accepted values are: + # - `<absolute>` for absolute paths + # - `<group>` for paths relative to the group + # - `SOURCE_ROOT` for paths relative to the project + # - `DEVELOPER_DIR` for paths relative to the developer + # directory. + # - `BUILT_PRODUCTS_DIR` for paths relative to the build + # products directory. + # - `SDKROOT` for paths relative to the SDK directory. + # + attribute :source_tree, String, 'SOURCE_ROOT' + + # @return [String] the file type (apparently) used for products + # generated by Xcode (i.e. applications, libraries). + # + attribute :explicit_file_type, String + + # @return [String] the file type guessed by Xcode. + # + # @note This attribute is not present if there is an + # `explicit_file_type`. + # + attribute :last_known_file_type, String + + # @return [String] whether this file should be indexed. It can + # be either `0` or `1`. + # + # @note Apparently present only for products generated by Xcode with + # a value of `0`. + # + attribute :include_in_index, String, '1' + + # @return [String] a string containing a number which represents the + # encoding format of the file. + # + attribute :fileEncoding, String + + # @return [String] a string that specifies the UTI for the syntax + # highlighting. + # + # @example + # `xcode.lang.ruby` + # + attribute :xc_language_specification_identifier, String + + # @return [String] a string that specifies the UTI for the structure of + # a plist file. + # + # @example + # `com.apple.xcode.plist.structure-definition.iphone.info-plist` + # + attribute :plist_structure_definition_identifier, String + + # @return [String] Whether Xcode should use tabs for text alignment. + # + # @example + # `1` + # + attribute :uses_tabs, String + + # @return [String] The width of the indent. + # + # @example + # `2` + # + attribute :indent_width, String + + # @return [String] The width of the tabs. + # + # @example + # `2` + # + attribute :tab_width, String + + # @return [String] Whether Xcode should wrap lines. + # + # @example + # `1` + # + attribute :wraps_lines, String + + # @return [String] Apparently whether Xcode should add, if needed, a + # new line feed before saving the file. + # + # @example + # `0` + # + attribute :line_ending, String + + # @return [String] a string that specifies the signature of an external + # framework. + # + # @example + # `AppleDeveloperProgram:TEAM0ID1:Team name` + # + attribute :expected_signature, String + + # @return [String] Comments associated with this file. + # + # @note This is apparently no longer used by Xcode. + # + attribute :comments, String + + #---------------------------------------------------------------------# + + public + + # @!group Helpers + + # @return [String] the name of the file taking into account the path if + # needed. + # + def display_name + if name + name + elsif (class << GroupableHelper; self; end)::SOURCE_TREES_BY_KEY[:built_products] == source_tree + path + elsif path + File.basename(path) + end + end + + # @return [PBXGroup, PBXProject] the parent of the file. + # + def parent + GroupableHelper.parent(self) + end + + # @return [Array<PBXGroup, PBXProject>] The list of the parents of the + # reference. + # + def parents + GroupableHelper.parents(self) + end + + # @return [String] A representation of the reference hierarchy. + # + def hierarchy_path + GroupableHelper.hierarchy_path(self) + end + + # Moves the reference to a new parent. + # + # @param [PBXGroup] new_parent + # The new parent. + # + # @return [void] + # + def move(new_parent) + GroupableHelper.move(self, new_parent) + end + + # @return [Pathname] the absolute path of the file resolving the + # source tree. + # + def real_path + GroupableHelper.real_path(self) + end + + # @return [Pathname] the path of the file without resolving the + # source tree. + # + def full_path + GroupableHelper.full_path(self) + end + + # Sets the source tree of the reference. + # + # @param [Symbol, String] source_tree + # The source tree, either a string or a symbol. + # + # @return [void] + # + def set_source_tree(source_tree) + GroupableHelper.set_source_tree(self, source_tree) + end + + # Allows to set the path according to the source tree of the reference. + # + # @param [#to_s] the path for the reference. + # + # @return [void] + # + def set_path(path) + if path + GroupableHelper.set_path_with_source_tree(self, path, source_tree) + else + self.path = nil + end + end + + # @return [Array<PBXBuildFile>] the build files associated with the + # current file reference. + # + def build_files + referrers.grep(PBXBuildFile) + end + + # Sets the last known file type according to the extension of the path. + # + # @return [void] + # + def set_last_known_file_type(type = nil) + if type + self.last_known_file_type = type + elsif path + extension = Pathname(path).extname[1..-1] + self.last_known_file_type = Constants::FILE_TYPES_BY_EXTENSION[extension] + end + end + + # Sets the explicit file type according to the extension of the path, + # and clears the last known file type. + # + # @return [void] + # + def set_explicit_file_type(type = nil) + self.last_known_file_type = nil + if type + self.explicit_file_type = type + elsif path + extension = Pathname(path).extname[1..-1] + self.explicit_file_type = Constants::FILE_TYPES_BY_EXTENSION[extension] + end + end + + #---------------------------------------------------------------------# + + # Checks whether the reference is a proxy. + # + # @return [Bool] always false for this ISA. + # + def proxy? + false + end + + # If this file reference represents an external Xcode project reference + # then this will return metadata about it which includes the reference + # to the 'Products' group that's created in this project (the project + # that includes the external project). + # + # @return [ObjectDictionary, nil] The external project metadata for + # this file reference or `nil` if it's not an external project. + # + def project_reference_metadata + project.root_object.project_references.find do |project_reference| + project_reference[:project_ref] == self + end + end + + # If this file reference represents an external Xcode project reference + # then this will return the objects that are 'containers' for items + # contained in the external Xcode project. + # + # @return [Array<PBXContainerItemProxy>] The containers for items in + # the external Xcode project. + # + def proxy_containers + project.objects.select do |object| + object.isa == 'PBXContainerItemProxy' && + object.container_portal == uuid + end + end + + # If this file reference represents an external Xcode project reference + # then this will return proxies for file references contained in the + # external Xcode project. + # + # @return [Array<PBXReferenceProxy>] The file reference proxies for + # items located in the external Xcode project. + # + def file_reference_proxies + containers = proxy_containers + if containers.empty? + [] + else + project.objects.select do |object| + object.isa == 'PBXReferenceProxy' && + containers.include?(object.remote_ref) + end + end + end + + # If this file reference represents an external Xcode project reference + # then this will return dependencies on targets contained in the + # external Xcode project. + # + # @return [Array<PBXTargetDependency>] The dependencies on targets + # located in the external Xcode project. + # + def target_dependency_proxies + containers = proxy_containers + if containers.empty? + [] + else + project.objects.select do |object| + object.isa == 'PBXTargetDependency' && + containers.include?(object.target_proxy) + end + end + end + + # In addition to removing the file reference, this will also remove any + # items related to this reference. + # + # @see AbstractObject#remove_from_project + # + # @return [void] + # + def remove_from_project + if project_reference = project_reference_metadata + file_reference_proxies.each(&:remove_from_project) + target_dependency_proxies.each(&:remove_from_project) + project_reference[:product_group].remove_from_project + project.root_object.project_references.delete(project_reference) + end + + build_files.each(&:remove_from_project) + super + end + + #---------------------------------------------------------------------# + end + end + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/project/object/file_system_synchronized_exception_set.rb b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/project/object/file_system_synchronized_exception_set.rb new file mode 100644 index 0000000..9e61e10 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/project/object/file_system_synchronized_exception_set.rb @@ -0,0 +1,62 @@ +require 'xcodeproj/project/object_attributes' +require 'xcodeproj/project/object/helpers/groupable_helper' + +module Xcodeproj + class Project + module Object + # This class represents a file system synchronized build file exception set. + class PBXFileSystemSynchronizedBuildFileExceptionSet < AbstractObject + # @return [AbstractTarget] The target to which this exception set applies. + # + has_one :target, AbstractTarget + + # @return [Array<String>] The list of files in the group that are excluded from the target. + # + attribute :membership_exceptions, Array + + # @return [Array<String>] The list of public headers. + # + attribute :public_headers, Array + + # @return [Array<String>] The list of private headers. + # + attribute :private_headers, Array + + # @return [Hash] The files with specific compiler flags. + # + attribute :additional_compiler_flags_by_relative_path, Hash + + # @return [Hash] The files with specific attributes. + # + attribute :attributes_by_relative_path, Hash + + # @return [Hash] The files with a platform filter. + # + attribute :platform_filters_by_relative_path, Hash + + def display_name + "Exceptions for \"#{GroupableHelper.parent(self).display_name}\" folder in \"#{target.name}\" target" + end + end + + # This class represents a file system synchronized group build phase membership exception set. + class PBXFileSystemSynchronizedGroupBuildPhaseMembershipExceptionSet < AbstractObject + # @return [PBXSourcesBuildPhase, PBXCopyFilesBuildPhase] The build phase to which this exception set applies. + # + has_one :build_phase, [PBXSourcesBuildPhase, PBXCopyFilesBuildPhase] + + # @return [Array<String>] The list of files in the group that are excluded from the build phase. + # + attribute :membership_exceptions, Array + + # @return [Hash] The files with a platform filter. + # + attribute :platform_filters_by_relative_path, Hash + + def display_name + "Exceptions for \"#{GroupableHelper.parent(self).display_name}\" folder in \"#{build_phase.name}\" build phase" + end + end + end + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/project/object/file_system_synchronized_root_group.rb b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/project/object/file_system_synchronized_root_group.rb new file mode 100644 index 0000000..4a26bc6 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/project/object/file_system_synchronized_root_group.rb @@ -0,0 +1,74 @@ +require 'xcodeproj/project/object/file_system_synchronized_exception_set' + +module Xcodeproj + class Project + module Object + # This class represents a file system synchronized root group. + class PBXFileSystemSynchronizedRootGroup < AbstractObject + # @return [String] the directory to which the path is relative. + # + # @note The accepted values are: + # - `<absolute>` for absolute paths + # - `<group>` for paths relative to the group + # - `SOURCE_ROOT` for paths relative to the project + # - `DEVELOPER_DIR` for paths relative to the developer + # directory. + # - `BUILT_PRODUCTS_DIR` for paths relative to the build + # products directory. + # - `SDKROOT` for paths relative to the SDK directory. + # + attribute :source_tree, String, '<group>' + + # @return [String] the path to a folder in the file system. + # + attribute :path, String + + # @return [String] Whether Xcode should use tabs for text alignment. + # + # @example + # `1` + # + attribute :uses_tabs, String + + # @return [String] The width of the indent. + # + # @example + # `2` + # + attribute :indent_width, String + + # @return [String] The width of the tabs. + # + # @example + # `2` + # + attribute :tab_width, String + + # @return [String] Whether Xcode should wrap lines. + # + # @example + # `1` + # + attribute :wraps_lines, String + + # @return [Array<PBXFileSystemSynchronizedBuildFileExceptionSet, PBXFileSystemSynchronizedGroupBuildPhaseMembershipExceptionSet>] + # The list of exceptions applying to this group. + # + has_many :exceptions, [PBXFileSystemSynchronizedBuildFileExceptionSet, PBXFileSystemSynchronizedGroupBuildPhaseMembershipExceptionSet] + + # @return [Hash] The files in the group that have a file type defined explicitly. + # + attribute :explicit_file_types, Hash + + # @return [Array] The folders in the group that are defined explicitly. + # + attribute :explicit_folders, Array + + def display_name + return path if path + super + end + end + end + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/project/object/group.rb b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/project/object/group.rb new file mode 100644 index 0000000..51902dd --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/project/object/group.rb @@ -0,0 +1,507 @@ +require 'xcodeproj/project/object/helpers/groupable_helper' +require 'xcodeproj/project/object/helpers/file_references_factory' +require 'xcodeproj/project/object/file_system_synchronized_root_group' + +module Xcodeproj + class Project + module Object + # This class represents a group. A group can contain other groups + # (PBXGroup) and file references (PBXFileReference). + # + class PBXGroup < AbstractObject + # @!group Attributes + + # @return [ObjectList<PBXGroup, PBXFileReference>] + # the objects contained by the group. + # + has_many :children, [PBXGroup, PBXFileReference, PBXReferenceProxy, PBXFileSystemSynchronizedRootGroup] + + # @return [String] the directory to which the path is relative. + # + # @note The accepted values are: + # - `<absolute>` for absolute paths + # - `<group>` for paths relative to the group + # - `SOURCE_ROOT` for paths relative to the project + # - `DEVELOPER_DIR` for paths relative to the developer + # directory. + # - `BUILT_PRODUCTS_DIR` for paths relative to the build + # products directory. + # - `SDKROOT` for paths relative to the SDK directory. + # + attribute :source_tree, String, '<group>' + + # @return [String] the path to a folder in the file system. + # + # @note This attribute is present for groups that are linked to a + # folder in the file system. + # + attribute :path, String + + # @return [String] the name of the group. + # + # @note If path is specified this attribute is not present. + # + attribute :name, String + + # @return [String] Whether Xcode should use tabs for text alignment. + # + # @example + # `1` + # + attribute :uses_tabs, String + + # @return [String] The width of the indent. + # + # @example + # `2` + # + attribute :indent_width, String + + # @return [String] The width of the tabs. + # + # @example + # `2` + # + attribute :tab_width, String + + # @return [String] Whether Xcode should wrap lines. + # + # @example + # `1` + # + attribute :wraps_lines, String + + # @return [String] Comments associated with this group. + # + # @note This is apparently no longer used by Xcode. + # + attribute :comments, String + + public + + # @!group Helpers + #---------------------------------------------------------------------# + + # @return [PBXGroup, PBXProject] The parent of the group. + # + def parent + GroupableHelper.parent(self) + end + + # @return [Array<PBXGroup, PBXProject>] The list of the parents of the + # group. + # + def parents + GroupableHelper.parents(self) + end + + # @return [String] A representation of the group hierarchy. + # + def hierarchy_path + GroupableHelper.hierarchy_path(self) + end + + # Moves the group to a new parent. + # + # @param [PBXGroup] new_parent + # The new parent. + # + # @return [void] + # + def move(new_parent) + GroupableHelper.move(self, new_parent) + end + + # @return [Pathname] the absolute path of the group resolving the + # source tree. + # + def real_path + GroupableHelper.real_path(self) + end + + # Sets the source tree of the group. + # + # @param [Symbol, String] source_tree + # The source tree, either a string or a symbol. + # + # @return [void] + # + def set_source_tree(source_tree) + GroupableHelper.set_source_tree(self, source_tree) + end + + # Allows to set the path according to the source tree of the group. + # + # @param [#to_s] the path for the group. + # + # @return [void] + # + def set_path(path) + if path + source_tree + GroupableHelper.set_path_with_source_tree(self, path, source_tree) + else + self.path = nil + self.source_tree = '<group>' + end + end + + # @return [Array<PBXFileReference>] the file references in the group + # children. + # + def files + children.grep(PBXFileReference) + end + + # @return [PBXFileReference] The file references whose path (regardless + # of the source tree) matches the give path. + # + def find_file_by_path(path) + files.find { |ref| ref.path == path } + end + + # @return [Array<PBXGroup>] the groups in the group children. + # + def groups + # Don't grep / is_a? as this would include child classes. + children.select { |obj| obj.class == PBXGroup } + end + + # @return [Array<XCVersionGroup>] the version groups in the group + # children. + # + def version_groups + children.grep(XCVersionGroup) + end + + # @return [Array<PBXGroup,PBXFileReference,PBXReferenceProxy>] the + # recursive children of the group. + # + def recursive_children_groups + result = [] + groups.each do |child| + result << child + result.concat(child.recursive_children_groups) + end + result + end + + # @return [Array<PBXGroup,PBXFileReference,PBXReferenceProxy>] the + # recursive list of the children of the group. + # + def recursive_children + result = [] + children.each do |child| + result << child + if child.is_a?(PBXGroup) + result.concat(child.recursive_children) + end + end + result + end + + # @return [Bool] Whether the group is empty. + # + def empty? + children.count.zero? + end + + # Creates a new reference with the given path and adds it to the + # group. The reference is configured according to the extension + # of the path. + # + # @param [#to_s] path + # The, preferably absolute, path of the reference. + # + # @param [Symbol] source_tree + # The source tree key to use to configure the path (@see + # GroupableHelper::SOURCE_TREES_BY_KEY). + # + # @return [PBXFileReference, XCVersionGroup] The new reference. + # + def new_reference(path, source_tree = :group) + FileReferencesFactory.new_reference(self, path, source_tree) + end + alias_method :new_file, :new_reference + + # Creates a file reference to a static library and adds it to the + # group. + # + # @param [#to_s] product_basename + # The name of the static library. + # + # @return [PBXFileReference] The new file reference. + # + def new_product_ref_for_target(product_basename, product_type) + FileReferencesFactory.new_product_ref_for_target(self, product_basename, product_type) + end + + # Creates a file reference to a new bundle. + # + # @param [#to_s] product_basename + # The name of the bundle. + # + # @return [PBXFileReference] The new file reference. + # + def new_bundle(product_basename) + FileReferencesFactory.new_bundle(self, product_basename) + end + + # Creates a file reference to a new bundle and adds it to the group. + # + # @note @see new_reference + # + # @param [#to_s] name + # the name of the new group. + # + # @return [PBXGroup] the new group. + # + def new_group(name, path = nil, source_tree = :group) + group = project.new(PBXGroup) + children << group + group.name = name + group.set_source_tree(source_tree) + group.set_path(path) + group + end + + # Creates a new variant group and adds it to the group + # + # @note @see new_group + # + # @param [#to_s] name + # the name of the new group. + # + # @param [#to_s] path + # The, preferably absolute, path of the variant group. + # Pass the path of the folder containing all the .lproj bundles, + # that contain files for the variant group. + # Do not pass the path of a specific bundle (such as en.lproj) + # + # @param [Symbol] source_tree + # The source tree key to use to configure the path (@see + # GroupableHelper::SOURCE_TREES_BY_KEY). + # + # @return [PBXVariantGroup] the new variant group. + # + def new_variant_group(name, path = nil, source_tree = :group) + group = project.new(PBXVariantGroup) + children << group + group.name = name + group.set_source_tree(source_tree) + group.set_path(path) + group + end + + # Traverses the children groups and finds the group with the given + # path, if exists. + # + # @see find_subpath + # + def [](path) + find_subpath(path, false) + end + + # Removes children files and groups under this group. + # + def clear + children.objects.each(&:remove_from_project) + end + alias_method :remove_children_recursively, :clear + + # Traverses the children groups and finds the children with the given + # path, optionally, creating any needed group. If the given path is + # `nil` it returns itself. + # + # @param [String] path + # a string with the names of the groups separated by a '`/`'. + # + # @param [Boolean] should_create + # whether the path should be created. + # + # @note The path is matched against the {#display_name} of the groups. + # + # @example + # g = main_group['Frameworks'] + # g.name #=> 'Frameworks' + # + # @return [PBXGroup] the group if found. + # @return [Nil] if the path could not be found and should create is + # false. + # + def find_subpath(path, should_create = false) + return self unless path + path = path.split('/') unless path.is_a?(Array) + child_name = path.shift + child = children.find { |c| c.display_name == child_name } + if child.nil? + if should_create + child = new_group(child_name) + else + return nil + end + end + if path.empty? + child + else + child.find_subpath(path, should_create) + end + end + + # Adds an object to the group. + # + # @return [ObjectList<AbstractObject>] the children list. + # + def <<(child) + children << child + end + + # Sorts the children of the group by type and then by name. + # + # @note This is safe to call in an object list because it modifies it + # in C in Ruby MRI. In other Ruby implementation it can cause + # issues if there is one call to the notification enabled + # methods not compensated by the corespondent opposite (loss of + # UUIDs and objects from the project). + # + # @return [void] + # + def sort_by_type + children.sort! do |x, y| + if x.isa == 'PBXGroup' && !(y.isa == 'PBXGroup') + -1 + elsif !(x.isa == 'PBXGroup') && y.isa == 'PBXGroup' + 1 + elsif x.display_name && y.display_name + extname_x = File.extname(x.display_name) + extname_y = File.extname(y.display_name) + if extname_x != extname_y + extname_x <=> extname_y + else + File.basename(x.display_name, '.*') <=> File.basename(y.display_name, '.*') + end + else + 0 + end + end + end + + # Sorts the group by type recursively. + # + # @return [void] + # + def sort_recursively_by_type + groups.each(&:sort_recursively_by_type) + sort_by_type + end + + public + + # @!group AbstractObject Hooks + #---------------------------------------------------------------------# + + # @return [String] the name of the group taking into account the path + # or other factors if needed. + # + def display_name + if name + name + elsif path + File.basename(path) + elsif self.equal?(project.main_group) + 'Main Group' + end + end + + def ascii_plist_annotation + super unless self.equal?(project.main_group) + end + + # Sorts the to many attributes of the object according to the display + # name. + # + # @param [Hash] options + # the sorting options. + # @option options [Symbol] :groups_position + # the position of the groups can be either `:above` or + # `:below`. + # + # @return [void] + # + def sort(options = nil) + children.sort! do |x, y| + if options && groups_position = options[:groups_position] + raise ArgumentError unless [:above, :below].include?(groups_position) + if x.isa == 'PBXGroup' && !(y.isa == 'PBXGroup') + next groups_position == :above ? -1 : 1 + elsif !(x.isa == 'PBXGroup') && y.isa == 'PBXGroup' + next groups_position == :above ? 1 : -1 + end + end + + result = File.basename(x.display_name.downcase, '.*') <=> File.basename(y.display_name.downcase, '.*') + if result.zero? + result = File.extname(x.display_name.downcase) <=> File.extname(y.display_name.downcase) + if result.zero? && !(x.path.nil? || y.path.nil?) + result = x.path.downcase <=> y.path.downcase + end + end + result + end + end + + # @return [Array<PBXBuildFile>] the build files associated with the + # current reference proxy. + # + def build_files + referrers.grep(PBXBuildFile) + end + + # In addition to removing the reference proxy, this will also remove any + # items related to this reference. + # + # @see AbstractObject#remove_from_project + # + # @return [void] + # + def remove_from_project + build_files.each(&:remove_from_project) + super + end + end + + #-----------------------------------------------------------------------# + + # This class is used to gather localized files into one entry. + # + class PBXVariantGroup < PBXGroup + # @!group Attributes + + # @return [String] the file type guessed by Xcode. + # + attribute :last_known_file_type, String + end + + #-----------------------------------------------------------------------# + + # A group that contains multiple files references to the different + # versions of a resource. + # + # Used to contain the different versions of a `xcdatamodel`. + # + class XCVersionGroup < PBXGroup + # @!group Attributes + + # @return [PBXFileReference] the reference to the current version. + # + has_one :current_version, PBXFileReference + + # @return [String] the type of the versioned resource. + # + attribute :version_group_type, String, 'wrapper.xcdatamodel' + end + + #-----------------------------------------------------------------------# + end + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/project/object/helpers/build_settings_array_settings_by_object_version.rb b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/project/object/helpers/build_settings_array_settings_by_object_version.rb new file mode 100644 index 0000000..431fdd1 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/project/object/helpers/build_settings_array_settings_by_object_version.rb @@ -0,0 +1,72 @@ +require 'set' + +module Xcodeproj + class Project + module Object + class XCBuildConfiguration + # yes, they are case-sensitive. + # no, Xcode doesn't do this for other PathList settings nor other + # settings ending in SEARCH_PATHS. + module BuildSettingsArraySettingsByObjectVersion + ARRAY_SETTINGS = %w( + ALTERNATE_PERMISSIONS_FILES + ARCHS + BUILD_VARIANTS + EXCLUDED_SOURCE_FILE_NAMES + FRAMEWORK_SEARCH_PATHS + GCC_PREPROCESSOR_DEFINITIONS + GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS + HEADER_SEARCH_PATHS + INFOPLIST_PREPROCESSOR_DEFINITIONS + LIBRARY_SEARCH_PATHS + OTHER_CFLAGS + OTHER_CPLUSPLUSFLAGS + OTHER_LDFLAGS + REZ_SEARCH_PATHS + SECTORDER_FLAGS + WARNING_CFLAGS + WARNING_LDFLAGS + ).to_set.freeze + private_constant :ARRAY_SETTINGS + + ARRAY_SETTINGS_OBJECT_VERSION_50 = %w( + ALTERNATE_PERMISSIONS_FILES + ARCHS + BUILD_VARIANTS + EXCLUDED_SOURCE_FILE_NAMES + FRAMEWORK_SEARCH_PATHS + GCC_PREPROCESSOR_DEFINITIONS + GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS + HEADER_SEARCH_PATHS + INCLUDED_SOURCE_FILE_NAMES + INFOPLIST_PREPROCESSOR_DEFINITIONS + LD_RUNPATH_SEARCH_PATHS + LIBRARY_SEARCH_PATHS + LOCALIZED_STRING_MACRO_NAMES + OTHER_CFLAGS + OTHER_CPLUSPLUSFLAGS + OTHER_LDFLAGS + REZ_SEARCH_PATHS + SECTORDER_FLAGS + SYSTEM_FRAMEWORK_SEARCH_PATHS + SYSTEM_HEADER_SEARCH_PATHS + USER_HEADER_SEARCH_PATHS + WARNING_CFLAGS + WARNING_LDFLAGS + ).to_set.freeze + private_constant :ARRAY_SETTINGS_OBJECT_VERSION_50 + + def self.[](object_version) + object_version = object_version.to_i + + if object_version >= 50 + ARRAY_SETTINGS_OBJECT_VERSION_50 + else + ARRAY_SETTINGS + end + end + end + end + end + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/project/object/helpers/file_references_factory.rb b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/project/object/helpers/file_references_factory.rb new file mode 100644 index 0000000..d59f85c --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/project/object/helpers/file_references_factory.rb @@ -0,0 +1,245 @@ +# frozen_string_literal: true +require 'xcodeproj/project/object/helpers/groupable_helper' + +module Xcodeproj + class Project + module Object + class FileReferencesFactory + class << self + # Creates a new reference with the given path and adds it to the + # given group. The reference is configured according to the extension + # of the path. + # + # @param [PBXGroup] group + # The group to which to add the reference. + # + # @param [#to_s] path + # The, preferably absolute, path of the reference. + # + # @param [Symbol] source_tree + # The source tree key to use to configure the path (@see + # GroupableHelper::SOURCE_TREES_BY_KEY). + # + # @return [PBXFileReference, XCVersionGroup] The new reference. + # + def new_reference(group, path, source_tree) + ref = case File.extname(path).downcase + when '.xcdatamodeld' + new_xcdatamodeld(group, path, source_tree) + when '.xcodeproj' + new_subproject(group, path, source_tree) + else + new_file_reference(group, path, source_tree) + end + + configure_defaults_for_file_reference(ref) + ref + end + + # Creates a file reference to a static library and adds it to the + # given group. + # + # @param [PBXGroup] group + # The group to which to add the reference. + # + # @param [#to_s] product_basename + # The name of the static library. + # + # @return [PBXFileReference] The new file reference. + # + def new_product_ref_for_target(group, product_basename, product_type) + if product_type == :static_library + prefix = 'lib' + end + extension = Constants::PRODUCT_UTI_EXTENSIONS[product_type] + path = "#{prefix}#{product_basename}" + path += ".#{extension}" if extension + ref = new_reference(group, path, :built_products) + ref.include_in_index = '0' + ref.set_explicit_file_type + ref + end + + # Creates a file reference to a new bundle and adds it to the given + # group. + # + # @param [PBXGroup] group + # The group to which to add the reference. + # + # @param [#to_s] product_basename + # The name of the bundle. + # + # @return [PBXFileReference] The new file reference. + # + def new_bundle(group, product_basename) + ref = new_reference(group, "#{product_basename}.bundle", :built_products) + ref.include_in_index = '0' + ref.set_explicit_file_type('wrapper.cfbundle') + ref + end + + private + + # @group Private Helpers + #-------------------------------------------------------------------# + + # Creates a new file reference with the given path and adds it to the + # given group. + # + # @param [PBXGroup] group + # The group to which to add the reference. + # + # @param [#to_s] path + # The, preferably absolute, path of the reference. + # + # @param [Symbol] source_tree + # The source tree key to use to configure the path (@see + # GroupableHelper::SOURCE_TREES_BY_KEY). + # + # @return [PBXFileReference] The new file reference. + # + def new_file_reference(group, path, source_tree) + path = Pathname.new(path) + ref = group.project.new(PBXFileReference) + group.children << ref + GroupableHelper.set_path_with_source_tree(ref, path, source_tree) + ref.set_last_known_file_type + ref + end + + # Creates a new version group reference to an xcdatamodeled adding + # the xcdatamodel files included in the wrapper as children file + # references. + # + # @param [PBXGroup] group + # The group to which to add the reference. + # + # @param [#to_s] path + # The, preferably absolute, path of the reference. + # + # @param [Symbol] source_tree + # The source tree key to use to configure the path (@see + # GroupableHelper::SOURCE_TREES_BY_KEY). + # + # @note To match Xcode behaviour the current version is read from + # the .xccurrentversion file, if it doesn't exist the last + # xcdatamodel according to its path is set as the current + # version. + # + # @return [XCVersionGroup] The new reference. + # + def new_xcdatamodeld(group, path, source_tree) + path = Pathname.new(path) + ref = group.project.new(XCVersionGroup) + group.children << ref + GroupableHelper.set_path_with_source_tree(ref, path, source_tree) + ref.version_group_type = 'wrapper.xcdatamodel' + + real_path = group.real_path.join(path) + current_version_name = nil + if real_path.exist? + real_path.children.each do |child_path| + if File.extname(child_path) == '.xcdatamodel' + new_file_reference(ref, child_path, :group) + elsif File.basename(child_path) == '.xccurrentversion' + full_path = real_path + File.basename(child_path) + xccurrentversion = Plist.read_from_path(full_path) + current_version_name = xccurrentversion['_XCCurrentVersionName'] + end + end + + if current_version_name + ref.current_version = ref.children.find do |obj| + obj.path.split('/').last == current_version_name + end + end + end + + ref + end + + # Creates a file reference to another Xcode subproject and setups the + # proxies to the targets. + # + # @param [PBXGroup] group + # The group to which to add the reference. + # + # @param [#to_s] path + # The, preferably absolute, path of the reference. + # + # @param [Symbol] source_tree + # The source tree key to use to configure the path (@see + # GroupableHelper::SOURCE_TREES_BY_KEY). + # + # @note To analyze the targets the given project is read and thus + # it should already exist in the disk. + # + # @return [PBXFileReference] The new file reference. + # + def new_subproject(group, path, source_tree) + ref = new_file_reference(group, path, source_tree) + ref.include_in_index = nil + + product_group_ref = find_products_group_ref(group, true) + + subproj = Project.open(path) + subproj.products_group.files.each do |product_reference| + container_proxy = group.project.new(PBXContainerItemProxy) + container_proxy.container_portal = ref.uuid + container_proxy.proxy_type = Constants::PROXY_TYPES[:reference] + container_proxy.remote_global_id_string = product_reference.uuid + container_proxy.remote_info = 'Subproject' + + reference_proxy = group.project.new(PBXReferenceProxy) + extension = File.extname(product_reference.path)[1..-1] + reference_proxy.file_type = Constants::FILE_TYPES_BY_EXTENSION[extension] + reference_proxy.path = product_reference.path + reference_proxy.remote_ref = container_proxy + reference_proxy.source_tree = 'BUILT_PRODUCTS_DIR' + + product_group_ref << reference_proxy + end + + attribute = PBXProject.references_by_keys_attributes.find { |attrb| attrb.name == :project_references } + project_reference = ObjectDictionary.new(attribute, group.project.root_object) + project_reference[:project_ref] = ref + project_reference[:product_group] = product_group_ref + group.project.root_object.project_references << project_reference + + ref + end + + # Configures a file reference according to the extension to math + # Xcode behaviour. + # + # @param [PBXFileReference] ref + # The file reference to configure. + # + # @note To closely match the Xcode behaviour the name attribute of + # the file reference is set only if the path of the file is + # not equal to the path of the group. + # + # @return [void] + # + def configure_defaults_for_file_reference(ref) + if ref.path.include?('/') + ref.name = ref.path.split('/').last + end + + if File.extname(ref.path).downcase == '.framework' + ref.include_in_index = nil + end + end + + def find_products_group_ref(group, should_create = false) + product_group_ref = + (group.project.root_object.product_ref_group ||= group.project.main_group.find_subpath('Products', should_create)) + product_group_ref + end + + #-------------------------------------------------------------------# + end + end + end + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/project/object/helpers/groupable_helper.rb b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/project/object/helpers/groupable_helper.rb new file mode 100644 index 0000000..1ae19fb --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/project/object/helpers/groupable_helper.rb @@ -0,0 +1,260 @@ +# frozen_string_literal: true +module Xcodeproj + class Project + module Object + class GroupableHelper + class << self + # @param [PBXGroup, PBXFileReference] object + # The object to analyze. + # + # @return [PBXGroup, PBXProject] The parent of the object. + # + def parent(object) + referrers = object.referrers.uniq + if referrers.count > 1 + referrers = referrers.grep(PBXGroup) + end + + if referrers.count == 0 + raise '[Xcodeproj] Consistency issue: no parent ' \ + "for object `#{object.display_name}`: "\ + "`#{object.referrers.join('`, `')}`" + elsif referrers.count > 1 + raise '[Xcodeproj] Consistency issue: unexpected multiple parents ' \ + "for object `#{object.display_name}`: "\ + "#{object.referrers}" + end + referrers.first + end + + # @param [PBXGroup, PBXFileReference] object + # The object to analyze. + # + # @return [Array<PBXGroup, PBXProject>] The parents of the object. + # + def parents(object) + if main_group?(object) + [] + else + parent = parent(object) + parents(parent).push(parent) + end + end + + # @param [PBXGroup, PBXFileReference] object + # The object to analyze. + # + # @return [String] A representation of the group hierarchy. + # + def hierarchy_path(object) + unless main_group?(object) + parent = parent(object) + parent = parent.hierarchy_path if parent.respond_to?(:hierarchy_path) + "#{parent}/#{object.display_name}" + end + end + + # @param [PBXGroup, PBXFileReference] object + # The object to analyze. + # + # @return [Bool] Wether the object is the main group of the project. + # + def main_group?(object) + object.equal?(object.project.main_group) + end + + # Moves the object to a new parent. + # + # @param [PBXGroup, PBXFileReference] object + # The object to move. + # + # @param [PBXGroup] new_parent + # The new parent. + # + # @return [void] + # + def move(object, new_parent) + unless object + raise "[Xcodeproj] Attempt to move nil object to `#{new_parent}`." + end + unless new_parent + raise "[Xcodeproj] Attempt to move object `#{object}` to nil parent." + end + if new_parent.equal?(object) + raise "[Xcodeproj] Attempt to move object `#{object}` to itself." + end + if parents(new_parent).include?(object) + raise "[Xcodeproj] Attempt to move object `#{object}` to a child object `#{new_parent}`." + end + + object.parent.children.delete(object) + new_parent << object + end + + # @param [PBXGroup, PBXFileReference] object + # The object to analyze. + # + # @return [Pathname] The absolute path of the object resolving the + # source tree. + # + def real_path(object) + source_tree = source_tree_real_path(object) + path = object.path || ''.freeze + if source_tree + source_tree + path + else + Pathname(path) + end + end + + # @param [PBXGroup, PBXFileReference] object + # The object to analyze. + # + # @return [Pathname] The path of the object without resolving the + # source tree. + # + def full_path(object) + folder = case object.source_tree + when '<group>' + object_parent = parent(object) + if object_parent.isa == 'PBXProject'.freeze + nil + else + full_path(object_parent) + end + when 'SOURCE_ROOT' + nil + when '<absolute>' + Pathname.new('/'.freeze) + else + Pathname.new("${#{object.source_tree}}") + end + folder ||= Pathname.new('') + if object.path + folder + object.path + else + folder + end + end + + # @param [PBXGroup, PBXFileReference] object + # The object to analyze. + # + # @return [Pathname] The absolute path of the source tree of the + # object. + # + def source_tree_real_path(object) + case object.source_tree + when '<group>' + object_parent = parent(object) + if object_parent.isa == 'PBXProject'.freeze + object.project.project_dir + object.project.root_object.project_dir_path + else + real_path(object_parent) + end + when 'SOURCE_ROOT' + object.project.project_dir + when '<absolute>' + nil + else + Pathname.new("${#{object.source_tree}}") + end + end + + # @return [Hash{Symbol => String}] The source tree values by they + # symbol representation. + # + SOURCE_TREES_BY_KEY = { + :absolute => '<absolute>', + :group => '<group>', + :project => 'SOURCE_ROOT', + :built_products => 'BUILT_PRODUCTS_DIR', + :developer_dir => 'DEVELOPER_DIR', + :sdk_root => 'SDKROOT', + }.freeze + + # Sets the source tree of the given object. + # + # @param [Symbol, String] source_tree + # The source tree, either a string or a key for + # {SOURCE_TREES_BY_KEY}. + # + # @return [void] + # + def set_source_tree(object, source_tree) + source_tree = normalize_source_tree(source_tree) + object.source_tree = source_tree + end + + # Sets the path of the given object according to the provided source + # tree key. The path is converted to relative according to the real + # path of the source tree for group and project source trees, if both + # paths are relative or absolute. Otherwise the path is set as + # provided. + # + # @param [PBXGroup, PBXFileReference] object + # The object whose path needs to be set. + # + # @param [#to_s] path + # The path. + # + # @param [Symbol, String] source_tree + # The source tree, either a string or a key for + # {SOURCE_TREES_BY_KEY}. + # + # @return [void] + # + def set_path_with_source_tree(object, path, source_tree) + path = Pathname(path) + source_tree = normalize_source_tree(source_tree) + object.source_tree = source_tree + + if source_tree == SOURCE_TREES_BY_KEY[:absolute] + unless path.absolute? + raise '[Xcodeproj] Attempt to set a relative path with an ' \ + "absolute source tree: `#{path}`" + end + object.path = path.to_s + elsif source_tree == SOURCE_TREES_BY_KEY[:group] || source_tree == SOURCE_TREES_BY_KEY[:project] + source_tree_real_path = GroupableHelper.source_tree_real_path(object) + if source_tree_real_path && source_tree_real_path.absolute? == path.absolute? + relative_path = path.relative_path_from(source_tree_real_path) + object.path = relative_path.to_s + else + object.path = path.to_s + end + else + object.path = path.to_s + end + end + + private + + # @group Helpers + #-------------------------------------------------------------------# + + # Converts the given source tree to its string value. + # + # @param [Symbol, String] source_tree + # The source tree, either a string or a key for + # {SOURCE_TREES_BY_KEY}. + # + # @return [String] the string value of the source tree. + # + def normalize_source_tree(source_tree) + if source_tree.is_a?(Symbol) + source_tree = SOURCE_TREES_BY_KEY[source_tree] + end + + unless SOURCE_TREES_BY_KEY.values.include?(source_tree) + raise "[Xcodeproj] Unrecognized source tree option `#{source_tree}`" + end + source_tree + end + + #-------------------------------------------------------------------# + end + end + end + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/project/object/native_target.rb b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/project/object/native_target.rb new file mode 100644 index 0000000..42b008c --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/project/object/native_target.rb @@ -0,0 +1,772 @@ +module Xcodeproj + class Project + module Object + class AbstractTarget < AbstractObject + # @!group Attributes + + # @return [String] The name of the Target. + # + attribute :name, String + + # @return [String] the name of the build product. + # + attribute :product_name, String + + # @return [String] Comments associated with this target. + # + # This is apparently no longer used by Xcode. + # + attribute :comments, String + + # @return [XCConfigurationList] the list of the build configurations of + # the target. This list commonly include two configurations + # `Debug` and `Release`. + # + has_one :build_configuration_list, XCConfigurationList + + # @return [ObjectList<PBXTargetDependency>] the targets necessary to + # build this target. + # + has_many :dependencies, PBXTargetDependency + + public + + # @!group Helpers + #--------------------------------------# + + # Gets the value for the given build setting in all the build + # configurations or the value inheriting the value from the project + # ones if needed. + # + # @param [String] key + # the key of the build setting. + # + # @param [Bool] resolve_against_xcconfig + # whether the resolved setting should take in consideration any + # configuration file present. + # + # @return [Hash{String => String}] The value of the build setting + # grouped by the name of the build configuration. + # + # TODO: Full support for this would require to take into account + # the default values for the platform. + # + def resolved_build_setting(key, resolve_against_xcconfig = false) + target_settings = build_configuration_list.get_setting(key, resolve_against_xcconfig, self) + project_settings = project.build_configuration_list.get_setting(key, resolve_against_xcconfig) + target_settings.merge(project_settings) do |_key, target_val, proj_val| + target_includes_inherited = Constants::INHERITED_KEYWORDS.any? { |keyword| target_val.include?(keyword) } if target_val + if target_includes_inherited && proj_val + if target_val.is_a? String + target_val.gsub(Regexp.union(Constants::INHERITED_KEYWORDS), proj_val) + else + target_val.flat_map { |value| Constants::INHERITED_KEYWORDS.include?(value) ? proj_val : value } + end + else + target_val || proj_val + end + end + end + + # Gets the value for the given build setting, properly inherited if + # need, if shared across the build configurations. + # + # @param [String] key + # the key of the build setting. + # + # @param [Boolean] resolve_against_xcconfig + # whether the resolved setting should take in consideration any + # configuration file present. + # + # @raise If the build setting has multiple values. + # + # @note As it is common not to have a setting with no value for + # custom build configurations nil keys are not considered to + # determine if the setting is unique. This is an heuristic + # which might not closely match Xcode behaviour. + # + # @return [String] The value of the build setting. + # + def common_resolved_build_setting(key, resolve_against_xcconfig: false) + values = resolved_build_setting(key, resolve_against_xcconfig).values.compact.uniq + if values.count <= 1 + values.first + else + raise "[Xcodeproj] Consistency issue: build setting `#{key}` has multiple values: `#{resolved_build_setting(key)}`" + end + end + + # @return [String] the SDK that the target should use. + # + def sdk + common_resolved_build_setting('SDKROOT') + end + + # @return [Symbol] the name of the platform of the target. + # + def platform_name + return unless sdk + if sdk.include? 'iphoneos' + :ios + elsif sdk.include? 'macosx' + :osx + elsif sdk.include? 'appletvos' + :tvos + elsif sdk.include? 'xros' + :visionos + elsif sdk.include? 'watchos' + :watchos + end + end + + # @return [String] the version of the SDK. + # + def sdk_version + return unless sdk + sdk.scan(/[0-9.]+/).first + end + + # @visibility private + # + # @return [Hash<Symbol, String>] + # The name of the setting for the deployment target by platform + # name. + # + DEPLOYMENT_TARGET_SETTING_BY_PLATFORM_NAME = { + :ios => 'IPHONEOS_DEPLOYMENT_TARGET', + :osx => 'MACOSX_DEPLOYMENT_TARGET', + :tvos => 'TVOS_DEPLOYMENT_TARGET', + :visionos => 'XROS_DEPLOYMENT_TARGET', + :watchos => 'WATCHOS_DEPLOYMENT_TARGET', + }.freeze + + # @return [String] the deployment target of the target according to its + # platform. + # + def deployment_target + return unless setting = DEPLOYMENT_TARGET_SETTING_BY_PLATFORM_NAME[platform_name] + common_resolved_build_setting(setting) + end + + # @param [String] deployment_target the deployment target to set for + # the target according to its platform. + # + def deployment_target=(deployment_target) + return unless setting = DEPLOYMENT_TARGET_SETTING_BY_PLATFORM_NAME[platform_name] + build_configurations.each do |config| + config.build_settings[setting] = deployment_target + end + end + + # @return [ObjectList<XCBuildConfiguration>] the build + # configurations of the target. + # + def build_configurations + build_configuration_list.build_configurations + end + + # Adds a new build configuration to the target and populates its with + # default settings according to the provided type if one doesn't + # exists. + # + # @note If a build configuration with the given name is already + # present no new build configuration is added. + # + # @param [String] name + # The name of the build configuration. + # + # @param [Symbol] type + # The type of the build configuration used to populate the build + # settings, must be :debug or :release. + # + # @return [XCBuildConfiguration] the created build configuration or the + # existing one with the same name. + # + def add_build_configuration(name, type) + if existing = build_configuration_list[name] + existing + else + build_configuration = project.new(XCBuildConfiguration) + build_configuration.name = name + product_type = self.product_type if respond_to?(:product_type) + build_configuration.build_settings = ProjectHelper.common_build_settings(type, platform_name, deployment_target, product_type) + build_configuration_list.build_configurations << build_configuration + build_configuration + end + end + + # @param [String] build_configuration_name + # the name of a build configuration. + # + # @return [Hash] the build settings of the build configuration with the + # given name. + # + # + def build_settings(build_configuration_name) + build_configuration_list.build_settings(build_configuration_name) + end + + # @!group Build Phases Helpers + + # @return [PBXFrameworksBuildPhase] + # the frameworks build phases of the target. + # + def frameworks_build_phases + build_phases.find { |bp| bp.class == PBXFrameworksBuildPhase } + end + + # @return [Array<PBXCopyFilesBuildPhase>] + # the copy files build phases of the target. + # + def copy_files_build_phases + build_phases.grep(PBXCopyFilesBuildPhase) + end + + # @return [Array<PBXShellScriptBuildPhase>] + # the shell script build phases of the target. + # + def shell_script_build_phases + build_phases.grep(PBXShellScriptBuildPhase) + end + + # Adds a dependency on the given target. + # + # @param [AbstractTarget] target + # the target which should be added to the dependencies list of + # the receiver. The target may be a target of this target's + # project or of a subproject of this project. Note that the + # subproject must already be added to this target's project. + # + # @return [void] + # + def add_dependency(target) + unless dependency_for_target(target) + container_proxy = project.new(Xcodeproj::Project::PBXContainerItemProxy) + if target.project == project + container_proxy.container_portal = project.root_object.uuid + else + subproject_reference = project.reference_for_path(target.project.path) + raise ArgumentError, 'add_dependency received target that belongs to a project that is not this project and is not a subproject of this project' unless subproject_reference + container_proxy.container_portal = subproject_reference.uuid + end + container_proxy.proxy_type = Constants::PROXY_TYPES[:native_target] + container_proxy.remote_global_id_string = target.uuid + container_proxy.remote_info = target.name + + dependency = project.new(Xcodeproj::Project::PBXTargetDependency) + dependency.name = target.name + dependency.target = target if target.project == project + dependency.target_proxy = container_proxy + + dependencies << dependency + end + end + + # Checks whether this target has a dependency on the given target. + # + # @param [AbstractTarget] target + # the target to search for. + # + # @return [PBXTargetDependency] + # + def dependency_for_target(target) + dependencies.find do |dep| + if dep.target_proxy.remote? + subproject_reference = project.reference_for_path(target.project.path) + uuid = subproject_reference.uuid if subproject_reference + dep.target_proxy.remote_global_id_string == target.uuid && dep.target_proxy.container_portal == uuid + else + dep.target.uuid == target.uuid + end + end + end + + # Creates a new copy files build phase. + # + # @param [String] name + # an optional name for the phase. + # + # @return [PBXCopyFilesBuildPhase] the new phase. + # + def new_copy_files_build_phase(name = nil) + phase = project.new(PBXCopyFilesBuildPhase) + phase.name = name + build_phases << phase + phase + end + + # Creates a new shell script build phase. + # + # @param (see #new_copy_files_build_phase) + # + # @return [PBXShellScriptBuildPhase] the new phase. + # + def new_shell_script_build_phase(name = nil) + phase = project.new(PBXShellScriptBuildPhase) + phase.name = name + build_phases << phase + phase + end + + public + + # @!group System frameworks + #--------------------------------------# + + # Adds a file reference for one or more system framework to the project + # if needed and adds them to the Frameworks build phases. + # + # @param [Array<String>, String] names + # The name or the list of the names of the framework. + # + # @note Xcode behaviour is following: if the target has the same SDK + # of the project it adds the reference relative to the SDK root + # otherwise the reference is added relative to the Developer + # directory. This can create confusion or duplication of the + # references of frameworks linked by iOS and OS X targets. For + # this reason the new Xcodeproj behaviour is to add the + # frameworks in a subgroup according to the platform. + # + # @return [Array<PBXFileReference>] An array of the newly created file + # references. + # + def add_system_framework(names) + Array(names).map do |name| + case platform_name + when :ios + group = project.frameworks_group['iOS'] || project.frameworks_group.new_group('iOS') + path_sdk_name = 'iPhoneOS' + path_sdk_version = sdk_version || Constants::LAST_KNOWN_IOS_SDK + when :osx + group = project.frameworks_group['OS X'] || project.frameworks_group.new_group('OS X') + path_sdk_name = 'MacOSX' + path_sdk_version = sdk_version || Constants::LAST_KNOWN_OSX_SDK + when :tvos + group = project.frameworks_group['tvOS'] || project.frameworks_group.new_group('tvOS') + path_sdk_name = 'AppleTVOS' + path_sdk_version = sdk_version || Constants::LAST_KNOWN_TVOS_SDK + when :visionos + group = project.frameworks_group['visionOS'] || project.frameworks_group.new_group('visionOS') + path_sdk_name = 'XROS' + path_sdk_version = sdk_version || Constants::LAST_KNOWN_VISIONOS_SDK + when :watchos + group = project.frameworks_group['watchOS'] || project.frameworks_group.new_group('watchOS') + path_sdk_name = 'WatchOS' + path_sdk_version = sdk_version || Constants::LAST_KNOWN_WATCHOS_SDK + else + raise 'Unknown platform for target' + end + + path = "Platforms/#{path_sdk_name}.platform/Developer/SDKs/#{path_sdk_name}#{path_sdk_version}.sdk/System/Library/Frameworks/#{name}.framework" + unless ref = group.find_file_by_path(path) + ref = group.new_file(path, :developer_dir) + end + frameworks_build_phase.add_file_reference(ref, true) + ref + end + end + alias_method :add_system_frameworks, :add_system_framework + + # Adds a file reference for one or more system dylib libraries to the project + # if needed and adds them to the Frameworks build phases. + # + # @param [Array<String>, String] names + # The name or the list of the names of the libraries. + # + # @return [void] + # + def add_system_library(names) + add_system_library_extension(names, 'dylib') + end + alias_method :add_system_libraries, :add_system_library + + def add_system_library_extension(names, extension) + Array(names).each do |name| + path = "usr/lib/lib#{name}.#{extension}" + files = project.frameworks_group.files + unless reference = files.find { |ref| ref.path == path } + reference = project.frameworks_group.new_file(path, :sdk_root) + end + frameworks_build_phase.add_file_reference(reference, true) + reference + end + end + private :add_system_library_extension + + # Adds a file reference for one or more system tbd libraries to the project + # if needed and adds them to the Frameworks build phases. + # + # @param [Array<String>, String] names + # The name or the list of the names of the libraries. + # + # @return [void] + # + def add_system_library_tbd(names) + add_system_library_extension(names, 'tbd') + end + alias_method :add_system_libraries_tbd, :add_system_library_tbd + + public + + # @!group AbstractObject Hooks + #--------------------------------------# + + # @return [Hash{String => Hash}] A hash suitable to display the object + # to the user. + # + def pretty_print + { + display_name => { + 'Build Phases' => build_phases.map(&:pretty_print), + 'Build Configurations' => build_configurations.map(&:pretty_print), + }, + } + end + end + + #-----------------------------------------------------------------------# + + # Represents a target handled by Xcode. + # + class PBXNativeTarget < AbstractTarget + # @!group Attributes + + # @return [PBXBuildRule] the build rules of this target. + # + has_many :build_rules, PBXBuildRule + + # @return [String] the build product type identifier. + # + attribute :product_type, String + + # @return [PBXFileReference] the reference to the product file. + # + has_one :product_reference, PBXFileReference + + # @return [ObjectList<XCSwiftPackageProductDependency>] the Swift package products necessary to + # build this target. + # + has_many :package_product_dependencies, XCSwiftPackageProductDependency + + # @return [String] the install path of the product. + # + attribute :product_install_path, String + + # @return [ObjectList<AbstractBuildPhase>] the build phases of the + # target. + # + # @note Apparently only PBXCopyFilesBuildPhase and + # PBXShellScriptBuildPhase can appear multiple times in a + # target. + # + has_many :build_phases, AbstractBuildPhase + + # @return [ObjectList<PBXFileSystemSynchronizedRootGroup>] the file system synchronized + # groups containing files to include to build this target. + # + has_many :file_system_synchronized_groups, PBXFileSystemSynchronizedRootGroup + + public + + # @!group Helpers + #--------------------------------------# + + # @return [Symbol] The type of the target expressed as a symbol. + # + def symbol_type + Constants::PRODUCT_TYPE_UTI.key(product_type) + end + + # @return [Boolean] Whether the target is a test target. + # + def test_target_type? + case symbol_type + when :octest_bundle, :unit_test_bundle, :ui_test_bundle + true + else + false + end + end + + # @return [Boolean] Whether the target is an extension. + # + def extension_target_type? + case symbol_type + when :app_extension, :watch_extension, :watch2_extension, :tv_extension, :messages_extension + true + else + false + end + end + + # @return [Boolean] Whether the target is launchable. + # + def launchable_target_type? + case symbol_type + when :application, :command_line_tool + true + else + false + end + end + + # Adds source files to the target. + # + # @param [Array<PBXFileReference>] file_references + # the files references of the source files that should be added + # to the target. + # + # @param [String] compiler_flags + # the compiler flags for the source files. + # + # @yield_param [PBXBuildFile] each created build file. + # + # @return [Array<PBXBuildFile>] the created build files. + # + def add_file_references(file_references, compiler_flags = {}) + file_references.map do |file| + extension = File.extname(file.path).downcase + header_extensions = Constants::HEADER_FILES_EXTENSIONS + is_header_phase = header_extensions.include?(extension) + phase = is_header_phase ? headers_build_phase : source_build_phase + + unless build_file = phase.build_file(file) + build_file = project.new(PBXBuildFile) + build_file.file_ref = file + phase.files << build_file + end + + if compiler_flags && !compiler_flags.empty? && !is_header_phase + (build_file.settings ||= {}).merge!('COMPILER_FLAGS' => compiler_flags) do |_, old, new| + [old, new].compact.join(' ') + end + end + + yield build_file if block_given? + + build_file + end + end + + # Adds resource files to the resources build phase of the target. + # + # @param [Array<PBXFileReference>] resource_file_references + # the files references of the resources to the target. + # + # @return [void] + # + def add_resources(resource_file_references) + resource_file_references.each do |file| + next if resources_build_phase.include?(file) + build_file = project.new(PBXBuildFile) + build_file.file_ref = file + resources_build_phase.files << build_file + end + end + + # Adds on demand resources to the resources build phase of the target. + # + # @param {String => [Array<PBXFileReference>]} on_demand_resource_tag_files + # the files references of the on demand resources to add to the target keyed by the tag. + # + # @return [void] + # + def add_on_demand_resources(on_demand_resource_tag_files) + on_demand_resource_tag_files.each do |tag, file_refs| + file_refs.each do |file_ref| + if resources_build_phase.include?(file_ref) + existing_build_file = resources_build_phase.build_file(file_ref) + existing_build_file.settings ||= {} + existing_build_file.settings['ASSET_TAGS'] ||= [] + existing_build_file.settings['ASSET_TAGS'] << tag + existing_build_file.settings['ASSET_TAGS'].uniq! + next + end + build_file = resources_build_phase.add_file_reference(file_ref, true) + build_file.settings = (build_file.settings ||= {}).merge('ASSET_TAGS' => [tag]) + end + end + end + + # Remove on demand resources from the resources build phase of the target. + # + # @param {String => [Array<PBXFileReference>]} on_demand_resource_tag_files + # the files references of the on demand resources to add to the target keyed by the tag. + # + # @return [void] + # + def remove_on_demand_resources(on_demand_resource_tag_files) + on_demand_resource_tag_files.each do |tag, file_refs| + file_refs.each do |file_ref| + build_file = resources_build_phase.build_file(file_ref) + next if build_file.nil? + asset_tags = build_file.settings['ASSET_TAGS'] + asset_tags.delete(tag) + resources_build_phase.remove_file_reference(file_ref) if asset_tags.empty? + end + end + end + + # Finds or creates the headers build phase of the target. + # + # @note A target should have only one headers build phase. + # + # @return [PBXHeadersBuildPhase] the headers build phase. + # + def headers_build_phase + find_or_create_build_phase_by_class(PBXHeadersBuildPhase) + end + + # Finds or creates the source build phase of the target. + # + # @note A target should have only one source build phase. + # + # @return [PBXSourcesBuildPhase] the source build phase. + # + def source_build_phase + find_or_create_build_phase_by_class(PBXSourcesBuildPhase) + end + + # Finds or creates the frameworks build phase of the target. + # + # @note A target should have only one frameworks build phase. + # + # @return [PBXFrameworksBuildPhase] the frameworks build phase. + # + def frameworks_build_phase + find_or_create_build_phase_by_class(PBXFrameworksBuildPhase) + end + + # Finds or creates the resources build phase of the target. + # + # @note A target should have only one resources build phase. + # + # @return [PBXResourcesBuildPhase] the resources build phase. + # + def resources_build_phase + find_or_create_build_phase_by_class(PBXResourcesBuildPhase) + end + + private + + # @!group Internal Helpers + #--------------------------------------# + + # Find or create a build phase by a given class + # + # @param [Class] phase_class the class of the build phase to find or create. + # + # @return [AbstractBuildPhase] the build phase whose class match the given phase_class. + # + def find_or_create_build_phase_by_class(phase_class) + @phases ||= {} + unless phase_class < AbstractBuildPhase + raise ArgumentError, "#{phase_class} must be a subclass of #{AbstractBuildPhase.class}" + end + @phases[phase_class] ||= build_phases.find { |bp| bp.class == phase_class } || + project.new(phase_class).tap { |bp| build_phases << bp } + end + + public + + # @!group AbstractObject Hooks + #--------------------------------------# + + # Sorts the to many attributes of the object according to the display + # name. + # + # Build phases are not sorted as they order is relevant. + # + def sort(_options = nil) + attributes_to_sort = to_many_attributes.reject { |attr| attr.name == :build_phases } + attributes_to_sort.each do |attrb| + list = attrb.get_value(self) + list.sort! do |x, y| + x.display_name <=> y.display_name + end + end + end + + def to_hash_as(method = :to_hash) + hash_as = super + excluded_keys_for_serialization_when_empty.each do |key| + if !hash_as[key].nil? && hash_as[key].empty? + hash_as.delete(key) + end + end + hash_as + end + + def to_ascii_plist + plist = super + excluded_keys_for_serialization_when_empty.each do |key| + if !plist.value[key].nil? && plist.value[key].empty? + plist.value.delete(key) + end + end + plist + end + + # @return [Array<String>] array of keys to exclude from serialization when the value is empty + def excluded_keys_for_serialization_when_empty + %w(packageProductDependencies fileSystemSynchronizedGroups) + end + end + + #-----------------------------------------------------------------------# + + # Represents a target that only consists in a aggregate of targets. + # + # @todo Apparently it can't have build rules. + # + class PBXAggregateTarget < AbstractTarget + # @!group Attributes + + # @return [PBXBuildRule] the build phases of the target. + # + # @note Apparently only PBXCopyFilesBuildPhase and + # PBXShellScriptBuildPhase can appear multiple times in a + # target. + # + has_many :build_phases, [PBXCopyFilesBuildPhase, PBXShellScriptBuildPhase] + end + + #-----------------------------------------------------------------------# + + # Represents a legacy target which uses an external build tool. + # + # Apparently it can't have any build phase but the attribute can be + # present. + # + class PBXLegacyTarget < AbstractTarget + # @!group Attributes + + # @return [String] e.g "Dir" + # + attribute :build_working_directory, String + + # @return [String] e.g "$(ACTION)" + # + attribute :build_arguments_string, String + + # @return [String] e.g "1" + # + attribute :pass_build_settings_in_environment, String + + # @return [String] e.g "/usr/bin/make" + # + attribute :build_tool_path, String + + # @return [PBXBuildRule] the build phases of the target. + # + # @note Apparently only PBXCopyFilesBuildPhase and + # PBXShellScriptBuildPhase can appear multiple times in a + # target. + # + has_many :build_phases, AbstractBuildPhase + end + + #-----------------------------------------------------------------------# + end + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/project/object/reference_proxy.rb b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/project/object/reference_proxy.rb new file mode 100644 index 0000000..08a369a --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/project/object/reference_proxy.rb @@ -0,0 +1,86 @@ +module Xcodeproj + class Project + module Object + # Apparently a proxy for a reference object which might belong another + # project contained in the same workspace of the project document. + # + # This class is used for referencing the products of another project. + # + class PBXReferenceProxy < AbstractObject + # @!group Attributes + + # @return [String] the name of the reference. + # + attribute :name, String + + # @return [String] the path of the referenced filed. + # + attribute :path, String + + # @return [String] the file type of the referenced filed. + # + attribute :file_type, String + + # @return [PBXContainerItemProxy] the proxy to the project that + # contains the object. + # + has_one :remote_ref, PBXContainerItemProxy + + # @return [String] the source tree for the path of the reference. + # + # @example + # "BUILT_PRODUCTS_DIR" + # + attribute :source_tree, String + + #---------------------------------------------------------------------# + + public + + # @!group Helpers + + # Checks whether the reference is a proxy. + # + # @return [Bool] always true for this ISA. + # + def proxy? + true + end + + #---------------------------------------------------------------------# + + def ascii_plist_annotation + " #{name || path && File.basename(path)} " + end + + # @return [String] A name suitable for displaying the object to the + # user. + # + def display_name + return name if name + return path if path + super + end + + # @return [Array<PBXBuildFile>] the build files associated with the + # current reference proxy. + # + def build_files + referrers.grep(PBXBuildFile) + end + + # In addition to removing the reference proxy, this will also remove any + # items related to this reference. + # + # @see AbstractObject#remove_from_project + # + # @return [void] + # + def remove_from_project + build_files.each(&:remove_from_project) + super + end + end + end + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/project/object/root_object.rb b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/project/object/root_object.rb new file mode 100644 index 0000000..b2d6d46 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/project/object/root_object.rb @@ -0,0 +1,108 @@ +module Xcodeproj + class Project + module Object + # This class represents the root object of a project document. + # + class PBXProject < AbstractObject + # @!group Attributes + + # @return [ObjectList<AbstractTarget>] a list of all the targets in + # the project. + # + has_many :targets, AbstractTarget + + # @return [Hash{String => String}] attributes the attributes of the + # target. + # + # @note The hash might contain the following keys: + # + # - `CLASSPREFIX` + # - `LastUpgradeCheck` + # - `ORGANIZATIONNAME` + # + attribute :attributes, Hash, + 'LastSwiftUpdateCheck' => Constants::LAST_SWIFT_UPGRADE_CHECK, + 'LastUpgradeCheck' => Constants::LAST_UPGRADE_CHECK + + # @return [XCConfigurationList] the configuration list of the project. + # + has_one :build_configuration_list, XCConfigurationList + + # @return [String] the compatibility version of the project. + # + attribute :compatibility_version, String, 'Xcode 3.2' + + # @return [String] the development region of the project. + # + attribute :development_region, String, 'en' + + # @return [String] whether the project has scanned for encodings. + # + attribute :has_scanned_for_encodings, String, '0' + + # @return [Array<String>] the list of known regions. + # + attribute :known_regions, Array, %w(en Base) + + # @return [PBXGroup] the main group of the project. The one displayed + # by Xcode in the Project Navigator. + # + has_one :main_group, PBXGroup + + # @return [String] whether minimizes project reference proxies + # + attribute :minimized_project_reference_proxies, String, '0' + + # @return [String] preferred project object version + # + attribute :preferred_project_object_version, String, Constants::LAST_KNOWN_OBJECT_VERSION.to_s + + # @return [PBXGroup] the group containing the references to products of + # the project. + # + has_one :product_ref_group, PBXGroup + + # @return [String] the directory of the project. + # + attribute :project_dir_path, String, '' + + # @return [String] the root of the project. + # + attribute :project_root, String, '' + + # @return [Array<XCRemoteSwiftPackageReference, XCLocalSwiftPackageReference>] the list of Swift package references. + # + has_many :package_references, [XCRemoteSwiftPackageReference, XCLocalSwiftPackageReference] + + # @return [Array<ObjectDictionary>] any reference to other projects. + # + has_many_references_by_keys :project_references, + :project_ref => PBXFileReference, + :product_group => PBXGroup + + def name + project.path.basename('.xcodeproj').to_s + end + + def ascii_plist_annotation + ' Project object ' + end + + def to_hash_as(method = :to_hash) + hash_as = super + if !hash_as['packageReferences'].nil? && hash_as['packageReferences'].empty? + hash_as.delete('packageReferences') if !hash_as['packageReferences'].nil? && hash_as['packageReferences'].empty? + end + hash_as + end + + def to_ascii_plist + plist = super + plist.value.delete('projectReferences') if plist.value['projectReferences'].empty? + plist.value.delete('packageReferences') if !plist.value['packageReferences'].nil? && plist.value['packageReferences'].empty? + plist + end + end + end + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/project/object/swift_package_local_reference.rb b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/project/object/swift_package_local_reference.rb new file mode 100644 index 0000000..aa5ae7f --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/project/object/swift_package_local_reference.rb @@ -0,0 +1,34 @@ +module Xcodeproj + class Project + module Object + # This class represents a local Swift package reference. + # + class XCLocalSwiftPackageReference < AbstractObject + # @!group Attributes + + # @return [String] the repository url this Swift package was installed from. + # + attribute :path, String + + # @return [String] the repository path where the package is located relative + # to the Xcode project. + # + attribute :relative_path, String + + # @!group AbstractObject Hooks + #--------------------------------------# + + def ascii_plist_annotation + " #{isa} \"#{File.basename(display_name)}\" " + end + + # @return [String] the path of the local Swift package reference. + # + def display_name + return relative_path if relative_path + super + end + end + end + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/project/object/swift_package_product_dependency.rb b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/project/object/swift_package_product_dependency.rb new file mode 100644 index 0000000..471227b --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/project/object/swift_package_product_dependency.rb @@ -0,0 +1,29 @@ +module Xcodeproj + class Project + module Object + # This class represents a Swift package product dependency. + # + class XCSwiftPackageProductDependency < AbstractObject + # @!group Attributes + + # @return [XCRemoteSwiftPackageReference, XCLocalSwiftPackageReference] the Swift package reference. + # + has_one :package, [XCRemoteSwiftPackageReference, XCLocalSwiftPackageReference] + + # @return [String] the product name of this Swift package. + # + attribute :product_name, String + + # @!group AbstractObject Hooks + #--------------------------------------# + + # @return [String] the name of the Swift package product dependency. + # + def display_name + return product_name if product_name + super + end + end + end + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/project/object/swift_package_remote_reference.rb b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/project/object/swift_package_remote_reference.rb new file mode 100644 index 0000000..5abdaab --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/project/object/swift_package_remote_reference.rb @@ -0,0 +1,33 @@ +module Xcodeproj + class Project + module Object + # This class represents a remote Swift package reference. + # + class XCRemoteSwiftPackageReference < AbstractObject + # @!group Attributes + + # @return [String] the repository url this Swift package was installed from. + # + attribute :repositoryURL, String + + # @return [Hash] the version requirements for this Swift package. + # + attribute :requirement, Hash + + # @!group AbstractObject Hooks + #--------------------------------------# + + def ascii_plist_annotation + " #{isa} \"#{File.basename(display_name, '.git')}\" " + end + + # @return [String] the name of the remote Swift package reference. + # + def display_name + return repositoryURL if repositoryURL + super + end + end + end + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/project/object/target_dependency.rb b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/project/object/target_dependency.rb new file mode 100644 index 0000000..54b09fc --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/project/object/target_dependency.rb @@ -0,0 +1,97 @@ +module Xcodeproj + class Project + module Object + # Represents a dependency of a target on another one. + # + class PBXTargetDependency < AbstractObject + # @!group Attributes + + # @return [PBXNativeTarget] the target that needs to be built to + # satisfy the dependency. + # + has_one :target, AbstractTarget + + # @return [PBXContainerItemProxy] a proxy for the target that needs to + # be built. + # + # @note Apparently to support targets in other projects of the same + # workspace. + # + has_one :target_proxy, PBXContainerItemProxy + + # @return [String] the name of the target. + # + # @note This seems only to be used when the target dependency is a + # target from a nested Xcode project. + # + attribute :name, String + + # @return [String] the platform filter for this target dependency. + # + attribute :platform_filter, String + + # @return [Array<String>] the platform filters for this target dependency. + # + attribute :platform_filters, Array + + # @return [XCSwiftPackageProductDependency] the Swift Package product + # for this target dependency. + # + has_one :product_ref, XCSwiftPackageProductDependency + + public + + # @!group AbstractObject Hooks + #--------------------------------------# + + # @return [String] The name of the dependency. + # + def display_name + return name if name + return target.name if target + return target_proxy.remote_info if target_proxy + return product_ref.product_name if product_ref + end + + def ascii_plist_annotation + " #{isa} " + end + + # @return [String] the uuid of the target if the dependency is a native + # target, the uuid of the target in the sub-project if the + # dependency is a target proxy, nil if the dependency is a Swift + # Package. + # + def native_target_uuid + return target.uuid if target + return target_proxy.remote_global_id_string if target_proxy + return nil if product_ref + raise "Expected target or target_proxy, from which to fetch a uuid for target '#{display_name}'." \ + "Find and clear the PBXTargetDependency entry with uuid '#{@uuid}' in your .xcodeproj." + end + + # @note This override is necessary because Xcode allows for circular + # target dependencies. + # + # @return [Hash<String => String>] Returns a cascade representation of + # the object without UUIDs. + # + def to_tree_hash + hash = {} + hash['displayName'] = display_name + hash['isa'] = isa + hash['targetProxy'] = target_proxy.to_tree_hash if target_proxy + hash + end + + # @note This is a no-op, because the targets could theoretically depend + # on each other, leading to a stack level too deep error. + # + # @see AbstractObject#sort_recursively + # + def sort_recursively(_options = nil) + end + end + end + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/project/object_attributes.rb b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/project/object_attributes.rb new file mode 100644 index 0000000..4276721 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/project/object_attributes.rb @@ -0,0 +1,522 @@ +module Xcodeproj + class Project + module Object + # This class represents an attribute of {AbstractObject} subclasses. + # Attributes are created by the {AbstractObject} DSL methods and allow to + # mirror the underlying attributes of the xcodeproj document model. + # + # Attributes provide support for runtime type checking. They also allow + # {AbstractObject} initialization and serialization to plist. + # + # @todo Add support for a list of required values so objects can be + # validated before serialization ? + # + class AbstractObjectAttribute + # @return [Symbol] the type of the attribute. It can be `:simple`, + # `:to_one`, `:to_many`. + # + attr_reader :type + + # @return [Symbol] the name of the attribute. + # + attr_reader :name + + # @return [Class] the class that owns the attribute. + # + attr_accessor :owner + + # Creates a new attribute with the given type and name. + # + # Attributes are expected to be instantiated only by the + # {AbstractObject} DSL methods. + # + # @param [Symbol] type + # the type of the attribute. + # + # @param [Symbol] name + # the name of the attribute. + # + # @param [Class] owner + # the class that owns the attribute. + # + def initialize(type, name, owner) + @type = type + @name = name + @owner = owner + end + + # @return [String] The name of the attribute in camel case. + # + # @example + # attribute.new(:simple, :project_root) + # attribute.plist_name #=> projectRoot + # + def plist_name + @plist_name ||= CaseConverter.convert_to_plist(name, :lower) + end + + # @return [Array<Class>] the list of the classes accepted by the + # attribute. + # + attr_accessor :classes + + # @return [{Symbol, Array<Class>}] the list of the classes accepted by + # each key for attributes which store a dictionary. + # + attr_accessor :classes_by_key + + # @return [String, Array, Hash] the default value, if any, for simple + # attributes. + # + attr_accessor :default_value + + # Convenience method that returns the value of this attribute for a + # given object. + # + # @param [AbstractObject] object + # the object for which the value of this attribute is requested. + # + # @return [String, Array, Hash, AbstractObject, ObjectList] + # the value. + # + def get_value(object) + object.send(name) + end + + # Convenience method that sets the value of this attribute for a + # given object. It makes sense only for `:simple` or `:to_one` + # attributes. + # + # @raise It the type of this attribute is `:to_many`. + # + # @param [AbstractObject] object + # the object for which to set the value. + # + # @param [String, Hash, Array, AbstractObject] new_value + # the value to set for the attribute. + # + # @return [void] + # + def set_value(object, new_value) + if type == :to_many + raise '[Xcodeproj] Set value called for a to-many attribute' + end + object.send("#{name}=", new_value) + end + + # Convenience method that sets the value of this attribute for a given + # object to the default (if any). It makes sense only for `:simple` + # attributes. + # + # @param [AbstractObject] object + # the object for which to set the default value. + # + # @note It is extremely important to duplicate the default values + # otherwise kittens cry! + # + # @return [void] + # + def set_default(object) + unless type == :simple + raise "[Xcodeproj] Set value called for a #{type} attribute" + end + set_value(object, default_value.dup) if default_value + end + + # Checks that a given value is compatible with the attribute. + # + # This method powers the runtime type checking of the {AbstractObject} + # and is used its by synthesised methods. + # + # @raise If the class of the value is not compatible with the attribute. + # + # @return [void] + # + def validate_value(object) + return unless object + acceptable = classes.find { |klass| object.class == klass || object.class < klass } + if type == :simple + raise "[Xcodeproj] Type checking error: got `#{object.class}` " \ + "for attribute: #{inspect}" unless acceptable + else + raise "[Xcodeproj] Type checking error: got `#{object.isa}` for " \ + "attribute: #{inspect} - #{object.uuid} #{object.to_ascii_plist}" unless acceptable + end + end + + # Checks that a given value is compatible with a key for attributes + # which store references by key. + # + # This method is used by the #{ObjectDictionary} class. + # + # @raise If the class of the value is not compatible with the given + # key. + # + def validate_value_for_key(object, key) + unless type == :references_by_keys + raise '[Xcodeproj] This method should be called only for ' \ + 'attributes of type `references_by_keys`' + end + + unless classes_by_key.keys.include?(key) + raise "[Xcodeproj] unsupported key `#{key}` " \ + "(accepted `#{classes_by_key.keys}`) for attribute `#{inspect}`" + end + + return unless object + classes = Array(classes_by_key[key]) + acceptable = classes.find { |klass| object.class == klass || object.class < klass } + unless acceptable + raise "[Xcodeproj] Type checking error: got `#{object.isa}` " \ + "for key `#{key}` (which accepts `#{classes}`) of " \ + "attribute: `#{inspect}`" + end + end + + # @return [String] A string suitable for debugging the object. + # + def inspect + if type == :simple + "Attribute `#{plist_name}` (type: `#{type}`, classes: " \ + "`#{classes}`, owner class: `#{owner.isa}`)" + else + "Attribute `#{plist_name}` (type: `#{type}`, classes: " \ + "`#{classes.map(&:isa)}`, owner class: `#{owner.isa}`)" + end + end + end + + class AbstractObject + # The {AbstractObject} DSL methods allow to specify with fidelity the + # underlying model of the xcodeproj document format. {AbstractObject} + # subclasses should specify their attributes through the following + # methods: + # + # - `{AbstractObject.attribute}` + # - `{AbstractObject.has_one}` + # - `{AbstractObject.has_many}` + # + # @note The subclasses should not interfere with the methods + # synthesised by the DSL and should only implement helpers in top + # of them. + # + # @note Attributes are typed and are validated at runtime. + # + class << self + # @return [Array<AbstractObjectAttribute>] the attributes associated + # with the class. + # + # @note It includes the attributes defined in the superclass and the + # list is cleaned for duplicates. Subclasses should not duplicate + # an attribute of the superclass but for the method implementation + # they will duplicate them. + # + # @visibility private + # + def attributes + unless @full_attributes + attributes = @attributes || [] + if superclass.respond_to?(:attributes) + super_attributes = superclass.attributes + else + super_attributes = [] + end + # The uniqueness of the attributes is very important because the + # initialization from plist deletes the values from the + # dictionary. + @full_attributes = attributes.concat(super_attributes).uniq + end + @full_attributes + end + + # @return [Array<AbstractObjectAttribute>] the simple attributes + # associated with with the class. + # + # @visibility private + # + def simple_attributes + @simple_attributes ||= attributes.select { |a| a.type == :simple } + end + + # @return [Array<AbstractObjectAttribute>] the attributes + # representing a to one relationship associated with with the + # class. + # + # @visibility private + # + def to_one_attributes + @to_one_attributes ||= attributes.select { |a| a.type == :to_one } + end + + # @return [Array<AbstractObjectAttribute>] the attributes + # representing a to many relationship associated with with the + # class. + # + # @visibility private + # + def to_many_attributes + @to_many_attributes ||= attributes.select { |a| a.type == :to_many } + end + + # @visibility private + # + def references_by_keys_attributes + @references_by_keys_attributes ||= attributes.select { |a| a.type == :references_by_keys } + end + + private + + # Defines a new simple attribute and synthesises the corresponding + # methods. + # + # @note Simple attributes are directly stored in a hash. They can + # contain only a string, array of strings or a hash containing + # strings and thus they are not affected by reference counting. + # Clients can access the hash directly through the + # {AbstractObject#simple_attributes_hash} method. + # + # @param [Symbol] name + # the name of the attribute. + # + # @param [Class] klass + # the accepted {Class} for the values of the attribute. + # + # @param [String, Array<String>, Hash{String=>String}] default_value + # the default value for new objects. + # + # @example + # attribute :project_root + # #=> leads to the creation of the following methods + # + # def project_root + # @simple_attributes_hash[projectRoot] + # end + # + # def project_root=(value) + # attribute.validate_value(value) + # @simple_attributes_hash[projectRoot] = value + # end + # + # @macro [attach] attribute + # @!attribute [rw] $1 + # + def attribute(name, klass, default_value = nil) + attrb = AbstractObjectAttribute.new(:simple, name, self) + attrb.classes = [klass] + attrb.default_value = default_value + add_attribute(attrb) + + define_method(attrb.name) do + @simple_attributes_hash ||= {} + @simple_attributes_hash[attrb.plist_name] + end + + define_method("#{attrb.name}=") do |value| + @simple_attributes_hash ||= {} + attrb.validate_value(value) + + existing = @simple_attributes_hash[attrb.plist_name] + if existing.is_a?(Hash) && value.is_a?(Hash) + return value if existing.keys == value.keys && existing == value + elsif existing == value + return value + end + mark_project_as_dirty! + @simple_attributes_hash[attrb.plist_name] = value + end + end + + # rubocop:disable Style/PredicateName + + # Defines a new relationship to a single and synthesises the + # corresponding methods. + # + # @note The synthesised setter takes care of handling reference + # counting directly. + # + # @param [String] singular_name + # the name of the relationship. + # + # @param [Class, Array<Class>] isas + # the list of the classes corresponding to the accepted isas for + # this relationship. + # + # @macro [attach] has_one + # @!attribute [rw] $1 + # + def has_one(singular_name, isas) + isas = [isas] unless isas.is_a?(Array) + attrb = AbstractObjectAttribute.new(:to_one, singular_name, self) + attrb.classes = isas + add_attribute(attrb) + + attr_reader(attrb.name) + # 1.9.2 fix, see https://github.com/CocoaPods/Xcodeproj/issues/40. + public(attrb.name) + + variable_name = :"@#{attrb.name}" + define_method("#{attrb.name}=") do |value| + attrb.validate_value(value) + + previous_value = send(attrb.name) + return value if previous_value == value + mark_project_as_dirty! + previous_value.remove_referrer(self) if previous_value + instance_variable_set(variable_name, value) + value.add_referrer(self) if value + end + end + + # Defines a new ordered relationship to many. + # + # @note This attribute only generates the reader method. Clients are + # not supposed to create {ObjectList} objects which are created + # by the methods synthesised by this attribute on demand. + # Clients, however can mutate the list according to its + # interface. The list is responsible to manage the reference + # counting for its values. + # + # @param [String] plural_name + # the name of the relationship. + # + # @param [Class, Array<Class>] isas + # the list of the classes corresponding to the accepted isas for + # this relationship. + # + # @macro [attach] has_many + # @!attribute [r] $1 + # + def has_many(plural_name, isas) + isas = [isas] unless isas.is_a?(Array) + + attrb = AbstractObjectAttribute.new(:to_many, plural_name, self) + attrb.classes = isas + add_attribute(attrb) + + variable_name = :"@#{attrb.name}" + define_method(attrb.name) do + # Here we are in the context of the instance + list = instance_variable_get(variable_name) + unless list + list = ObjectList.new(attrb, self) + instance_variable_set(variable_name, list) + end + list + end + end + + # Defines a new ordered relationship to many. + # + # @note This attribute only generates the reader method. Clients are + # not supposed to create {ObjectList} objects which are created + # by the methods synthesised by this attribute on demand. + # Clients, however can mutate the list according to its + # interface. The list is responsible to manage the reference + # counting for its values. + # + # @param [String] plural_name + # the name of the relationship. + # + # @param [{Symbol, Array<Class>}] classes_by_key + # the list of the classes corresponding to the accepted isas for + # this relationship. + # + # @macro [attach] has_many + # @!attribute [r] $1 + # + def has_many_references_by_keys(plural_name, classes_by_key) + attrb = AbstractObjectAttribute.new(:references_by_keys, plural_name, self) + attrb.classes = classes_by_key.values + attrb.classes_by_key = classes_by_key + add_attribute(attrb) + + variable_name = :"@#{attrb.name}" + define_method(attrb.name) do + # Here we are in the context of the instance + list = instance_variable_get(variable_name) + unless list + list = ObjectList.new(attrb, self) + instance_variable_set(variable_name, list) + end + list + end + end + + # rubocop:enable Style/PredicateName + + protected + + # Adds an attribute to the list of attributes of the class. + # + # @note This method is intended to be invoked only by the + # {AbstractObject} meta programming methods + # + # @return [void] + # + def add_attribute(attribute) + unless attribute.classes + raise "[Xcodeproj] BUG - missing classes for #{attribute.inspect}" + end + + unless attribute.classes.all? { |klass| klass.is_a?(Class) } + raise "[Xcodeproj] BUG - classes:#{attribute.classes} for #{attribute.inspect}" + end + + @attributes ||= [] + @attributes << attribute + end + end # AbstractObject << self + + private + + # @return [Hash] the simple attributes hash. + # + attr_reader :simple_attributes_hash + + public + + # @!group xcodeproj format attributes + + # @return (see AbstractObject.attributes) + # + # @visibility private + # + def attributes + self.class.attributes + end + + # @return (see AbstractObject.simple_attributes) + # + # @visibility private + # + def simple_attributes + self.class.simple_attributes + end + + # @return (see AbstractObject.to_one_attributes) + # + # @visibility private + # + def to_one_attributes + self.class.to_one_attributes + end + + # @return (see AbstractObject.to_many_attributes) + # + # @visibility private + # + def to_many_attributes + self.class.to_many_attributes + end + + # @return (see AbstractObject.to_many_attributes) + # + # @visibility private + # + def references_by_keys_attributes + self.class.references_by_keys_attributes + end + end + end + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/project/object_dictionary.rb b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/project/object_dictionary.rb new file mode 100644 index 0000000..f664057 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/project/object_dictionary.rb @@ -0,0 +1,210 @@ +module Xcodeproj + class Project + # This class represents relationships to other objects stored in a + # Dictionary. + # + # It works in conjunction with the {AbstractObject} class to ensure that + # the project is not serialized with unreachable objects by updating the + # with reference count on modifications. + # + # @note To provide full support as the other classes the dictionary should: + # + # Give the following attribute: + # + # has_many_references_by_keys :project_references, { + # :project_ref => PBXFileReference, + # :product_group => PBXGroup + # } + # + # This should be possible: + # + # #=> Note the API: + # root_object.project_references.project_ref = file + # + # #=> This should raise: + # root_object.project_references.product_group = file + # + # I.e. generate setters and getters from the specification hash. + # + # Also the interface is a dirty hybrid between the + # {AbstractObjectAttribute} and the {ObjectList}. + # + # @note Concerning the mutations methods it is safe to call only those + # which are overridden to inform objects reference count. Ideally all + # the hash methods should be covered, but this is not done yet. + # Moreover it is a moving target because the methods of array + # usually are implemented in C. + # + # @todo This class should use a {Hash} as a backing store instead of + # inheriting from it. This would prevent the usage of methods which + # don't notify the objects. + # + class ObjectDictionary < Hash + # @param [Object::AbstractObjectAttribute] attribute @see #attribute + # @param [Object] owner @see #owner + # + def initialize(attribute, owner) + @attribute = attribute + @owner = owner + end + + # @return [Object::AbstractObjectAttribute] The attribute that generated + # the list. + # + attr_reader :attribute + + # @return [Object] The object that owns the list. + # + attr_reader :owner + + # @return [Array<Symbol>] The list of the allowed keys. + # + def allowed_keys + attribute.classes_by_key.keys + end + + # @return [String] A string suitable for debugging. + # + def inspect + "<ObjectDictionary attribute:`#{@attribute.name}` " \ + "owner:`#{@owner.display_name}` values:#{super.inspect}>" + end + + # @!group Notification enabled methods + #------------------------------------------------------------------------# + + # Associates an object to the given key and updates its references count. + # + # @param [String] key + # The key. + # + # @param [AbstractObject] object + # The object to add to the dictionary. + # + # @return [AbstractObject] The given object. + # + def []=(key, object) + key = normalize_key(key) + if object + perform_additions_operations(object, key) + else + perform_deletion_operations(self[key]) + end + super(key, object) + end + + # Removes the given key from the dictionary and informs the object that + # is not longer referenced by the owner. + # + # @param [String] key + # The key. + # + def delete(key) + key = normalize_key(key) + object = self[key] + perform_deletion_operations(object) + super + end + + # @!group AbstractObject Methods + #-----------------------------------------------------------------------# + + # @return [Hash<String => String>] The plist representation of the + # dictionary where the objects are replaced by their UUIDs. + # + def to_hash + result = {} + each do |key, obj| + if obj + plist_key = Object::CaseConverter.convert_to_plist(key, nil) + result[plist_key] = Nanaimo::String.new(obj.uuid, obj.ascii_plist_annotation) + end + end + result + end + + def to_ascii_plist + to_hash + end + + # @return [Hash<String => String>] Returns a cascade representation of + # the object without UUIDs. + # + def to_tree_hash + result = {} + each do |key, obj| + if obj + plist_key = Object::CaseConverter.convert_to_plist(key, nil) + result[plist_key] = obj.to_tree_hash + end + end + result + end + + # Removes all the references to a given object. + # + def remove_reference(object) + each { |key, obj| self[key] = nil if obj == object } + end + + # Informs the objects contained in the dictionary that another object is + # referencing them. + # + def add_referrer(referrer) + values.each { |obj| obj.add_referrer(referrer) } + end + + # Informs the objects contained in the dictionary that another object + # stopped referencing them. + # + def remove_referrer(referrer) + values.each { |obj| obj.remove_referrer(referrer) } + end + + private + + # @!group Private helpers + #------------------------------------------------------------------------# + + # @return [Symbol] Normalizes a key to a symbol converting the camel case + # format with underscores. + # + # @param [String, Symbol] key + # The key to normalize. + # + def normalize_key(key) + if key.is_a?(String) + key = Object::CaseConverter.convert_to_ruby(key) + end + + unless allowed_keys.include?(key) + raise "[Xcodeproj] Unsupported key `#{key}` (allowed " \ + "`#{allowed_keys}`) for `#{inspect}`" + end + key + end + + # Informs an object that it was added to the dictionary. In practice it + # adds the owner of the list as referrer to the objects. It also + # validates the value. + # + # @return [void] + # + def perform_additions_operations(object, key) + owner.mark_project_as_dirty! + object.add_referrer(owner) + attribute.validate_value_for_key(object, key) + end + + # Informs an object that it was removed from to the dictionary, so it can + # remove it from its referrers and take the appropriate actions. + # + # @return [void] + # + def perform_deletion_operations(objects) + owner.mark_project_as_dirty! + objects.remove_referrer(owner) + end + end + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/project/object_list.rb b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/project/object_list.rb new file mode 100644 index 0000000..e1df1b8 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/project/object_list.rb @@ -0,0 +1,223 @@ +module Xcodeproj + class Project + # This class represents an ordered relationship to many objects. + # + # It works in conjunction with the {AbstractObject} class to ensure that + # the project is not serialized with unreachable objects by updating the + # with reference count on modifications. + # + # @note Concerning the mutations methods it is safe to call only those + # which are overridden to inform objects reference count. Ideally all + # the array methods should be covered, but this is not done yet. + # Moreover it is a moving target because the methods of array + # usually are implemented in C + # + # @todo Cover all the mutations methods of the {Array} class. + # + class ObjectList < Array + # {Xcodeproj} clients are not expected to create instances of + # {ObjectList}, it is always initialized empty and automatically by the + # synthesized methods generated by {AbstractObject.has_many}. + # + def initialize(attribute, owner) + @attribute = attribute + @owner = owner + end + + # @return [Array<Class>] the attribute that generated the list. + # + attr_reader :attribute + + # @return [Array<Class>] the object that owns the list. + # + attr_reader :owner + + # @return [Array<String>] + # the UUIDs of all the objects referenced by this list. + # + def uuids + map(&:uuid) + end + + # @return [Array<AbstractObject>] + # a new array generated with the objects contained in the list. + # + def objects + to_a + end + + public + + # @!group Notification enabled methods + #------------------------------------------------------------------------# + + # TODO: the overridden methods are incomplete. + + # Adds an array of objects to list and updates their references count. + # + # @param [Array<AbstractObject, ObjectDictionary>] objects + # an array of objects to add to the list. + # + # @return [void] + # + def +(other) + perform_additions_operations(other) + super + end + + # Appends an object to list the and updates its references count. + # + # @param [AbstractObject, ObjectDictionary] object + # The object to add to the list. + # + # @return [void] + # + def <<(object) + perform_additions_operations(object) + super + end + + # Adds an object to the given index of the list the and updates its + # references count. + # + # @param [AbstractObject, ObjectDictionary] object + # The object to add to the list. + # + # @return [void] + # + def insert(index, object) + perform_additions_operations(object) + super + end + + # Prepends an object to the list and updates its references count. + # + # @param [AbstractObject, ObjectDictionary] object + # The object to add to the list. + # + # @return [void] + # + def unshift(object) + perform_additions_operations(object) + super + end + + # Removes an object to list and updates its references count. + # + # @param [AbstractObject, ObjectDictionary] object + # the object to delete from the list. + # + # @return [AbstractObject, ObjectDictionary, Nil] the object if found. + # + def delete(object) + perform_deletion_operations(object) + super + end + + # Removes the object at the given index from the list and updates its + # references count. + # + # @param [Fixnum] from + # The index of the object. + # + # @return [AbstractObject, ObjectDictionary, Nil] the object if found. + # + def delete_at(index) + object = at(index) + perform_deletion_operations(object) + super + end + + # Removes all the objects contained in the list and updates their + # reference counts. + # + # @return [void] + # + def clear + objects.each do |object| + perform_deletion_operations(object) + end + super + end + + # Moves the given object to the given index. + # + # @param [AbstractObject, ObjectDictionary] object + # The object to move. + # + # @param [Fixnum] to + # The new index for the object. + # + # @return [void] + # + def move(object, new_index) + return if index(object) == new_index + if obj = delete(object) + insert(new_index, obj) + else + raise "Attempt to move object `#{object}` not present in the list `#{inspect}`" + end + end + + # Moves the object at the given index to the given position. + # + # @param [Fixnum] from + # The current index of the object. + # + # @param [Fixnum] to + # The new index for the object. + # + # @return [void] + # + def move_from(current_index, new_index) + return if current_index == new_index + if obj = delete_at(current_index) + insert(new_index, obj) + else + raise "Attempt to move object from index `#{current_index}` which is beyond bounds of the list `#{inspect}`" + end + end + + def sort! + return super if owner.project.dirty? + previous = to_a + super + owner.mark_project_as_dirty! unless previous == to_a + self + end + + private + + # @!group Notification Methods + #------------------------------------------------------------------------# + + # Informs an object that it was added to the list. In practice it adds + # the owner of the list as referrer to the objects. It also validates the + # value. + # + # @return [void] + # + def perform_additions_operations(objects) + objects = [objects] unless objects.is_a?(Array) + objects.each do |obj| + owner.mark_project_as_dirty! + obj.add_referrer(owner) + attribute.validate_value(obj) unless obj.is_a?(ObjectDictionary) + end + end + + # Informs an object that it was removed from to the list, so it can + # remove its owner from its referrers and take the appropriate actions. + # + # @return [void] + # + def perform_deletion_operations(objects) + objects = [objects] unless objects.is_a?(Array) + objects.each do |obj| + owner.mark_project_as_dirty! + obj.remove_referrer(owner) unless obj.is_a?(ObjectDictionary) + end + end + end + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/project/project_helper.rb b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/project/project_helper.rb new file mode 100644 index 0000000..8a28417 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/project/project_helper.rb @@ -0,0 +1,343 @@ +module Xcodeproj + class Project + module ProjectHelper + include Object + + # @!group Targets + + #-----------------------------------------------------------------------# + + # Creates a new target and adds it to the project. + # + # The target is configured for the given platform and its file reference it + # is added to the {products_group}. + # + # The target is pre-populated with common build settings, and the + # appropriate Framework according to the platform is added to to its + # Frameworks phase. + # + # @param [Project] project + # the project to which the target should be added. + # + # @param [Symbol] type + # the type of target. Can be `:application`, `:dynamic_library`, + # `framework` or `:static_library`. + # + # @param [String] name + # the name of the target product. + # + # @param [Symbol] platform + # the platform of the target. Can be `:ios` or `:osx`. + # + # @param [String] deployment_target + # the deployment target for the platform. + # + # @param [PBXGroup] product_group + # the product group, where to add to a file reference of the + # created target. + # + # @param [Symbol] language + # the primary language of the target, can be `:objc` or `:swift`. + # + # @return [PBXNativeTarget] the target. + # + def self.new_target(project, type, name, platform, deployment_target, product_group, language, product_basename) + # Target + target = project.new(PBXNativeTarget) + project.targets << target + target.name = name + target.product_name = product_basename + target.product_type = Constants::PRODUCT_TYPE_UTI[type] + target.build_configuration_list = configuration_list(project, platform, deployment_target, type, language) + + # Product + product = product_group.new_product_ref_for_target(target.product_name, type) + target.product_reference = product + + # Build phases + build_phases_for_target_type(type).each { |phase| target.build_phases << project.new(phase) } + + # Frameworks + unless type == :static_library + framework_name = (platform == :osx) ? 'Cocoa' : 'Foundation' + target.add_system_framework(framework_name) + end + + target + end + + # Creates a new resource bundles target and adds it to the project. + # + # The target is configured for the given platform and its file reference it + # is added to the {products_group}. + # + # The target is pre-populated with common build settings + # + # @param [Project] project + # the project to which the target should be added. + # + # @param [String] name + # the name of the resources bundle. + # + # @param [Symbol] platform + # the platform of the resources bundle. Can be `:ios` or `:osx`. + # + # @param [PBXGroup] product_group + # the product group, where to add to a file reference of the + # created target. + # + # @return [PBXNativeTarget] the target. + # + def self.new_resources_bundle(project, name, platform, product_group, product_basename) + # Target + target = project.new(PBXNativeTarget) + project.targets << target + target.name = name + target.product_name = product_basename + target.product_type = Constants::PRODUCT_TYPE_UTI[:bundle] + + # Configuration List + cl = project.new(XCConfigurationList) + cl.default_configuration_is_visible = '0' + cl.default_configuration_name = 'Release' + release_conf = project.new(XCBuildConfiguration) + release_conf.name = 'Release' + release_conf.build_settings = common_build_settings(nil, platform, nil, target.product_type) + debug_conf = project.new(XCBuildConfiguration) + debug_conf.name = 'Debug' + debug_conf.build_settings = common_build_settings(nil, platform, nil, target.product_type) + cl.build_configurations << release_conf + cl.build_configurations << debug_conf + target.build_configuration_list = cl + + # Product + product = product_group.new_bundle(target.product_name) + target.product_reference = product + + # Build phases + build_phases_for_target_type(:bundle).each { |phase| target.build_phases << project.new(phase) } + + target + end + + # Creates a new aggregate target and adds it to the project. + # + # The target is configured for the given platform. + # + # @param [Project] project + # the project to which the target should be added. + # + # @param [String] name + # the name of the aggregate target. + # + # @param [Symbol] platform + # the platform of the aggregate target. Can be `:ios` or `:osx`. + # + # @param [String] deployment_target + # the deployment target for the platform. + # + # @return [PBXAggregateTarget] the target. + # + def self.new_aggregate_target(project, name, platform, deployment_target) + target = project.new(PBXAggregateTarget) + project.targets << target + target.name = name + target.build_configuration_list = configuration_list(project, platform, deployment_target) + target + end + + # Creates a new legacy target and adds it to the project. + # + # The target is configured for the given platform. + # + # @param [Project] project + # the project to which the target should be added. + # + # @param [String] name + # the name of the aggregate target. + # + # @param [String] build_tool_path + # the build tool path to use for this target. + # + # @param [String] build_arguments_string + # the build arguments string to use for this target. + # + # @param [String] build_working_directory + # the build working directory to use for this target. + # + # @param [String] pass_build_settings_in_environment + # whether to pass build settings in the environment during execution of this target. + # + # @return [PBXLegacyTarget] the target. + # + def self.new_legacy_target(project, name, build_tool_path = '/usr/bin/make', build_arguments_string = '$(ACTION)', + build_working_directory = nil, pass_build_settings_in_environment = '1') + target = project.new(PBXLegacyTarget) + project.targets << target + target.name = name + target.build_configuration_list = configuration_list(project) + target.build_tool_path = build_tool_path + target.build_arguments_string = build_arguments_string + target.build_working_directory = build_working_directory + target.pass_build_settings_in_environment = pass_build_settings_in_environment + target + end + + # @!group Private Helpers + + #-----------------------------------------------------------------------# + + # Returns a new configuration list, populated with release and debug + # configurations with common build settings for the given platform. + # + # @param [Project] project + # the project to which the configuration list should be added. + # + # @param [Symbol] platform + # the platform for the configuration list, can be `:ios` or `:osx`. + # + # @param [String] deployment_target + # the deployment target for the platform. + # + # @param [Symbol] target_product_type + # the product type of the target, can be any of `Constants::PRODUCT_TYPE_UTI.values` + # or `Constants::PRODUCT_TYPE_UTI.keys`. + # + # @param [Symbol] language + # the primary language of the target, can be `:objc` or `:swift`. + # + # @return [XCConfigurationList] the generated configuration list. + # + def self.configuration_list(project, platform = nil, deployment_target = nil, target_product_type = nil, language = nil) + cl = project.new(XCConfigurationList) + cl.default_configuration_is_visible = '0' + cl.default_configuration_name = 'Release' + + release_conf = project.new(XCBuildConfiguration) + release_conf.name = 'Release' + release_conf.build_settings = common_build_settings(:release, platform, deployment_target, target_product_type, language) + + debug_conf = project.new(XCBuildConfiguration) + debug_conf.name = 'Debug' + debug_conf.build_settings = common_build_settings(:debug, platform, deployment_target, target_product_type, language) + + cl.build_configurations << release_conf + cl.build_configurations << debug_conf + + existing_configurations = cl.build_configurations.map(&:name) + project.build_configurations.each do |configuration| + next if existing_configurations.include?(configuration.name) + + new_config = project.new(XCBuildConfiguration) + new_config.name = configuration.name + new_config.build_settings = common_build_settings(configuration.type, platform, deployment_target, target_product_type, language) + cl.build_configurations << new_config + end + + cl + end + + # Returns the common build settings for a given platform and configuration + # name. + # + # @param [Symbol] type + # the type of the build configuration, can be `:release` or + # `:debug`. + # + # @param [Symbol] platform + # the platform for the build settings, can be `:ios` or `:osx`. + # + # @param [String] deployment_target + # the deployment target for the platform. + # + # @param [Symbol] target_product_type + # the product type of the target, can be any of + # `Constants::PRODUCT_TYPE_UTI.values` + # or `Constants::PRODUCT_TYPE_UTI.keys`. Default is :application. + # + # @param [Symbol] language + # the primary language of the target, can be `:objc` or `:swift`. + # + # @return [Hash] The common build settings + # + def self.common_build_settings(type, platform = nil, deployment_target = nil, target_product_type = nil, language = :objc) + target_product_type = (Constants::PRODUCT_TYPE_UTI.find { |_, v| v == target_product_type } || [target_product_type || :application])[0] + common_settings = Constants::COMMON_BUILD_SETTINGS + + # Use intersecting settings for all key sets as base + settings = deep_dup(common_settings[:all]) + + # Match further common settings by key sets + keys = [type, platform, target_product_type, language].compact + key_combinations = (1..keys.length).flat_map { |n| keys.combination(n).to_a } + key_combinations.each do |key_combination| + settings.merge!(deep_dup(common_settings[key_combination] || {})) + end + + if deployment_target + case platform + when :ios + settings['IPHONEOS_DEPLOYMENT_TARGET'] = deployment_target + settings['CLANG_ENABLE_OBJC_WEAK'] = 'NO' if deployment_target < '5' + when :osx + settings['MACOSX_DEPLOYMENT_TARGET'] = deployment_target + settings['CLANG_ENABLE_OBJC_WEAK'] = 'NO' if deployment_target < '10.7' + when :tvos + settings['TVOS_DEPLOYMENT_TARGET'] = deployment_target + when :visionos + settings['XROS_DEPLOYMENT_TARGET'] = deployment_target + when :watchos + settings['WATCHOS_DEPLOYMENT_TARGET'] = deployment_target + end + end + + settings + end + + # Creates a deep copy of the given object + # + # @param [Object] object + # the object to copy. + # + # @return [Object] The deep copy of the object. + # + def self.deep_dup(object) + case object + when Hash + new_hash = {} + object.each do |key, value| + new_hash[key] = deep_dup(value) + end + new_hash + when Array + object.map { |value| deep_dup(value) } + else + object.dup + end + end + + # Returns the build phases, in order, that appear by default + # on a target of the given type. + # + # @param [Symbol] type + # the name of the target type. + # + # @return [Array<String>] The list of build phase class names for the target type. + # + def self.build_phases_for_target_type(type) + case type + when :static_library, :dynamic_library + %w(Headers Sources Frameworks) + when :framework + %w(Headers Sources Frameworks Resources) + when :command_line_tool + %w(Sources Frameworks) + else + %w(Sources Frameworks Resources) + end.map { |phase| "PBX#{phase}BuildPhase" } + end + + #-----------------------------------------------------------------------# + end + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/project/uuid_generator.rb b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/project/uuid_generator.rb new file mode 100644 index 0000000..f47da43 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/project/uuid_generator.rb @@ -0,0 +1,132 @@ +module Xcodeproj + class Project + class UUIDGenerator + require 'digest' + + def initialize(projects) + @projects = Array(projects) + @paths_by_object = {} + end + + def generate! + generate_all_paths_by_objects(@projects) + + new_objects_by_project = Hash[@projects.map do |project| + [project, switch_uuids(project)] + end] + all_new_objects_by_project = new_objects_by_project.values.flat_map(&:values) + all_objects_by_uuid = @projects.map(&:objects_by_uuid).inject(:merge) + all_objects = @projects.flat_map(&:objects) + verify_no_duplicates!(all_objects, all_new_objects_by_project) + @projects.each { |project| fixup_uuid_references(project, all_objects_by_uuid) } + new_objects_by_project.each do |project, new_objects_by_uuid| + project.instance_variable_set(:@generated_uuids, project.instance_variable_get(:@available_uuids)) + project.instance_variable_set(:@objects_by_uuid, new_objects_by_uuid) + end + end + + private + + UUID_ATTRIBUTES = [:remote_global_id_string, :container_portal, :target_proxy].freeze + + def verify_no_duplicates!(all_objects, all_new_objects) + duplicates = all_objects - all_new_objects + UserInterface.warn "[Xcodeproj] Generated duplicate UUIDs:\n\n" << + duplicates.map { |d| "#{d.isa} -- #{@paths_by_object[d]}" }.join("\n") unless duplicates.empty? + end + + def fixup_uuid_references(target_project, all_objects_by_uuid) + fixup = ->(object, attr) do + if object.respond_to?(attr) && link = all_objects_by_uuid[object.send(attr)] + object.send(:"#{attr}=", link.uuid) + end + end + target_project.objects.each do |object| + UUID_ATTRIBUTES.each do |attr| + fixup[object, attr] + end + end + + if (project_attributes = target_project.root_object.attributes) && project_attributes['TargetAttributes'] + project_attributes['TargetAttributes'] = Hash[project_attributes['TargetAttributes'].map do |target_uuid, attributes| + if test_target_id = attributes['TestTargetID'] + attributes = attributes.merge('TestTargetID' => all_objects_by_uuid[test_target_id].uuid) + end + if target_object = all_objects_by_uuid[target_uuid] + target_uuid = target_object.uuid + end + [target_uuid, attributes] + end] + end + end + + def generate_all_paths_by_objects(projects) + projects.each { |project| generate_paths(project.root_object, project.path.basename.to_s) } + end + + def generate_paths(object, path = '') + existing = @paths_by_object[object] || path + return existing if @paths_by_object.key?(object) + @paths_by_object[object] = path.size > existing.size ? path : existing + + object.to_one_attributes.each do |attrb| + obj = attrb.get_value(object) + generate_paths(obj, path + '/' << attrb.plist_name) if obj + end + + object.to_many_attributes.each do |attrb| + attrb.get_value(object).each do |o| + generate_paths(o, path + '/' << attrb.plist_name << "/#{path_component_for_object(o)}") + end + end + + object.references_by_keys_attributes.each do |attrb| + attrb.get_value(object).each do |dictionary| + dictionary.each do |key, value| + generate_paths(value, path + '/' << attrb.plist_name << "/k:#{key}/#{path_component_for_object(value)}") + end + end + end + end + + def switch_uuids(project) + project.mark_dirty! + project.objects.each_with_object({}) do |object, hash| + next unless path = @paths_by_object[object] + uuid = uuid_for_path(path) + object.instance_variable_set(:@uuid, uuid) + hash[uuid] = object + end + end + + def uuid_for_path(path) + Digest::MD5.hexdigest(path).upcase + end + + def path_component_for_object(object) + @path_component_for_object ||= Hash.new do |cache, key| + component = tree_hash_to_path(key.to_tree_hash) + component << key.hierarchy_path.to_s if key.respond_to?(:hierarchy_path) + cache[key] = component + end + @path_component_for_object[object] + end + + def tree_hash_to_path(object, depth = 4) + return '|' if depth.zero? + case object + when Hash + object.sort.each_with_object('') do |(key, value), string| + string << key << ':' << tree_hash_to_path(value, depth - 1) << ',' + end + when Array + object.map do |value| + tree_hash_to_path(value, depth - 1) + end.join(',') + else + object.to_s + end + end + end + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/scheme.rb b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/scheme.rb new file mode 100644 index 0000000..e855ad1 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/scheme.rb @@ -0,0 +1,375 @@ +require 'rexml/document' + +require 'xcodeproj/scheme/build_action' +require 'xcodeproj/scheme/test_action' +require 'xcodeproj/scheme/launch_action' +require 'xcodeproj/scheme/profile_action' +require 'xcodeproj/scheme/analyze_action' +require 'xcodeproj/scheme/archive_action' + +require 'xcodeproj/scheme/buildable_product_runnable' +require 'xcodeproj/scheme/buildable_reference' +require 'xcodeproj/scheme/location_scenario_reference' +require 'xcodeproj/scheme/execution_action' +require 'xcodeproj/scheme/macro_expansion' +require 'xcodeproj/scheme/remote_runnable' +require 'xcodeproj/scheme/send_email_action_content' +require 'xcodeproj/scheme/shell_script_action_content' + +module Xcodeproj + # This class represents a Scheme document represented by a ".xcscheme" file + # usually stored in a xcuserdata or xcshareddata (for a shared scheme) + # folder. + # + class XCScheme + # @return [REXML::Document] the XML object that will be manipulated to save + # the scheme file after. + # + attr_reader :doc + + # Create a XCScheme either from scratch or using an existing file + # + # @param [String] file_path + # The path of the existing .xcscheme file. If nil will create an empty scheme + # + def initialize(file_path = nil) + if file_path + @file_path = file_path + @doc = File.open(file_path, 'r') do |f| + REXML::Document.new(f) + end + @doc.context[:attribute_quote] = :quote + + @scheme = @doc.elements['Scheme'] + else + @doc = REXML::Document.new + @doc.context[:attribute_quote] = :quote + @doc << REXML::XMLDecl.new(REXML::XMLDecl::DEFAULT_VERSION, 'UTF-8') + + @scheme = @doc.add_element 'Scheme' + @scheme.attributes['LastUpgradeVersion'] = Constants::LAST_UPGRADE_CHECK + @scheme.attributes['version'] = Xcodeproj::Constants::XCSCHEME_FORMAT_VERSION + + self.build_action = BuildAction.new + self.test_action = TestAction.new + self.launch_action = LaunchAction.new + self.profile_action = ProfileAction.new + self.analyze_action = AnalyzeAction.new + self.archive_action = ArchiveAction.new + end + end + + # Convenience method to quickly add app and test targets to a new scheme. + # + # It will add the runnable_target to the Build, Launch and Profile actions + # and the test_target to the Build and Test actions + # + # @param [Xcodeproj::Project::Object::PBXAbstractTarget] runnable_target + # The target to use for the 'Run', 'Profile' and 'Analyze' actions + # + # @param [Xcodeproj::Project::Object::PBXAbstractTarget] test_target + # The target to use for the 'Test' action + # + # @param [Boolean] launch_target + # Determines if the runnable_target is launchable. + # + def configure_with_targets(runnable_target, test_target, launch_target: false) + if runnable_target + add_build_target(runnable_target) + set_launch_target(runnable_target) if launch_target + end + if test_target + add_build_target(test_target, false) if test_target != runnable_target + add_test_target(test_target) + end + end + + public + + # @!group Access Action nodes + + # @return [XCScheme::BuildAction] + # The Build Action associated with this scheme + # + def build_action + @build_action ||= BuildAction.new(@scheme.elements['BuildAction']) + end + + # @param [XCScheme::BuildAction] action + # The Build Action to associate to this scheme + # + def build_action=(action) + @scheme.delete_element('BuildAction') + @scheme.add_element(action.xml_element) + @build_action = action + end + + # @return [XCScheme::TestAction] + # The Test Action associated with this scheme + # + def test_action + @test_action ||= TestAction.new(@scheme.elements['TestAction']) + end + + # @param [XCScheme::TestAction] action + # The Test Action to associate to this scheme + # + def test_action=(action) + @scheme.delete_element('TestAction') + @scheme.add_element(action.xml_element) + @test_action = action + end + + # @return [XCScheme::LaunchAction] + # The Launch Action associated with this scheme + # + def launch_action + @launch_action ||= LaunchAction.new(@scheme.elements['LaunchAction']) + end + + # @param [XCScheme::LaunchAction] action + # The Launch Action to associate to this scheme + # + def launch_action=(action) + @scheme.delete_element('LaunchAction') + @scheme.add_element(action.xml_element) + @launch_action = action + end + + # @return [XCScheme::ProfileAction] + # The Profile Action associated with this scheme + # + def profile_action + @profile_action ||= ProfileAction.new(@scheme.elements['ProfileAction']) + end + + # @param [XCScheme::ProfileAction] action + # The Profile Action to associate to this scheme + # + def profile_action=(action) + @scheme.delete_element('ProfileAction') + @scheme.add_element(action.xml_element) + @profile_action = action + end + + # @return [XCScheme::AnalyzeAction] + # The Analyze Action associated with this scheme + # + def analyze_action + @analyze_action ||= AnalyzeAction.new(@scheme.elements['AnalyzeAction']) + end + + # @param [XCScheme::AnalyzeAction] action + # The Analyze Action to associate to this scheme + # + def analyze_action=(action) + @scheme.delete_element('AnalyzeAction') + @scheme.add_element(action.xml_element) + @analyze_action = action + end + + # @return [XCScheme::ArchiveAction] + # The Archive Action associated with this scheme + # + def archive_action + @archive_action ||= ArchiveAction.new(@scheme.elements['ArchiveAction']) + end + + # @param [XCScheme::ArchiveAction] action + # The Archive Action to associate to this scheme + # + def archive_action=(action) + @scheme.delete_element('ArchiveAction') + @scheme.add_element(action.xml_element) + @archive_action = action + end + + # @!group Target methods + + # Add a target to the list of targets to build in the build action. + # + # @param [Xcodeproj::Project::Object::AbstractTarget] build_target + # A target used by scheme in the build step. + # + # @param [Bool] build_for_running + # Whether to build this target in the launch action. Often false for test targets. + # + def add_build_target(build_target, build_for_running = true) + entry = BuildAction::Entry.new(build_target) + + entry.build_for_testing = true + entry.build_for_running = build_for_running + entry.build_for_profiling = build_for_running + entry.build_for_archiving = build_for_running + entry.build_for_analyzing = build_for_running + + build_action.add_entry(entry) + end + + # Add a target to the list of targets to build in the build action. + # + # @param [Xcodeproj::Project::Object::AbstractTarget] test_target + # A target used by scheme in the test step. + # + def add_test_target(test_target) + testable = TestAction::TestableReference.new(test_target) + test_action.add_testable(testable) + end + + # Sets a runnable target to be the target of the launch action of the scheme. + # + # @param [Xcodeproj::Project::Object::AbstractTarget] build_target + # A target used by scheme in the launch step. + # + def set_launch_target(build_target) + launch_runnable = BuildableProductRunnable.new(build_target, 0) + launch_action.buildable_product_runnable = launch_runnable + + profile_runnable = BuildableProductRunnable.new(build_target, 0) + profile_action.buildable_product_runnable = profile_runnable + + macro_exp = MacroExpansion.new(build_target) + test_action.add_macro_expansion(macro_exp) + end + + # @!group Class methods + + #-------------------------------------------------------------------------# + + # Share a User Scheme. Basically this method move the xcscheme file from + # the xcuserdata folder to xcshareddata folder. + # + # @param [String] project_path + # Path of the .xcodeproj folder. + # + # @param [String] scheme_name + # The name of scheme that will be shared. + # + # @param [String] user + # The user name that have the scheme. + # + def self.share_scheme(project_path, scheme_name, user = nil) + to_folder = shared_data_dir(project_path) + to_folder.mkpath + to = to_folder + "#{scheme_name}.xcscheme" + from = user_data_dir(project_path, user) + "#{scheme_name}.xcscheme" + FileUtils.mv(from, to) + end + + # @return [Pathname] + # + def self.shared_data_dir(project_path) + project_path = Pathname.new(project_path) + project_path + 'xcshareddata/xcschemes' + end + + # @return [Pathname] + # + def self.user_data_dir(project_path, user = nil) + project_path = Pathname.new(project_path) + user ||= ENV['USER'] + project_path + "xcuserdata/#{user}.xcuserdatad/xcschemes" + end + + public + + # @!group Serialization + + #-------------------------------------------------------------------------# + + # Serializes the current state of the object to a String. + # + # @note The goal of the string representation is to match Xcode output as + # close as possible to aide comparison. + # + # @return [String] the XML string value of the current state of the object. + # + def to_s + formatter = XMLFormatter.new(2) + formatter.compact = false + out = '' + formatter.write(@doc, out) + out.gsub!("<?xml version='1.0' encoding='UTF-8'?>", '<?xml version="1.0" encoding="UTF-8"?>') + out << "\n" + out + end + + # Serializes the current state of the object to a ".xcscheme" file. + # + # @param [String, Pathname] project_path + # The path where the ".xcscheme" file should be stored. + # + # @param [String] name + # The name of the scheme, to have ".xcscheme" appended. + # + # @param [Boolean] shared + # true => if the scheme must be a shared scheme (default value) + # false => if the scheme must be a user scheme + # + # @return [void] + # + # @example Saving a scheme + # scheme.save_as('path/to/Project.xcodeproj') #=> true + # + def save_as(project_path, name, shared = true) + scheme_folder_path = if shared + self.class.shared_data_dir(project_path) + else + self.class.user_data_dir(project_path) + end + scheme_folder_path.mkpath + scheme_path = scheme_folder_path + "#{name}.xcscheme" + @file_path = scheme_path + File.open(scheme_path, 'w') do |f| + f.write(to_s) + end + end + + # Serializes the current state of the object to the original ".xcscheme" + # file this XCScheme was created from, overriding the original file. + # + # Requires that the XCScheme object was initialized using a file path. + # + def save! + raise Informative, 'This XCScheme object was not initialized ' \ + 'using a file path. Use save_as instead.' unless @file_path + File.open(@file_path, 'w') do |f| + f.write(to_s) + end + end + + #-------------------------------------------------------------------------# + + # XML formatter which closely mimics the output generated by Xcode. + # + class XMLFormatter < REXML::Formatters::Pretty + def write_element(node, output) + @indentation = 3 + output << ' ' * @level + output << "<#{node.expanded_name}" + + @level += @indentation + node.context = node.parent.context # HACK: to ensure strings are properly quoted + node.attributes.each_attribute do |attr| + output << "\n" + output << ' ' * @level + output << attr.to_string.sub(/=/, ' = ') + end unless node.attributes.empty? + + output << '>' + + output << "\n" + node.children.each do |child| + next if child.is_a?(REXML::Text) && child.to_s.strip.length == 0 + write(child, output) + output << "\n" + end + @level -= @indentation + output << ' ' * @level + output << "</#{node.expanded_name}>" + end + end + + #-------------------------------------------------------------------------# + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/scheme/abstract_scheme_action.rb b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/scheme/abstract_scheme_action.rb new file mode 100644 index 0000000..0b59d63 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/scheme/abstract_scheme_action.rb @@ -0,0 +1,100 @@ +require 'xcodeproj/scheme/xml_element_wrapper' +require 'xcodeproj/scheme/environment_variables' +require 'xcodeproj/scheme/command_line_arguments' + +module Xcodeproj + class XCScheme + # This abstract class aims to be the base class for every XxxAction class + # that have a #build_configuration attribute + # + class AbstractSchemeAction < XMLElementWrapper + # @return [String] + # The build configuration associated with this action + # (usually either 'Debug' or 'Release') + # + def build_configuration + @xml_element.attributes['buildConfiguration'] + end + + # @param [String] config_name + # The build configuration to associate with this action + # (usually either 'Debug' or 'Release') + # + def build_configuration=(config_name) + @xml_element.attributes['buildConfiguration'] = config_name + end + + # @return [Array<ExecutionAction>] + # The list of actions to run before this scheme action. + # Each entry can be either a 'Run Script' or a 'Send Email' action. + # + def pre_actions + pre_actions = @xml_element.elements['PreActions'] + return nil unless pre_actions + pre_actions.get_elements('ExecutionAction').map do |entry_node| + ExecutionAction.new(entry_node) + end + end + + # @param [Array<ExecutionAction>] pre_actions + # Set the list of actions to run before this scheme action. + # Each entry can be either a 'Run Script' or a 'Send Email' action. + # + def pre_actions=(pre_actions) + @xml_element.delete_element('PreActions') + unless pre_actions.empty? + pre_actions_element = @xml_element.add_element('PreActions') + pre_actions.each do |entry_node| + pre_actions_element.add_element(entry_node.xml_element) + end + end + pre_actions + end + + # @param [ExecutionAction] pre_action + # Add an action to the list of actions to run before this scheme action. + # It can be either a 'Run Script' or a 'Send Email' action. + # + def add_pre_action(pre_action) + pre_actions = @xml_element.elements['PreActions'] || @xml_element.add_element('PreActions') + pre_actions.add_element(pre_action.xml_element) + end + + # @return [Array<ExecutionAction>] + # The list of actions to run after this scheme action. + # Each entry can be either a 'Run Script' or a 'Send Email' action. + # + def post_actions + post_actions = @xml_element.elements['PostActions'] + return nil unless post_actions + post_actions.get_elements('ExecutionAction').map do |entry_node| + ExecutionAction.new(entry_node) + end + end + + # @param [Array<ExecutionAction>] post_actions + # Set the list of actions to run after this scheme action. + # Each entry can be either a 'Run Script' or a 'Send Email' action. + # + def post_actions=(post_actions) + @xml_element.delete_element('PostActions') + unless post_actions.empty? + post_actions_element = @xml_element.add_element('PostActions') + post_actions.each do |entry_node| + post_actions_element.add_element(entry_node.xml_element) + end + end + post_actions + end + + # @param [ExecutionAction] post_action + # Add an action to the list of actions to run after this scheme action. + # It can be either a 'Run Script' or a 'Send Email' action. + # + def add_post_action(post_action) + post_actions = @xml_element.elements['PostActions'] || @xml_element.add_element('PostActions') + post_actions.add_element(post_action.xml_element) + end + end + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/scheme/analyze_action.rb b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/scheme/analyze_action.rb new file mode 100644 index 0000000..e951980 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/scheme/analyze_action.rb @@ -0,0 +1,19 @@ +require 'xcodeproj/scheme/abstract_scheme_action' + +module Xcodeproj + class XCScheme + # This class wraps the AnalyzeAction node of a .xcscheme XML file + # + class AnalyzeAction < AbstractSchemeAction + # @param [REXML::Element] node + # The 'AnalyzeAction' XML node that this object will wrap. + # If nil, will create a default XML node to use. + # + def initialize(node = nil) + create_xml_element_with_fallback(node, 'AnalyzeAction') do + self.build_configuration = 'Debug' + end + end + end + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/scheme/archive_action.rb b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/scheme/archive_action.rb new file mode 100644 index 0000000..d00581f --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/scheme/archive_action.rb @@ -0,0 +1,59 @@ +require 'xcodeproj/scheme/abstract_scheme_action' + +module Xcodeproj + class XCScheme + # This class wraps the ArchiveAction node of a .xcscheme XML file + # + class ArchiveAction < AbstractSchemeAction + # @param [REXML::Element] node + # The 'ArchiveAction' XML node that this object will wrap. + # If nil, will create a default XML node to use. + # + def initialize(node = nil) + create_xml_element_with_fallback(node, 'ArchiveAction') do + self.build_configuration = 'Release' + self.reveal_archive_in_organizer = true + end + end + + # @return [Bool] + # Whether the Archive will be revealed in Xcode's Organizer + # after it's done building. + # + def reveal_archive_in_organizer? + string_to_bool(@xml_element.attributes['revealArchiveInOrganizer']) + end + + # @param [Bool] flag + # Set whether the Archive will be revealed in Xcode's Organizer + # after it's done building. + # + def reveal_archive_in_organizer=(flag) + @xml_element.attributes['revealArchiveInOrganizer'] = bool_to_string(flag) + end + + # @return [String] + # The custom name to give to the archive. + # If nil, the generated archive will have the same name as the one + # set in the associated target's Build Settings for the built product. + # + def custom_archive_name + @xml_element.attributes['customArchiveName'] + end + + # @param [String] name + # Set the custom name to use for the built archive + # If nil, the customization of the archive name will be removed and + # the generated archive will have the same name as the one set in the + # associated target's Build Settings for the build product. + # + def custom_archive_name=(name) + if name + @xml_element.attributes['customArchiveName'] = name + else + @xml_element.delete_attribute('customArchiveName') + end + end + end + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/scheme/build_action.rb b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/scheme/build_action.rb new file mode 100644 index 0000000..5b67213 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/scheme/build_action.rb @@ -0,0 +1,298 @@ +require 'xcodeproj/scheme/xml_element_wrapper' + +module Xcodeproj + class XCScheme + # This class wraps the BuildAction node of a .xcscheme XML file + # + # Note: It's not a AbstractSchemeAction like the others because it is + # a special case of action (with no build_configuration, etc) + # + class BuildAction < XMLElementWrapper + # @param [REXML::Element] node + # The 'BuildAction' XML node that this object will wrap. + # If nil, will create a default XML node to use. + # + def initialize(node = nil) + create_xml_element_with_fallback(node, 'BuildAction') do + self.parallelize_buildables = true + self.build_implicit_dependencies = true + end + end + + # @return [Bool] + # Whether or not to run post actions on build failure + # + def run_post_actions_on_failure? + string_to_bool(@xml_element.attributes['runPostActionsOnFailure']) + end + + # @param [Bool] flag + # Set whether or not to run post actions on build failure + # + def run_post_actions_on_failure=(flag) + @xml_element.attributes['runPostActionsOnFailure'] = bool_to_string(flag) + end + + # @return [Bool] + # Whether or not to build the various targets in parallel + # + def parallelize_buildables? + string_to_bool(@xml_element.attributes['parallelizeBuildables']) + end + + # @param [Bool] flag + # Set whether or not to build the various targets in parallel + # + def parallelize_buildables=(flag) + @xml_element.attributes['parallelizeBuildables'] = bool_to_string(flag) + end + + # @return [Bool] + # Whether or not to detect and build implicit dependencies for each target + # + def build_implicit_dependencies? + string_to_bool(@xml_element.attributes['buildImplicitDependencies']) + end + + # @param [Bool] flag + # Whether or not to detect and build implicit dependencies for each target + # + def build_implicit_dependencies=(flag) + @xml_element.attributes['buildImplicitDependencies'] = bool_to_string(flag) + end + + # @return [Array<ExecutionAction>] + # The list of actions to run before this scheme action. + # Each entry can be either a 'Run Script' or a 'Send Email' action. + # + def pre_actions + pre_actions = @xml_element.elements['PreActions'] + return nil unless pre_actions + pre_actions.get_elements('ExecutionAction').map do |entry_node| + ExecutionAction.new(entry_node) + end + end + + # @param [Array<ExecutionAction>] pre_actions + # Set the list of actions to run before this scheme action. + # Each entry can be either a 'Run Script' or a 'Send Email' action. + # + def pre_actions=(pre_actions) + @xml_element.delete_element('PreActions') + unless pre_actions.empty? + pre_actions_element = @xml_element.add_element('PreActions') + pre_actions.each do |entry_node| + pre_actions_element.add_element(entry_node.xml_element) + end + end + pre_actions + end + + # @param [ExecutionAction] pre_action + # Add an action to the list of actions to run before this scheme action. + # It can be either a 'Run Script' or a 'Send Email' action. + # + def add_pre_action(pre_action) + pre_actions = @xml_element.elements['PreActions'] || @xml_element.add_element('PreActions') + pre_actions.add_element(pre_action.xml_element) + end + + # @return [Array<ExecutionAction>] + # The list of actions to run after this scheme action. + # Each entry can be either a 'Run Script' or a 'Send Email' action. + # + def post_actions + post_actions = @xml_element.elements['PostActions'] + return nil unless post_actions + post_actions.get_elements('ExecutionAction').map do |entry_node| + ExecutionAction.new(entry_node) + end + end + + # @param [Array<ExecutionAction>] post_actions + # Set the list of actions to run after this scheme action. + # Each entry can be either a 'Run Script' or a 'Send Email' action. + # + def post_actions=(post_actions) + @xml_element.delete_element('PostActions') + unless post_actions.empty? + post_actions_element = @xml_element.add_element('PostActions') + post_actions.each do |entry_node| + post_actions_element.add_element(entry_node.xml_element) + end + end + post_actions + end + + # @param [ExecutionAction] post_action + # Add an action to the list of actions to run after this scheme action. + # It can be either a 'Run Script' or a 'Send Email' action. + # + def add_post_action(post_action) + post_actions = @xml_element.elements['PostActions'] || @xml_element.add_element('PostActions') + post_actions.add_element(post_action.xml_element) + end + + # @return [Array<BuildAction::Entry>] + # The list of BuildActionEntry nodes associated with this Build Action. + # Each entry represent a target to build and tells for which action it's needed to be built. + # + def entries + entries = @xml_element.elements['BuildActionEntries'] + return nil unless entries + entries.get_elements('BuildActionEntry').map do |entry_node| + BuildAction::Entry.new(entry_node) + end + end + + # @param [Array<BuildAction::Entry>] entries + # Sets the list of BuildActionEntry nodes associated with this Build Action. + # + def entries=(entries) + @xml_element.delete_element('BuildActionEntries') + unless entries.empty? + entries_element = @xml_element.add_element('BuildActionEntries') + entries.each do |entry_node| + entries_element.add_element(entry_node.xml_element) + end + end + entries + end + + # @param [BuildAction::Entry] entry + # The BuildActionEntry to add to the list of targets to build for the various actions + # + def add_entry(entry) + entries = @xml_element.elements['BuildActionEntries'] || @xml_element.add_element('BuildActionEntries') + entries.add_element(entry.xml_element) + end + + #-------------------------------------------------------------------------# + + class Entry < XMLElementWrapper + # @param [Xcodeproj::Project::Object::AbstractTarget, REXML::Element] target_or_node + # Either the Xcode target to reference, + # or an existing XML 'BuildActionEntry' node element to reference, + # or nil to create an new, empty Entry with default values + # + def initialize(target_or_node = nil) + create_xml_element_with_fallback(target_or_node, 'BuildActionEntry') do + # Check target type to configure the default entry attributes accordingly + is_test_target = false + is_app_target = false + if target_or_node && target_or_node.is_a?(::Xcodeproj::Project::Object::PBXNativeTarget) + test_types = [Constants::PRODUCT_TYPE_UTI[:octest_bundle], + Constants::PRODUCT_TYPE_UTI[:unit_test_bundle], + Constants::PRODUCT_TYPE_UTI[:ui_test_bundle]] + app_types = [Constants::PRODUCT_TYPE_UTI[:application]] + is_test_target = test_types.include?(target_or_node.product_type) + is_app_target = app_types.include?(target_or_node.product_type) + end + + self.build_for_testing = is_test_target + self.build_for_running = is_app_target + self.build_for_profiling = is_app_target + self.build_for_archiving = is_app_target + self.build_for_analyzing = true + + add_buildable_reference BuildableReference.new(target_or_node) if target_or_node + end + end + + # @return [Bool] + # Whether or not to build this target when building for Testing + # + def build_for_testing? + string_to_bool(@xml_element.attributes['buildForTesting']) + end + + # @param [Bool] + # Set whether or not to build this target when building for Testing + # + def build_for_testing=(flag) + @xml_element.attributes['buildForTesting'] = bool_to_string(flag) + end + + # @return [Bool] + # Whether or not to build this target when building for Running + # + def build_for_running? + string_to_bool(@xml_element.attributes['buildForRunning']) + end + + # @param [Bool] + # Set whether or not to build this target when building for Running + # + def build_for_running=(flag) + @xml_element.attributes['buildForRunning'] = bool_to_string(flag) + end + + # @return [Bool] + # Whether or not to build this target when building for Profiling + # + def build_for_profiling? + string_to_bool(@xml_element.attributes['buildForProfiling']) + end + + # @param [Bool] + # Set whether or not to build this target when building for Profiling + # + def build_for_profiling=(flag) + @xml_element.attributes['buildForProfiling'] = bool_to_string(flag) + end + + # @return [Bool] + # Whether or not to build this target when building for Archiving + # + def build_for_archiving? + string_to_bool(@xml_element.attributes['buildForArchiving']) + end + + # @param [Bool] + # Set whether or not to build this target when building for Archiving + # + def build_for_archiving=(flag) + @xml_element.attributes['buildForArchiving'] = bool_to_string(flag) + end + + # @return [Bool] + # Whether or not to build this target when building for Analyzing + # + def build_for_analyzing? + string_to_bool(@xml_element.attributes['buildForAnalyzing']) + end + + # @param [Bool] + # Set whether or not to build this target when building for Analyzing + # + def build_for_analyzing=(flag) + @xml_element.attributes['buildForAnalyzing'] = bool_to_string(flag) + end + + # @return [Array<BuildableReference>] + # The list of BuildableReferences this entry will build. + # (The list usually contains only one element) + # + def buildable_references + @xml_element.get_elements('BuildableReference').map do |node| + BuildableReference.new(node) + end + end + + # @param [BuildableReference] ref + # The BuildableReference to add to the list of targets this entry will build + # + def add_buildable_reference(ref) + @xml_element.add_element(ref.xml_element) + end + + # @param [BuildableReference] ref + # The BuildableReference to remove from the list of targets this entry will build + # + def remove_buildable_reference(ref) + @xml_element.delete_element(ref.xml_element) + end + end + end + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/scheme/buildable_product_runnable.rb b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/scheme/buildable_product_runnable.rb new file mode 100644 index 0000000..f4d350f --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/scheme/buildable_product_runnable.rb @@ -0,0 +1,55 @@ +module Xcodeproj + class XCScheme + # This class wraps the BuildableProductRunnable node of a .xcscheme XML file + # + # A BuildableProductRunnable is a product that is both buildable + # (it contains a BuildableReference) and runnable (it can be launched and debugged) + # + class BuildableProductRunnable < XMLElementWrapper + # @param [Xcodeproj::Project::Object::AbstractTarget, REXML::Element] target_or_node + # Either the Xcode target to reference, + # or an existing XML 'BuildableProductRunnable' node element to reference + # or nil to create an new, empty BuildableProductRunnable + # + # @param [#to_s] runnable_debugging_mode + # The debugging mode (usually '0') + # + def initialize(target_or_node = nil, runnable_debugging_mode = nil) + create_xml_element_with_fallback(target_or_node, 'BuildableProductRunnable') do + self.buildable_reference = BuildableReference.new(target_or_node) if target_or_node + @xml_element.attributes['runnableDebuggingMode'] = runnable_debugging_mode.to_s if runnable_debugging_mode + end + end + + # @return [String] + # The Runnable debugging mode (usually either empty or equal to '0') + # + def runnable_debugging_mode + @xml_element.attributes['runnableDebuggingMode'] + end + + # @param [String] value + # Set the runnable debugging mode of this buildable product runnable + # + def runnable_debugging_mode=(value) + @xml_element.attributes['runnableDebuggingMode'] = value.to_s + end + + # @return [BuildableReference] + # The Buildable Reference this Buildable Product Runnable is gonna build and run + # + def buildable_reference + @buildable_reference ||= BuildableReference.new @xml_element.elements['BuildableReference'] + end + + # @param [BuildableReference] ref + # Set the Buildable Reference this Buildable Product Runnable is gonna build and run + # + def buildable_reference=(ref) + @xml_element.delete_element('BuildableReference') + @xml_element.add_element(ref.xml_element) + @buildable_reference = ref + end + end + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/scheme/buildable_reference.rb b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/scheme/buildable_reference.rb new file mode 100644 index 0000000..b75e26e --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/scheme/buildable_reference.rb @@ -0,0 +1,129 @@ +module Xcodeproj + class XCScheme + # This class wraps the BuildableReference node of a .xcscheme XML file + # + # A BuildableReference is a reference to a buildable product (which is + # typically is synonymous for an Xcode target) + # + class BuildableReference < XMLElementWrapper + # @param [Xcodeproj::Project::Object::AbstractTarget, REXML::Element] target_or_node + # Either the Xcode target to reference, + # or an existing XML 'BuildableReference' node element to reference + # + # @param [Xcodeproj::Project] the root project to reference from + # (when nil the project of the target is used) + # + def initialize(target_or_node, root_project = nil) + create_xml_element_with_fallback(target_or_node, 'BuildableReference') do + @xml_element.attributes['BuildableIdentifier'] = 'primary' + set_reference_target(target_or_node, true, root_project) if target_or_node + end + end + + # @return [String] + # The name of the target this Buildable Reference points to + # + def target_name + @xml_element.attributes['BlueprintName'] + end + + # @return [String] + # The Unique Identifier of the target (target.uuid) this Buildable Reference points to. + # + # @note You can use this to `#find` the `Xcodeproj::Project::Object::AbstractTarget` + # instance in your Xcodeproj::Project object. + # e.g. `project.targets.find { |t| t.uuid == ref.target_uuid }` + # + def target_uuid + @xml_element.attributes['BlueprintIdentifier'] + end + + # @return [String] + # The string representing the container of that target. + # Typically in the form of 'container:xxxx.xcodeproj' + # + def target_referenced_container + @xml_element.attributes['ReferencedContainer'] + end + + # Set the BlueprintIdentifier (target.uuid), BlueprintName (target.name) + # and TerefencedContainer (URI pointing to target's projet) all at once + # + # @param [Xcodeproj::Project::Object::AbstractTarget] target + # The target this BuildableReference refers to. + # + # @param [Xcodeproj::Project] the root project to reference from + # (when nil the project of the target is used) + # + # @param [Bool] override_buildable_name + # If true, buildable_name will also be updated by computing a name from the target + # + def set_reference_target(target, override_buildable_name = false, root_project = nil) + # note, the order of assignment here is important, it determines the order of serialization in the xml + # this matches the order that Xcode generates + @xml_element.attributes['BlueprintIdentifier'] = target.uuid + self.buildable_name = construct_buildable_name(target) if override_buildable_name + @xml_element.attributes['BlueprintName'] = target.name + @xml_element.attributes['ReferencedContainer'] = construct_referenced_container_uri(target, root_project) + end + + # @return [String] + # The name of the final product when building this Buildable Reference + # + def buildable_name + @xml_element.attributes['BuildableName'] + end + + # @param [String] value + # Set the name of the final product when building this Buildable Reference + # + def buildable_name=(value) + @xml_element.attributes['BuildableName'] = value + end + + #-------------------------------------------------------------------------# + + private + + # @!group Private helpers + + # @param [Xcodeproj::Project::Object::AbstractTarget] target + # + # @return [String] The buildable name of the scheme. + # + def construct_buildable_name(build_target) + case build_target.isa + when 'PBXNativeTarget' + File.basename(build_target.product_reference.path) + when 'PBXAggregateTarget' + build_target.name + else + raise ArgumentError, "Unsupported build target type #{build_target.isa}" + end + end + + # @param [Xcodeproj::Project::Object::AbstractTarget] target + # + # @param [Xcodeproj::Project] the root project to reference from + # (when nil the project of the target is used) + # + # @return [String] A string in the format "container:[path to the project + # file relative to the project_dir_path, always ending with + # the actual project directory name]" + # + def construct_referenced_container_uri(target, root_project = nil) + target_project = target.project + root_project ||= target_project + root_project_dir_path = root_project.root_object.project_dir_path + path = if !root_project_dir_path.to_s.empty? + root_project.path + root_project_dir_path + else + root_project.project_dir + end + relative_path = target_project.path.relative_path_from(path).to_s + relative_path = target_project.path.basename if relative_path == '.' + "container:#{relative_path}" + end + end + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/scheme/command_line_arguments.rb b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/scheme/command_line_arguments.rb new file mode 100644 index 0000000..f5fd5d7 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/scheme/command_line_arguments.rb @@ -0,0 +1,162 @@ +require 'xcodeproj/scheme/xml_element_wrapper' + +module Xcodeproj + class XCScheme + COMMAND_LINE_ARGS_NODE = 'CommandLineArguments'.freeze + COMMAND_LINE_ARG_NODE = 'CommandLineArgument'.freeze + + # This class wraps the CommandLineArguments node of a .xcscheme XML file. This + # is just a container of CommandLineArgument objects. It can either appear on a + # LaunchAction or TestAction scheme group. + # + class CommandLineArguments < XMLElementWrapper + # @param [nil,REXML::Element,Array<CommandLineArgument>,Array<Hash{Symbol => String,Bool}>] node_or_arguments + # The 'CommandLineArguments' XML node, or list of command line arguments, that this object represents. + # - If nil, an empty 'CommandLineArguments' XML node will be created + # - If an REXML::Element, it must be named 'CommandLineArguments' + # - If an Array of objects or Hashes, they'll each be passed to {#assign_argument} + # + def initialize(node_or_arguments = nil) + create_xml_element_with_fallback(node_or_arguments, COMMAND_LINE_ARGS_NODE) do + @all_arguments = [] + node_or_arguments.each { |var| assign_argument(var) } unless node_or_arguments.nil? + end + end + + # @return [Array<CommandLineArgument>] + # The key value pairs currently set in @xml_element + # + def all_arguments + @all_arguments ||= @xml_element.get_elements(COMMAND_LINE_ARG_NODE).map { |argument| CommandLineArgument.new(argument) } + end + + # Adds a given argument to the set of command line arguments, or replaces it if that key already exists + # + # @param [CommandLineArgument,Hash{Symbol => String,Bool}] argument + # The argument to add or update, backed by an CommandLineArgument node. + # - If an CommandLineArgument, the previous reference will still be valid + # - If a Hash, must conform to {CommandLineArgument#initialize} requirements + # @return [Array<CommandLineArgument>] + # The new set of command line arguments after addition + # + def assign_argument(argument) + command_line_arg = if argument.is_a?(CommandLineArgument) + argument + else + CommandLineArgument.new(argument) + end + all_arguments.each { |existing_var| remove_argument(existing_var) if existing_var.argument == command_line_arg.argument } + @xml_element.add_element(command_line_arg.xml_element) + @all_arguments << command_line_arg + end + + # Removes a specified argument (by string or object) from the set of command line arguments + # + # @param [CommandLineArgument,String] argument + # The argument to remove + # @return [Array<CommandLineArgument>] + # The new set of command line arguments after removal + # + def remove_argument(argument) + command_line_arg = if argument.is_a?(CommandLineArgument) + argument + else + CommandLineArgument.new(argument) + end + raise "Unexpected parameter type: #{command_line_arg.class}" unless command_line_arg.is_a?(CommandLineArgument) + @xml_element.delete_element(command_line_arg.xml_element) + @all_arguments -= [command_line_arg] + end + + # @param [String] key + # The key to lookup + # @return [CommandLineArgument] argument + # Returns the matching command line argument for a specified key + # + def [](argument) + all_arguments.find { |var| var.argument == argument } + end + + # Assigns a value for a specified key + # + # @param [String] key + # The key to update in the command line arguments + # @param [String] value + # The value to lookup + # @return [CommandLineArgument] argument + # The newly updated command line argument + # + def []=(argument, enabled) + assign_argument(:argument => argument, :enabled => enabled) + self[argument] + end + + # @return [Array<Hash{Symbol => String,Bool}>] + # The current command line arguments represented as an array + # + def to_a + all_arguments.map(&:to_h) + end + end + + # This class wraps the CommandLineArgument node of a .xcscheme XML file. + # Environment arguments are accessible via the NSDictionary returned from + # [[NSProcessInfo processInfo] arguments] in your app code. + # + class CommandLineArgument < XMLElementWrapper + # @param [nil,REXML::Element,Hash{Symbol => String,Bool}] node_or_argument + # - If nil, it will create a default XML node to use + # - If a REXML::Element, should be a <CommandLineArgument> XML node to wrap + # - If a Hash, must contain keys :key and :value (Strings) and optionally :enabled (Boolean) + # + def initialize(node_or_argument) + create_xml_element_with_fallback(node_or_argument, COMMAND_LINE_ARG_NODE) do + raise "Must pass a Hash with 'argument' and 'enabled'!" unless node_or_argument.is_a?(Hash) && + node_or_argument.key?(:argument) && node_or_argument.key?(:enabled) + + @xml_element.attributes['argument'] = node_or_argument[:argument] + @xml_element.attributes['isEnabled'] = if node_or_argument.key?(:enabled) + bool_to_string(node_or_argument[:enabled]) + else + bool_to_string(false) + end + end + end + + # Returns the CommandLineArgument's key + # @return [String] + # + def argument + @xml_element.attributes['argument'] + end + + # Sets the CommandLineArgument's key + # @param [String] key + # + def argument=(argument) + @xml_element.attributes['argument'] = argument + end + + # Returns the CommandLineArgument's enabled state + # @return [Bool] + # + def enabled + string_to_bool(@xml_element.attributes['isEnabled']) + end + + # Sets the CommandLineArgument's enabled state + # @param [Bool] enabled + # + def enabled=(enabled) + @xml_element.attributes['isEnabled'] = bool_to_string(enabled) + end + + # @return [Hash{:key => String, :value => String, :enabled => Bool}] + # The command line argument XML node with attributes converted to a representative Hash + # + def to_h + { :argument => argument, :enabled => enabled } + end + end + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/scheme/environment_variables.rb b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/scheme/environment_variables.rb new file mode 100644 index 0000000..7335df6 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/scheme/environment_variables.rb @@ -0,0 +1,170 @@ +require 'xcodeproj/scheme/xml_element_wrapper' + +module Xcodeproj + class XCScheme + VARIABLES_NODE = 'EnvironmentVariables' + VARIABLE_NODE = 'EnvironmentVariable' + + # This class wraps the EnvironmentVariables node of a .xcscheme XML file. This + # is just a container of EnvironmentVariable objects. It can either appear on a + # LaunchAction or TestAction scheme group. + # + class EnvironmentVariables < XMLElementWrapper + # @param [nil,REXML::Element,Array<EnvironmentVariable>,Array<Hash{Symbol => String,Bool}>] node_or_variables + # The 'EnvironmentVariables' XML node, or list of environment variables, that this object represents. + # - If nil, an empty 'EnvironmentVariables' XML node will be created + # - If an REXML::Element, it must be named 'EnvironmentVariables' + # - If an Array of objects or Hashes, they'll each be passed to {#assign_variable} + # + def initialize(node_or_variables = nil) + create_xml_element_with_fallback(node_or_variables, VARIABLES_NODE) do + @all_variables = [] + node_or_variables.each { |var| assign_variable(var) } unless node_or_variables.nil? + end + end + + # @return [Array<EnvironmentVariable>] + # The key value pairs currently set in @xml_element + # + def all_variables + @all_variables ||= @xml_element.get_elements(VARIABLE_NODE).map { |variable| EnvironmentVariable.new(variable) } + end + + # Adds a given variable to the set of environment variables, or replaces it if that key already exists + # + # @param [EnvironmentVariable,Hash{Symbol => String,Bool}] variable + # The variable to add or update, backed by an EnvironmentVariable node. + # - If an EnvironmentVariable, the previous reference will still be valid + # - If a Hash, must conform to {EnvironmentVariable#initialize} requirements + # @return [Array<EnvironmentVariable>] + # The new set of environment variables after addition + # + def assign_variable(variable) + env_var = variable.is_a?(EnvironmentVariable) ? variable : EnvironmentVariable.new(variable) + all_variables.each { |existing_var| remove_variable(existing_var) if existing_var.key == env_var.key } + @xml_element.add_element(env_var.xml_element) + @all_variables << env_var + end + + # Removes a specified variable (by string or object) from the set of environment variables + # + # @param [EnvironmentVariable,String] variable + # The variable to remove + # @return [Array<EnvironmentVariable>] + # The new set of environment variables after removal + # + def remove_variable(variable) + env_var = variable.is_a?(EnvironmentVariable) ? variable : all_variables.find { |var| var.key == variable } + raise "Unexpected parameter type: #{env_var.class}" unless env_var.is_a?(EnvironmentVariable) + @xml_element.delete_element(env_var.xml_element) + @all_variables -= [env_var] + end + + # @param [String] key + # The key to lookup + # @return [EnvironmentVariable] variable + # Returns the matching environment variable for a specified key + # + def [](key) + all_variables.find { |var| var.key == key } + end + + # Assigns a value for a specified key + # + # @param [String] key + # The key to update in the environment variables + # @param [String] value + # The value to lookup + # @return [EnvironmentVariable] variable + # The newly updated environment variable + # + def []=(key, value) + assign_variable(:key => key, :value => value) + self[key] + end + + # @return [Array<Hash{Symbol => String,Bool}>] + # The current environment variables represented as an array + # + def to_a + all_variables.map(&:to_h) + end + end + + # This class wraps the EnvironmentVariable node of a .xcscheme XML file. + # Environment variables are accessible via the NSDictionary returned from + # [[NSProcessInfo processInfo] environment] in your app code. + # + class EnvironmentVariable < XMLElementWrapper + # @param [nil,REXML::Element,Hash{Symbol => String,Bool}] node_or_variable + # - If nil, it will create a default XML node to use + # - If a REXML::Element, should be a <EnvironmentVariable> XML node to wrap + # - If a Hash, must contain keys :key and :value (Strings) and optionally :enabled (Boolean) + # + def initialize(node_or_variable) + create_xml_element_with_fallback(node_or_variable, VARIABLE_NODE) do + raise "Must pass a Hash with 'key' and 'value'!" unless node_or_variable.is_a?(Hash) && + node_or_variable.key?(:key) && node_or_variable.key?(:value) + + @xml_element.attributes['key'] = node_or_variable[:key] + @xml_element.attributes['value'] = node_or_variable[:value] + + @xml_element.attributes['isEnabled'] = if node_or_variable.key?(:enabled) + bool_to_string(node_or_variable[:enabled]) + else + bool_to_string(true) + end + end + end + + # Returns the EnvironmentValue's key + # @return [String] + # + def key + @xml_element.attributes['key'] + end + + # Sets the EnvironmentValue's key + # @param [String] key + # + def key=(key) + @xml_element.attributes['key'] = key + end + + # Returns the EnvironmentValue's value + # @return [String] + # + def value + @xml_element.attributes['value'] + end + + # Sets the EnvironmentValue's value + # @param [String] value + # + def value=(value) + @xml_element.attributes['value'] = value + end + + # Returns the EnvironmentValue's enabled state + # @return [Bool] + # + def enabled + string_to_bool(@xml_element.attributes['isEnabled']) + end + + # Sets the EnvironmentValue's enabled state + # @param [Bool] enabled + # + def enabled=(enabled) + @xml_element.attributes['isEnabled'] = bool_to_string(enabled) + end + + # @return [Hash{:key => String, :value => String, :enabled => Bool}] + # The environment variable XML node with attributes converted to a representative Hash + # + def to_h + { :key => key, :value => value, :enabled => enabled } + end + end + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/scheme/execution_action.rb b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/scheme/execution_action.rb new file mode 100644 index 0000000..6a6e66c --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/scheme/execution_action.rb @@ -0,0 +1,86 @@ +module Xcodeproj + class XCScheme + # This class wraps the ExecutionAction node of a .xcscheme XML file + # + class ExecutionAction < XMLElementWrapper + # @param [REXML::Element] node + # The 'ExecutionAction' XML node that this object will wrap. + # If nil, will create an empty one + # + # @param [Symbol] action_type + # One of `EXECUTION_ACTION_TYPE.keys` + # + def initialize(node = nil, action_type = nil) + create_xml_element_with_fallback(node, 'ExecutionAction') do + type = action_type || node.action_type + raise "[Xcodeproj] Invalid ActionType `#{type}`" unless Constants::EXECUTION_ACTION_TYPE.keys.include?(type) + @xml_element.attributes['ActionType'] = Constants::EXECUTION_ACTION_TYPE[type] + end + end + + # @return [String] + # The ActionType of this ExecutionAction. One of two values: + # + # Xcode.IDEStandardExecutionActionsCore.ExecutionActionType.ShellScriptAction, + # Xcode.IDEStandardExecutionActionsCore.ExecutionActionType.SendEmailAction + # + def action_type + @xml_element.attributes['ActionType'] + end + + # @return [ShellScriptActionContent] + # If action_type is 'Xcode.IDEStandardExecutionActionsCore.ExecutionActionType.ShellScriptAction' + # returns the contents of the shell script to run pre/post action. + # + # @return [SendEmailActionContent] + # If action_type is 'Xcode.IDEStandardExecutionActionsCore.ExecutionActionType.SendEmailAction' + # returns the contents of the email to send pre/post action. + # + def action_content + case action_type + when Constants::EXECUTION_ACTION_TYPE[:shell_script] + ShellScriptActionContent.new(@xml_element.elements['ActionContent']) + when Constants::EXECUTION_ACTION_TYPE[:send_email] + SendEmailActionContent.new(@xml_element.elements['ActionContent']) + else + raise "[Xcodeproj] Invalid ActionType `#{action_type}`" + end + end + + # @param [ShellScriptActionContent, SendEmailActionContent] value + # Set either the contents of the shell script to run pre/post action + # or the contents of the email to send pre/post action. + # + def action_content=(value) + raise "[Xcodeproj] Invalid ActionContent `#{value.class}` for " \ + "ActionType `#{action_type}`" unless valid_action_content?(value) + + @xml_element.delete_element('ActionContent') + @xml_element.add_element(value.xml_element) + end + + #-------------------------------------------------------------------------# + + private + + # @!group Private helpers + + # @return [Bool] + # True if value (ActionContent) is valid for current action_type + # + # @param [ShellScriptActionContent, SendEmailActionContent] value + # Checks if value matches the expected action_type if present. + # + def valid_action_content?(value) + case action_type + when Constants::EXECUTION_ACTION_TYPE[:shell_script] + value.is_a?(ShellScriptActionContent) + when Constants::EXECUTION_ACTION_TYPE[:send_email] + value.is_a?(SendEmailActionContent) + else + false + end + end + end + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/scheme/launch_action.rb b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/scheme/launch_action.rb new file mode 100644 index 0000000..27eecc0 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/scheme/launch_action.rb @@ -0,0 +1,179 @@ +require 'xcodeproj/scheme/abstract_scheme_action' + +module Xcodeproj + class XCScheme + # This class wraps the LaunchAction node of a .xcscheme XML file + # + class LaunchAction < AbstractSchemeAction + # @param [REXML::Element] node + # The 'LaunchAction' XML node that this object will wrap. + # If nil, will create a default XML node to use. + # + def initialize(node = nil) + create_xml_element_with_fallback(node, 'LaunchAction') do + self.build_configuration = 'Debug' + + # Add some attributes (that are not handled by this wrapper class yet but expected in the XML) + @xml_element.attributes['selectedDebuggerIdentifier'] = 'Xcode.DebuggerFoundation.Debugger.LLDB' + @xml_element.attributes['selectedLauncherIdentifier'] = 'Xcode.DebuggerFoundation.Launcher.LLDB' + @xml_element.attributes['launchStyle'] = '0' + @xml_element.attributes['useCustomWorkingDirectory'] = bool_to_string(false) + @xml_element.attributes['ignoresPersistentStateOnLaunch'] = bool_to_string(false) + @xml_element.attributes['debugDocumentVersioning'] = bool_to_string(true) + @xml_element.attributes['debugServiceExtension'] = 'internal' + + # Setup default values for other (handled) attributes + self.allow_location_simulation = true + end + end + + # @todo handle 'launchStyle' attribute + # @todo handle 'useCustomWorkingDirectory attribute + # @todo handle 'ignoresPersistentStateOnLaunch' attribute + # @todo handle 'debugDocumentVersioning' attribute + # @todo handle 'debugServiceExtension' + + # @return [Bool] + # Whether or not to allow GPS location simulation when launching this target + # + def allow_location_simulation? + string_to_bool(@xml_element.attributes['allowLocationSimulation']) + end + + # @param [Bool] flag + # Set whether or not to allow GPS location simulation when launching this target + # + def allow_location_simulation=(flag) + @xml_element.attributes['allowLocationSimulation'] = bool_to_string(flag) + end + + # @return [LocationScenarioReference] + # The LocationScenarioReference to simulate a GPS location when executing the Launch Action + # + def location_scenario_reference? + LocationScenarioReference.new(@xml_element.elements['LocationScenarioReference']) + end + + # @return [LocationScenarioReference] + # Set the LocationScenarioReference which simulates a GPS location when executing the Launch Action + # + def location_scenario_reference=(reference) + @xml_element.delete_element('LocationScenarioReference') + @xml_element.add_element(reference.xml_element) if reference + end + + # @return [Bool] + # Whether this Build Action should disable detection of UI API misuse + # from background threads + # + def disable_main_thread_checker? + string_to_bool(@xml_element.attributes['disableMainThreadChecker']) + end + + # @param [Bool] flag + # Set whether this Build Action should disable detection of UI API misuse + # from background threads + # + def disable_main_thread_checker=(flag) + @xml_element.attributes['disableMainThreadChecker'] = bool_to_string(flag) + end + + # @return [Bool] + # Whether UI API misuse from background threads detection should pause execution. + # This flag is ignored when the thread checker disabled + # ([disable_main_thread_checker] flag). + # + def stop_on_every_main_thread_checker_issue? + string_to_bool(@xml_element.attributes['stopOnEveryMainThreadCheckerIssue']) + end + + # @param [Bool] flag + # Set whether UI API misuse from background threads detection should pause execution. + # This flag is ignored when the thread checker disabled + # ([disable_main_thread_checker] flag). + # + def stop_on_every_main_thread_checker_issue=(flag) + @xml_element.attributes['stopOnEveryMainThreadCheckerIssue'] = bool_to_string(flag) + end + + # @return [String] + # The launch automatically substyle + # + def launch_automatically_substyle + @xml_element.attributes['launchAutomaticallySubstyle'] + end + + # @param [String] flag + # Set the launch automatically substyle ('2' for extensions) + # + def launch_automatically_substyle=(value) + @xml_element.attributes['launchAutomaticallySubstyle'] = value.to_s + end + + # @return [BuildableProductRunnable] + # The BuildReference to launch when executing the Launch Action + # + def buildable_product_runnable + BuildableProductRunnable.new(@xml_element.elements['BuildableProductRunnable'], 0) + end + + # @param [BuildableProductRunnable] runnable + # Set the BuildableProductRunnable referencing the target to launch + # + def buildable_product_runnable=(runnable) + @xml_element.delete_element('BuildableProductRunnable') + @xml_element.add_element(runnable.xml_element) if runnable + end + + # @return [EnvironmentVariables] + # Returns the EnvironmentVariables that will be defined at app launch + # + def environment_variables + EnvironmentVariables.new(@xml_element.elements[XCScheme::VARIABLES_NODE]) + end + + # @param [EnvironmentVariables,nil] env_vars + # Sets the EnvironmentVariables that will be defined at app launch + # + def environment_variables=(env_vars) + @xml_element.delete_element(XCScheme::VARIABLES_NODE) + @xml_element.add_element(env_vars.xml_element) if env_vars + env_vars + end + + # @todo handle 'AdditionalOptions' tag + + # @return [CommandLineArguments] + # Returns the CommandLineArguments that will be passed at app launch + # + def command_line_arguments + CommandLineArguments.new(@xml_element.elements[XCScheme::COMMAND_LINE_ARGS_NODE]) + end + + # @return [CommandLineArguments] arguments + # Sets the CommandLineArguments that will be passed at app launch + # + def command_line_arguments=(arguments) + @xml_element.delete_element(XCScheme::COMMAND_LINE_ARGS_NODE) + @xml_element.add_element(arguments.xml_element) if arguments + arguments + end + + # @return [Array<MacroExpansion>] + # The list of MacroExpansion bound with this LaunchAction + # + def macro_expansions + @xml_element.get_elements('MacroExpansion').map do |node| + MacroExpansion.new(node) + end + end + + # @param [MacroExpansion] macro_expansion + # Add a MacroExpansion to this LaunchAction + # + def add_macro_expansion(macro_expansion) + @xml_element.add_element(macro_expansion.xml_element) + end + end + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/scheme/location_scenario_reference.rb b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/scheme/location_scenario_reference.rb new file mode 100644 index 0000000..e58f241 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/scheme/location_scenario_reference.rb @@ -0,0 +1,49 @@ +module Xcodeproj + class XCScheme + # This class wraps the LocationScenarioReference node of a .xcscheme XML file + # + # A LocationScenarioReference is a reference to a simulated GPS location associated + # with a scheme's launch action + # + class LocationScenarioReference < XMLElementWrapper + # @param [Xcodeproj::Project::Object::AbstractTarget, REXML::Element] target_or_node + # Either the Xcode target to reference, + # or an existing XML 'LocationScenarioReference' node element to reference + # + def initialize(target_or_node) + create_xml_element_with_fallback(target_or_node, 'LocationScenarioReference') do + self.identifier = '' + self.reference_type = '0' + end + end + + # @return [String] + # The identifier of a built-in location scenario reference, or a path to a GPX file + # + def identifier + @xml_element.attributes['identifier'] + end + + # @param [String] value + # Set the identifier for the location scenario reference + # + def identifier=(value) + @xml_element.attributes['identifier'] = value + end + + # @return [String] + # The reference type is 0 when using a custom GPX file, or 1 when using a built-in location reference + # + def reference_type + @xml_element.attributes['referenceType'] + end + + # @param [String] value + # Set the reference type for the location scenario reference + # + def reference_type=(value) + @xml_element.attributes['referenceType'] = value + end + end + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/scheme/macro_expansion.rb b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/scheme/macro_expansion.rb new file mode 100644 index 0000000..66b099a --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/scheme/macro_expansion.rb @@ -0,0 +1,34 @@ +module Xcodeproj + class XCScheme + # This class wraps the MacroExpansion node of a .xcscheme XML file + # + class MacroExpansion < XMLElementWrapper + # @param [Xcodeproj::Project::Object::AbstractTarget, REXML::Element] target_or_node + # Either the Xcode target to reference, + # or an existing XML 'MacroExpansion' node element + # or nil to create an empty MacroExpansion object + # + def initialize(target_or_node = nil) + create_xml_element_with_fallback(target_or_node, 'MacroExpansion') do + self.buildable_reference = BuildableReference.new(target_or_node) if target_or_node + end + end + + # @return [BuildableReference] + # The BuildableReference this MacroExpansion refers to + # + def buildable_reference + @buildable_reference ||= BuildableReference.new @xml_element.elements['BuildableReference'] + end + + # @param [BuildableReference] ref + # Set the BuildableReference this MacroExpansion refers to + # + def buildable_reference=(ref) + @xml_element.delete_element('BuildableReference') + @xml_element.add_element(ref.xml_element) + @buildable_reference = ref + end + end + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/scheme/profile_action.rb b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/scheme/profile_action.rb new file mode 100644 index 0000000..041a810 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/scheme/profile_action.rb @@ -0,0 +1,57 @@ +require 'xcodeproj/scheme/abstract_scheme_action' + +module Xcodeproj + class XCScheme + # This class wraps the ProfileAction node of a .xcscheme XML file + # + class ProfileAction < AbstractSchemeAction + # @param [REXML::Element] node + # The 'ProfileAction' XML node that this object will wrap. + # If nil, will create a default XML node to use. + # + def initialize(node = nil) + create_xml_element_with_fallback(node, 'ProfileAction') do + # Setup default values for other (handled) attributes + self.build_configuration = 'Release' + self.should_use_launch_scheme_args_env = true + + # Add some attributes (that are not handled by this wrapper class yet but expected in the XML) + @xml_element.attributes['savedToolIdentifier'] = '' + @xml_element.attributes['useCustomWorkingDirectory'] = bool_to_string(false) + @xml_element.attributes['debugDocumentVersioning'] = bool_to_string(true) + end + end + + # @return [Bool] + # Whether this Profile Action should use the same arguments and environment variables + # as the Launch Action. + # + def should_use_launch_scheme_args_env? + string_to_bool(@xml_element.attributes['shouldUseLaunchSchemeArgsEnv']) + end + + # @param [Bool] flag + # Set Whether this Profile Action should use the same arguments and environment variables + # as the Launch Action. + # + def should_use_launch_scheme_args_env=(flag) + @xml_element.attributes['shouldUseLaunchSchemeArgsEnv'] = bool_to_string(flag) + end + + # @return [BuildableProductRunnable] + # The BuildableProductRunnable to launch when launching the Profile action + # + def buildable_product_runnable + BuildableProductRunnable.new @xml_element.elements['BuildableProductRunnable'], 0 + end + + # @param [BuildableProductRunnable] runnable + # Set the BuildableProductRunnable referencing the target to launch when profiling + # + def buildable_product_runnable=(runnable) + @xml_element.delete_element('BuildableProductRunnable') + @xml_element.add_element(runnable.xml_element) if runnable + end + end + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/scheme/remote_runnable.rb b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/scheme/remote_runnable.rb new file mode 100644 index 0000000..c51c547 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/scheme/remote_runnable.rb @@ -0,0 +1,92 @@ +module Xcodeproj + class XCScheme + # This class wraps the RemoteRunnable node of a .xcscheme XML file + # + # A RemoteRunnable is a product that is both buildable + # (it contains a BuildableReference) and + # runnable remotely (it can be launched and debugged on a remote device, i.e. an Apple Watch) + # + class RemoteRunnable < XMLElementWrapper + # @param [Xcodeproj::Project::Object::AbstractTarget, REXML::Element] target_or_node + # Either the Xcode target to reference, + # or an existing XML 'RemoteRunnable' node element to reference + # or nil to create an new, empty RemoteRunnable + # + # @param [#to_s] runnable_debugging_mode + # The debugging mode (usually '2') + # + # @param [#to_s] bundle_identifier + # The bundle identifier (usually 'com.apple.Carousel') + # + # @param [#to_s] remote_path + # The remote path (not required, unknown usage) + # + def initialize(target_or_node = nil, runnable_debugging_mode = nil, bundle_identifier = nil, remote_path = nil) + create_xml_element_with_fallback(target_or_node, 'RemoteRunnable') do + self.buildable_reference = BuildableReference.new(target_or_node) if target_or_node + @xml_element.attributes['runnableDebuggingMode'] = runnable_debugging_mode.to_s if runnable_debugging_mode + @xml_element.attributes['BundleIdentifier'] = bundle_identifier.to_s if bundle_identifier + @xml_element.attributes['RemotePath'] = remote_path.to_s if remote_path + end + end + + # @return [String] + # The runnable debugging mode (usually '2') + # + def runnable_debugging_mode + @xml_element.attributes['runnableDebuggingMode'] + end + + # @param [String] value + # Set the runnable debugging mode + # + def runnable_debugging_mode=(value) + @xml_element.attributes['runnableDebuggingMode'] = value.to_s + end + + # @return [String] + # The runnable bundle identifier (usually 'com.apple.Carousel') + # + def bundle_identifier + @xml_element.attributes['BundleIdentifier'] + end + + # @param [String] value + # Set the runnable bundle identifier + # + def bundle_identifier=(value) + @xml_element.attributes['BundleIdentifier'] = value.to_s + end + + # @return [String] + # The runnable remote path (not required, unknown usage) + # + def remote_path + @xml_element.attributes['RemotePath'] + end + + # @param [String] value + # Set the runnable remote path + # + def remote_path=(value) + @xml_element.attributes['RemotePath'] = value.to_s + end + + # @return [BuildableReference] + # The buildable reference this remote runnable is gonna build and run + # + def buildable_reference + @buildable_reference ||= BuildableReference.new @xml_element.elements['BuildableReference'] + end + + # @param [BuildableReference] ref + # Set the buildable reference this remote runnable is gonna build and run + # + def buildable_reference=(ref) + @xml_element.delete_element('BuildableReference') + @xml_element.add_element(ref.xml_element) + @buildable_reference = ref + end + end + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/scheme/send_email_action_content.rb b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/scheme/send_email_action_content.rb new file mode 100644 index 0000000..24ee2fe --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/scheme/send_email_action_content.rb @@ -0,0 +1,84 @@ +module Xcodeproj + class XCScheme + # This class wraps a 'ActionContent' node of type + # 'Xcode.IDEStandardExecutionActionsCore.ExecutionActionType.SendEmailAction' of a .xcscheme XML file + # + class SendEmailActionContent < XMLElementWrapper + # @param [REXML::Element] node + # The 'ActionContent' XML node that this object will wrap. + # If nil, will create a default XML node to use. + # + def initialize(node = nil) + create_xml_element_with_fallback(node, 'ActionContent') do + self.title = 'Send Email' + # For some reason this is not visible in Xcode's UI and it's always set to 'NO' + # couldn't find much documentation on it so it might be safer to keep it read only + @xml_element.attributes['attachLogToEmail'] = 'NO' + end + end + + # @return [Bool] + # Whether or not this action should attach log to email + # + def attach_log_to_email? + string_to_bool(@xml_element.attributes['attachLogToEmail']) + end + + # @return [String] + # The title of this ActionContent + # + def title + @xml_element.attributes['title'] + end + + # @param [String] value + # Set the title of this ActionContent + # + def title=(value) + @xml_element.attributes['title'] = value + end + + # @return [String] + # The email recipient of this ActionContent + # + def email_recipient + @xml_element.attributes['emailRecipient'] + end + + # @param [String] value + # Set the email recipient of this ActionContent + # + def email_recipient=(value) + @xml_element.attributes['emailRecipient'] = value + end + + # @return [String] + # The email subject of this ActionContent + # + def email_subject + @xml_element.attributes['emailSubject'] + end + + # @param [String] value + # Set the email subject of this ActionContent + # + def email_subject=(value) + @xml_element.attributes['emailSubject'] = value + end + + # @return [String] + # The email body of this ActionContent + # + def email_body + @xml_element.attributes['emailBody'] + end + + # @param [String] value + # Set the email body of this ActionContent + # + def email_body=(value) + @xml_element.attributes['emailBody'] = value + end + end + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/scheme/shell_script_action_content.rb b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/scheme/shell_script_action_content.rb new file mode 100644 index 0000000..75b3bb6 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/scheme/shell_script_action_content.rb @@ -0,0 +1,77 @@ +module Xcodeproj + class XCScheme + # This class wraps a 'ActionContent' node of type + # 'Xcode.IDEStandardExecutionActionsCore.ExecutionActionType.ShellScriptAction' of a .xcscheme XML file + # + class ShellScriptActionContent < XMLElementWrapper + # @param [REXML::Element] node + # The 'ActionContent' XML node that this object will wrap. + # If nil, will create a default XML node to use. + # + def initialize(node = nil) + create_xml_element_with_fallback(node, 'ActionContent') do + self.title = 'Run Script' + end + end + + # @return [String] + # The title of this ActionContent + # + def title + @xml_element.attributes['title'] + end + + # @param [String] value + # Set the title of this ActionContent + # + def title=(value) + @xml_element.attributes['title'] = value + end + + # @return [String] + # The contents of the shell script represented by this ActionContent + # + def script_text + @xml_element.attributes['scriptText'] + end + + # @param [String] value + # Set the contents of the shell script represented by this ActionContent + # + def script_text=(value) + @xml_element.attributes['scriptText'] = value + end + + # @return [String] + # The preferred shell to invoke with this ActionContent + # + def shell_to_invoke + @xml_element.attributes['shellToInvoke'] + end + + # @param [String] value + # Set the preferred shell to invoke with this ActionContent + # + def shell_to_invoke=(value) + @xml_element.attributes['shellToInvoke'] = value + end + + # @return [BuildableReference] + # The BuildableReference (Xcode target) associated with this ActionContent + # + def buildable_reference + BuildableReference.new(@xml_element.elements['EnvironmentBuildable'].elements['BuildableReference']) + end + + # @param [BuildableReference] ref + # Set the BuildableReference (Xcode target) associated with this ActionContent + # + def buildable_reference=(ref) + @xml_element.delete_element('EnvironmentBuildable') + + env_buildable = @xml_element.add_element('EnvironmentBuildable') + env_buildable.add_element(ref.xml_element) + end + end + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/scheme/test_action.rb b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/scheme/test_action.rb new file mode 100644 index 0000000..5043d01 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/scheme/test_action.rb @@ -0,0 +1,394 @@ +require 'xcodeproj/scheme/abstract_scheme_action' + +module Xcodeproj + class XCScheme + # This class wraps the TestAction node of a .xcscheme XML file + # + class TestAction < AbstractSchemeAction + # @param [REXML::Element] node + # The 'TestAction' XML node that this object will wrap. + # If nil, will create a default XML node to use. + # + def initialize(node = nil) + create_xml_element_with_fallback(node, 'TestAction') do + self.build_configuration = 'Debug' + @xml_element.attributes['selectedDebuggerIdentifier'] = 'Xcode.DebuggerFoundation.Debugger.LLDB' + @xml_element.attributes['selectedLauncherIdentifier'] = 'Xcode.DebuggerFoundation.Launcher.LLDB' + self.should_use_launch_scheme_args_env = true + @xml_element.add_element('Testables') + end + end + + # @return [Bool] + # Whether this Test Action should use the same arguments and environment variables + # as the Launch Action. + # + def should_use_launch_scheme_args_env? + string_to_bool(@xml_element.attributes['shouldUseLaunchSchemeArgsEnv']) + end + + # @param [Bool] flag + # Set whether this Test Action should use the same arguments and environment variables + # as the Launch Action. + # + def should_use_launch_scheme_args_env=(flag) + @xml_element.attributes['shouldUseLaunchSchemeArgsEnv'] = bool_to_string(flag) + end + + # @return [Bool] + # Whether this Test Action should disable detection of UI API misuse + # from background threads + # + def disable_main_thread_checker? + string_to_bool(@xml_element.attributes['disableMainThreadChecker']) + end + + # @param [Bool] flag + # Set whether this Test Action should disable detection of UI API misuse + # from background threads + # + def disable_main_thread_checker=(flag) + @xml_element.attributes['disableMainThreadChecker'] = bool_to_string(flag) + end + + # @return [Bool] + # Whether Clang Code Coverage is enabled ('Gather coverage data' turned ON) + # + def code_coverage_enabled? + string_to_bool(@xml_element.attributes['codeCoverageEnabled']) + end + + # @param [Bool] flag + # Set whether Clang Code Coverage is enabled ('Gather coverage data' turned ON) + # + def code_coverage_enabled=(flag) + @xml_element.attributes['codeCoverageEnabled'] = bool_to_string(flag) + end + + # @return [Array<TestableReference>] + # The list of TestableReference (test bundles) associated with this Test Action + # + def testables + return [] unless @xml_element.elements['Testables'] + + @xml_element.elements['Testables'].get_elements('TestableReference').map do |node| + TestableReference.new(node) + end + end + + # @param [Array<TestableReference>] testables + # Sets the list of TestableReference (test bundles) associated with this Test Action + # + def testables=(testables) + @xml_element.delete_element('Testables') + testables_element = @xml_element.add_element('Testables') + testables.each do |testable| + testables_element.add_element(testable.xml_element) + end + testables + end + + # @param [TestableReference] testable + # Add a TestableReference (test bundle) to this Test Action + # + def add_testable(testable) + testables = @xml_element.elements['Testables'] || @xml_element.add_element('Testables') + testables.add_element(testable.xml_element) + end + + # @return [Array<MacroExpansion>] + # The list of MacroExpansion bound with this TestAction + # + def macro_expansions + @xml_element.get_elements('MacroExpansion').map do |node| + MacroExpansion.new(node) + end + end + + # @param [MacroExpansion] macro_expansion + # Add a MacroExpansion to this TestAction + # + def add_macro_expansion(macro_expansion) + if testables = @xml_element.elements['Testables'] + @xml_element.insert_before(testables, macro_expansion.xml_element) + else + @xml_element.add_element(macro_expansion.xml_element) + end + end + + # @return [EnvironmentVariables] + # Returns the EnvironmentVariables that will be defined at test launch + # + def environment_variables + EnvironmentVariables.new(@xml_element.elements[XCScheme::VARIABLES_NODE]) + end + + # @param [EnvironmentVariables,nil] env_vars + # Sets the EnvironmentVariables that will be defined at test launch + # @return [EnvironmentVariables] + # + def environment_variables=(env_vars) + @xml_element.delete_element(XCScheme::VARIABLES_NODE) + @xml_element.add_element(env_vars.xml_element) if env_vars + env_vars + end + + # @todo handle 'AdditionalOptions' tag + + # @return [CommandLineArguments] + # Returns the CommandLineArguments that will be passed at app launch + # + def command_line_arguments + CommandLineArguments.new(@xml_element.elements[XCScheme::COMMAND_LINE_ARGS_NODE]) + end + + # @return [CommandLineArguments] arguments + # Sets the CommandLineArguments that will be passed at app launch + # + def command_line_arguments=(arguments) + @xml_element.delete_element(XCScheme::COMMAND_LINE_ARGS_NODE) + @xml_element.add_element(arguments.xml_element) if arguments + arguments + end + + # @return [Array<BuildableReference>] + # The list of BuildableReference (code coverage targets) associated with this Test Action + # + def code_coverage_targets + return [] unless @xml_element.elements['CodeCoverageTargets'] + + @xml_element.elements['CodeCoverageTargets'].get_elements('BuildableReference').map do |node| + BuildableReference.new(node) + end + end + + # @param [Array<BuildableReference>] buildable_references + # Sets the list of BuildableReference (code coverage targets) associated with this Test Action + # + def code_coverage_targets=(buildable_references) + @xml_element.attributes['onlyGenerateCoverageForSpecifiedTargets'] = bool_to_string(true) + + @xml_element.delete_element('CodeCoverageTargets') + coverage_targets_element = @xml_element.add_element('CodeCoverageTargets') + buildable_references.each do |reference| + coverage_targets_element.add_element(reference.xml_element) + end + + code_coverage_targets + end + + # @param [BuildableReference] buildable_reference + # Add a BuildableReference (code coverage target) to this Test Action + # + def add_code_coverage_target(buildable_reference) + @xml_element.attributes['onlyGenerateCoverageForSpecifiedTargets'] = bool_to_string(true) + + coverage_targets_element = @xml_element.elements['CodeCoverageTargets'] || @xml_element.add_element('CodeCoverageTargets') + coverage_targets_element.add_element(buildable_reference.xml_element) + + code_coverage_targets + end + + #-------------------------------------------------------------------------# + + class TestableReference < XMLElementWrapper + # @param [Xcodeproj::Project::Object::AbstractTarget, REXML::Element] target_or_node + # Either the Xcode target to reference, + # or an existing XML 'TestableReference' node element to reference, + # or nil to create an new, empty TestableReference + # + # @param [Xcodeproj::Project] the root project to reference from + # (when nil the project of the target is used) + # + def initialize(target_or_node = nil, root_project = nil) + create_xml_element_with_fallback(target_or_node, 'TestableReference') do + self.skipped = false + add_buildable_reference BuildableReference.new(target_or_node, root_project) unless target_or_node.nil? + end + end + + # @return [Bool] + # Whether or not this TestableReference (test bundle) should be skipped or not + # + def skipped? + string_to_bool(@xml_element.attributes['skipped']) + end + + # @param [Bool] flag + # Set whether or not this TestableReference (test bundle) should be skipped or not + # + def skipped=(flag) + @xml_element.attributes['skipped'] = bool_to_string(flag) + end + + # @return [Bool] + # Whether or not this TestableReference (test bundle) should be run in parallel or not + # + def parallelizable? + string_to_bool(@xml_element.attributes['parallelizable']) + end + + # @param [Bool] flag + # Set whether or not this TestableReference (test bundle) should be run in parallel or not + # + def parallelizable=(flag) + @xml_element.attributes['parallelizable'] = bool_to_string(flag) + end + + # @return [String] + # The execution order for this TestableReference (test bundle) + # + def test_execution_ordering + @xml_element.attributes['testExecutionOrdering'] + end + + # @param [String] order + # Set the execution order for this TestableReference (test bundle) + # + def test_execution_ordering=(order) + @xml_element.attributes['testExecutionOrdering'] = order + end + + # @return [Bool] + # Whether or not this TestableReference (test bundle) should be run in randomized order. + # + def randomized? + test_execution_ordering == 'random' + end + + # @return [Array<BuildableReference>] + # The list of BuildableReferences this action will build. + # (The list usually contains only one element) + # + def buildable_references + @xml_element.get_elements('BuildableReference').map do |node| + BuildableReference.new(node) + end + end + + # @param [BuildableReference] ref + # The BuildableReference to add to the list of targets this action will build + # + def add_buildable_reference(ref) + @xml_element.add_element(ref.xml_element) + end + + # @param [BuildableReference] ref + # The BuildableReference to remove from the list of targets this entry will build + # + def remove_buildable_reference(ref) + @xml_element.delete_element(ref.xml_element) + end + + # @return [Array<Test>] + # The list of SkippedTest this action will skip. + # + def skipped_tests + return [] if @xml_element.elements['SkippedTests'].nil? + @xml_element.elements['SkippedTests'].get_elements('Test').map do |node| + Test.new(node) + end + end + + # @param [Array<Test>] tests + # Set the list of SkippedTest this action will skip. + # + def skipped_tests=(tests) + @xml_element.delete_element('SkippedTests') + if tests.nil? + return + end + entries = @xml_element.add_element('SkippedTests') + tests.each do |skipped| + entries.add_element(skipped.xml_element) + end + end + + # @param [Test] skipped_test + # The SkippedTest to add to the list of tests this action will skip + # + def add_skipped_test(skipped_test) + entries = @xml_element.elements['SkippedTests'] || @xml_element.add_element('SkippedTests') + entries.add_element(skipped_test.xml_element) + end + + # @return [Bool] + # Whether or not this TestableReference (test bundle) should use a whitelist or not + # + def use_test_selection_whitelist? + string_to_bool(@xml_element.attributes['useTestSelectionWhitelist']) + end + + # @param [Bool] flag + # Set whether or not this TestableReference (test bundle) should use a whitelist or not + # + def use_test_selection_whitelist=(flag) + @xml_element.attributes['useTestSelectionWhitelist'] = bool_to_string(flag) + end + + # @return [Array<Test>] + # The list of SelectedTest this action will run. + # + def selected_tests + return [] if @xml_element.elements['SelectedTests'].nil? + @xml_element.elements['SelectedTests'].get_elements('Test').map do |node| + Test.new(node) + end + end + + # @param [Array<Test>] tests + # Set the list of SelectedTest this action will run. + # + def selected_tests=(tests) + @xml_element.delete_element('SelectedTests') + return if tests.nil? + entries = @xml_element.add_element('SelectedTests') + tests.each do |selected| + entries.add_element(selected.xml_element) + end + end + + # @param [Test] selected_test + # The SelectedTest to add to the list of tests this action will run. + # + def add_selected_test(selected_test) + entries = @xml_element.elements['SelectedTests'] || @xml_element.add_element('SelectedTests') + entries.add_element(selected_test.xml_element) + end + + class Test < XMLElementWrapper + # @param [REXML::Element] node + # The 'Test' XML node that this object will wrap. + # If nil, will create a default XML node to use. + # + def initialize(node = nil) + create_xml_element_with_fallback(node, 'Test') do + self.identifier = node.attributes['Identifier'] unless node.nil? + end + end + + # @return [String] + # Skipped test class name + # + def identifier + @xml_element.attributes['Identifier'] + end + + # @param [String] value + # Set the name of the skipped test class name + # + def identifier=(value) + @xml_element.attributes['Identifier'] = value + end + end + + # Aliased to`Test` for compatibility + # @todo Remove in Xcodeproj 2 + # + SkippedTest = Test + + # @todo handle 'AdditionalOptions' tag + end + end + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/scheme/xml_element_wrapper.rb b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/scheme/xml_element_wrapper.rb new file mode 100644 index 0000000..ceb7420 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/scheme/xml_element_wrapper.rb @@ -0,0 +1,82 @@ +module Xcodeproj + class XCScheme + # Abstract base class used for other XCScheme classes wrapping an XML element + # + class XMLElementWrapper + # @return [REXML::Element] + # The XML node wrapped and manipulated by this XMLElementWrapper object + # + attr_reader :xml_element + + # @return [String] + # The XML representation of the node this XMLElementWrapper wraps, + # formatted in the same way that Xcode would. + def to_s + formatter = XMLFormatter.new(2) + formatter.compact = false + out = '' + formatter.write(@xml_element, out) + out.gsub!("<?xml version='1.0' encoding='UTF-8'?>", '') + out << "\n" + out + end + + private + + # This is a method intended to be used to facilitate the implementation of the initializers. + # + # - Create the @xml_element attribute based on the node passed as parameter, only if + # that parameter is of type REXML::Element and its name matches the tag_name given. + # - Otherwise, create a brand new REXML::Element with the proper tag name and + # execute the block given as a fallback to let the caller the chance to configure it + # + # @param [REXML::Element, *] node + # The node this XMLElementWrapper is expected to wrap + # or any other object (typically an AbstractTarget instance, or nil) the initializer might expect + # + # @param [String] tag_name + # The expected name for the node, which will also be the name used to create the new node + # if that `node` parameter is not a REXML::Element itself. + # + # @yield a parameter-less block if the `node` parameter is not actually a REXML::Element + # + # @raise Informative + # If the `node` parameter is a REXML::Element instance but the node's name + # doesn't match the one provided by the `tag_name` parameter. + # + def create_xml_element_with_fallback(node, tag_name) + if node && node.is_a?(REXML::Element) + raise Informative, 'Wrong XML tag name' unless node.name == tag_name + @xml_element = node + else + @xml_element = REXML::Element.new(tag_name) + yield if block_given? + end + end + + # @param [Bool] + # The boolean we want to represent as a string + # + # @return [String] + # The string representaiton of that boolean used in the XML ('YES' or 'NO') + # + def bool_to_string(flag) + flag ? 'YES' : 'NO' + end + + # @param [String] + # The string representaiton of a boolean used in the XML ('YES' or 'NO') + # + # @return [Bool] + # The boolean interpretation of that string + # + # @raise Informative + # If the string is not representing a boolean (i.e. is neither 'YES' nor 'NO') + # + def string_to_bool(str) + raise Informative, 'Invalid tag value. Expected YES or NO.' unless %w(YES NO).include?(str) + str == 'YES' + end + end + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/user_interface.rb b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/user_interface.rb new file mode 100644 index 0000000..9737c52 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/user_interface.rb @@ -0,0 +1,22 @@ +module Xcodeproj + # Manages the UI output so clients can customize it. + # + module UserInterface + # Prints a message to standard output. + # + # @return [void] + # + def self.puts(message) + STDOUT.puts message + end + + # Prints a message to standard error. + # + # @return [void] + # + def self.warn(message) + STDERR.puts message + end + end + UI = UserInterface +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/workspace.rb b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/workspace.rb new file mode 100644 index 0000000..40afbd0 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/workspace.rb @@ -0,0 +1,277 @@ +require 'fileutils' +require 'rexml/document' +require 'xcodeproj/workspace/file_reference' +require 'xcodeproj/workspace/group_reference' + +module Xcodeproj + # Provides support for generating, reading and serializing Xcode Workspace + # documents. + # + class Workspace + # @return [REXML::Document] the parsed XML model for the workspace contents + attr_reader :document + + # @return [Hash<String => String>] a mapping from scheme name to project full path + # containing the scheme + attr_reader :schemes + + # @return [Array<FileReference>] the paths of the projects contained in the + # workspace. + # + def file_references + return [] unless @document + @document.get_elements('/Workspace//FileRef').map do |node| + FileReference.from_node(node) + end + end + + # @return [Array<GroupReference>] the groups contained in the workspace + # + def group_references + return [] unless @document + @document.get_elements('/Workspace//Group').map do |node| + GroupReference.from_node(node) + end + end + + # @param [REXML::Document] document @see document + # @param [Array<FileReference>] file_references additional projects to add + # + # @note The document parameter is passed to the << operator if it is not a + # valid REXML::Document. It is optional, but may also be passed as nil + # + def initialize(document, *file_references) + @schemes = {} + if document.nil? + @document = REXML::Document.new(root_xml('')) + elsif document.is_a?(REXML::Document) + @document = document + else + @document = REXML::Document.new(root_xml('')) + self << document + end + file_references.each { |ref| self << ref } + end + + #-------------------------------------------------------------------------# + + # Returns a workspace generated by reading the contents of the given path. + # + # @param [String] path + # the path of the `xcworkspace` file. + # + # @return [Workspace] the generated workspace. + # + def self.new_from_xcworkspace(path) + from_s(File.read(File.join(path, 'contents.xcworkspacedata')), + File.expand_path(path)) + rescue Errno::ENOENT + new(nil) + end + + #-------------------------------------------------------------------------# + + # Returns a workspace generated by reading the contents of the given + # XML representation. + # + # @param [String] xml + # the XML representation of the workspace. + # + # @return [Workspace] the generated workspace. + # + def self.from_s(xml, workspace_path = '') + document = REXML::Document.new(xml) + instance = new(document) + instance.load_schemes(workspace_path) + instance + end + + # Adds a new path to the list of the of projects contained in the + # workspace. + # @param [String, Xcodeproj::Workspace::FileReference] path_or_reference + # A string or Xcode::Workspace::FileReference containing a path to an Xcode project + # + # @raise [ArgumentError] Raised if the input is neither a String nor a FileReference + # + # @return [void] + # + def <<(path_or_reference) + return unless @document && @document.respond_to?(:root) + + case path_or_reference + when String + project_file_reference = Xcodeproj::Workspace::FileReference.new(path_or_reference) + when Xcodeproj::Workspace::FileReference + project_file_reference = path_or_reference + projpath = nil + else + raise ArgumentError, "Input to the << operator must be a file path or FileReference, got #{path_or_reference.inspect}" + end + unless file_references.any? { |ref| project_file_reference.eql? ref } + @document.root.add_element(project_file_reference.to_node) + end + load_schemes_from_project File.expand_path(projpath || project_file_reference.path) + end + + #-------------------------------------------------------------------------# + + # Adds a new group container to the workspace + # workspace. + # + # @param [String] name The name of the group + # + # @yield [Xcodeproj::Workspace::GroupReference, REXML::Element] + # Yields the GroupReference and underlying XML element for mutation + # + # @return [Xcodeproj::Workspace::GroupReference] The added group reference + # + def add_group(name) + return nil unless @document + group = Xcodeproj::Workspace::GroupReference.new(name) + elem = @document.root.add_element(group.to_node) + yield group, elem if block_given? + group + end + + # Checks if the workspace contains the project with the given file + # reference. + # + # @param [FileReference] file_reference + # The file_reference to the project. + # + # @return [Boolean] whether the project is contained in the workspace. + # + def include?(file_reference) + file_references.include?(file_reference) + end + + # @return [String] the XML representation of the workspace. + # + def to_s + contents = '' + stack = [] + @document.root.each_recursive do |elem| + until stack.empty? + last = stack.last + break if last == elem.parent + contents += xcworkspace_element_end_xml(stack.length, last) + stack.pop + end + + stack << elem + contents += xcworkspace_element_start_xml(stack.length, elem) + end + + until stack.empty? + contents += xcworkspace_element_end_xml(stack.length, stack.last) + stack.pop + end + + root_xml(contents) + end + + # Saves the workspace at the given `xcworkspace` path. + # + # @param [String] path + # the path where to save the project. + # + # @return [void] + # + def save_as(path) + FileUtils.mkdir_p(path) + File.open(File.join(path, 'contents.xcworkspacedata'), 'w') do |out| + out << to_s + end + end + + #-------------------------------------------------------------------------# + + # Load all schemes from all projects in workspace or in the workspace container itself + # + # @param [String] workspace_dir_path + # path of workspaces dir + # + # @return [void] + # + def load_schemes(workspace_dir_path) + # Normalizes path to directory of workspace needed for file_reference.absolute_path + workspaces_dir = workspace_dir_path + if File.extname(workspace_dir_path) == '.xcworkspace' + workspaces_dir = File.expand_path('..', workspaces_dir) + end + + file_references.each do |file_reference| + project_full_path = file_reference.absolute_path(workspaces_dir) + load_schemes_from_project(project_full_path) + end + + # Load schemes that are in the workspace container. + workspace_abs_path = File.absolute_path(workspace_dir_path) + Dir[File.join(workspace_dir_path, 'xcshareddata', 'xcschemes', '*.xcscheme')].each do |scheme| + scheme_name = File.basename(scheme, '.xcscheme') + @schemes[scheme_name] = workspace_abs_path + end + end + + private + + # Load all schemes from project + # + # @param [String] project_full_path + # project full path + # + # @return [void] + # + def load_schemes_from_project(project_full_path) + schemes = Xcodeproj::Project.schemes project_full_path + schemes.each do |scheme_name| + @schemes[scheme_name] = project_full_path + end + end + + # @return [String] The template of the workspace XML as formated by Xcode. + # + # @param [String] contents The XML contents of the workspace. + # + def root_xml(contents) + <<-DOC +<?xml version="1.0" encoding="UTF-8"?> +<Workspace + version = "1.0"> +#{contents.rstrip} +</Workspace> +DOC + end + + # + # @param [Integer] depth The depth of the element in the tree + # @param [REXML::Document::Element] elem The XML element to format. + # + # @return [String] The Xcode-specific XML formatting of an element start + # + def xcworkspace_element_start_xml(depth, elem) + attributes = case elem.name + when 'Group' + %w(location name) + when 'FileRef' + %w(location) + end + contents = "<#{elem.name}" + indent = ' ' * depth + attributes.each { |name| contents += "\n #{name} = \"#{elem.attribute(name)}\"" } + contents.split("\n").map { |line| "#{indent}#{line}" }.join("\n") + ">\n" + end + + # + # @param [Integer] depth The depth of the element in the tree + # @param [REXML::Document::Element] elem The XML element to format. + # + # @return [String] The Xcode-specific XML formatting of an element end + # + def xcworkspace_element_end_xml(depth, elem) + "#{' ' * depth}</#{elem.name}>\n" + end + + #-------------------------------------------------------------------------# + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/workspace/file_reference.rb b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/workspace/file_reference.rb new file mode 100644 index 0000000..1691a63 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/workspace/file_reference.rb @@ -0,0 +1,79 @@ +require 'xcodeproj/workspace/reference' + +module Xcodeproj + class Workspace + # Describes a file reference of a Workspace. + # + class FileReference < Reference + # @return [String] the path to the project + # + attr_reader :path + + # @param [#to_s] path @see path + # @param [#to_s] type @see type + # + def initialize(path, type = 'group') + @path = Pathname.new(path.to_s).cleanpath.to_s + @type = type.to_s + end + + # @return [Bool] Wether a file reference is equal to another. + # + def ==(other) + path == other.path && type == other.type + end + alias_method :eql?, :== + + # @return [Fixnum] A hash identical for equals objects. + # + def hash + [path, type].hash + end + + # Returns a file reference given XML representation. + # + # @param [REXML::Element] xml_node + # the XML representation. + # + # @return [FileReference] The new file reference instance. + # + def self.from_node(xml_node) + type, path = xml_node.attribute('location').value.split(':', 2) + if type == 'group' + path = prepend_parent_path(xml_node, path) + end + new(path, type) + end + + # @return [REXML::Element] the XML representation of the file reference. + # + def to_node + REXML::Element.new('FileRef').tap do |element| + element.add_attribute('location', "#{type}:#{path}") + end + end + + # Returns the absolute path of a file reference given the path of the + # directory containing workspace. + # + # @param [#to_s] workspace_dir_path + # The Path of the directory containing the workspace. + # + # @return [String] The absolute path to the project. + # + def absolute_path(workspace_dir_path) + workspace_dir_path = workspace_dir_path.to_s + case type + when 'group', 'container', 'self' + File.expand_path(File.join(workspace_dir_path, path)) + when 'absolute' + File.expand_path(path) + when 'developer' + raise "Developer workspace file reference type is not yet supported (#{path})" + else + raise "Unsupported workspace file reference type `#{type}`" + end + end + end + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/workspace/group_reference.rb b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/workspace/group_reference.rb new file mode 100644 index 0000000..ec73dbf --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/workspace/group_reference.rb @@ -0,0 +1,67 @@ +require 'xcodeproj/workspace/reference' + +module Xcodeproj + class Workspace + # Describes a group reference of a Workspace. + # + class GroupReference < Reference + # @return [String] the name of the group + # + attr_reader :name + + # @return [String] the location of the group on disk + # + attr_reader :location + + # @param [#to_s] name @see name + # @param [#to_s] type @see type + # @param [#to_s] location @see location + # + def initialize(name, type = 'container', location = '') + @name = name.to_s + @type = type.to_s + @location = location.to_s + end + + # @return [Bool] Whether a group reference is equal to another. + # + def ==(other) + name == other.name && type == other.type && location == other.location + end + alias_method :eql?, :== + + # @return [Fixnum] A hash identical for equals objects. + # + def hash + [name, type, location].hash + end + + # Returns a group reference given XML representation. + # + # @param [REXML::Element] xml_node + # the XML representation. + # + # @return [GroupReference] The new group reference instance. + # + def self.from_node(xml_node) + location_array = xml_node.attribute('location').value.split(':', 2) + type = location_array.first + location = location_array[1] || '' + if type == 'group' + location = prepend_parent_path(xml_node, location) + end + name = xml_node.attribute('name').value + new(name, type, location) + end + + # @return [REXML::Element] the XML representation of the group reference. + # + def to_node + REXML::Element.new('Group').tap do |element| + element.add_attribute('location', "#{type}:#{location}") + element.add_attribute('name', "#{name}") + end + end + end + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/workspace/reference.rb b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/workspace/reference.rb new file mode 100644 index 0000000..599052b --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/workspace/reference.rb @@ -0,0 +1,40 @@ +module Xcodeproj + class Workspace + # Describes a file/group reference of a Workspace. + # + class Reference + # @return [String] the type of reference to the project + # + # This can be of the following values: + # - absolute + # - group + # - container + # - developer (unsupported) + # + attr_reader :type + + # Returns the relative path to the parent group reference (if one exists) + # prepended to the passed in path. + # + # @param [REXML::Element] xml_node + # the XML representation. + # + # @param [String] path + # the path that will be prepended to. + # + # @return [String] the extended path including the parent node's path. + # + def self.prepend_parent_path(xml_node, path) + if !xml_node.parent.nil? && (xml_node.parent.name == 'Group') + group = GroupReference.from_node(xml_node.parent) + if !group.location.nil? && !group.location.empty? + path = '' if path.nil? + path = File.join(group.location, path) + end + end + + path + end + end + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/xcodebuild_helper.rb b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/xcodebuild_helper.rb new file mode 100644 index 0000000..03a9aff --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/gems/xcodeproj-1.27.0/lib/xcodeproj/xcodebuild_helper.rb @@ -0,0 +1,117 @@ +module Xcodeproj + # Helper class which returns information from xcodebuild. + # + class XcodebuildHelper + def initialize + @needs_to_parse_sdks = true + end + + # @return [String] The version of the last iOS sdk. + # + def last_ios_sdk + parse_sdks_if_needed + versions_by_sdk[:ios].sort.last + end + + # @return [String] The version of the last OS X sdk. + # + def last_osx_sdk + parse_sdks_if_needed + versions_by_sdk[:osx].sort.last + end + + # @return [String] The version of the last tvOS sdk. + # + def last_tvos_sdk + parse_sdks_if_needed + versions_by_sdk[:tvos].sort.last + end + + # @return [String] The version of the last visionOS sdk. + # + def last_visionos_sdk + parse_sdks_if_needed + versions_by_sdk[:visionos].sort.last + end + + # @return [String] The version of the last watchOS sdk. + # + def last_watchos_sdk + parse_sdks_if_needed + versions_by_sdk[:watchos].sort.last + end + + private + + # !@group Private Helpers + + #-------------------------------------------------------------------------# + + # @return [Hash] The versions of the sdks grouped by name (`:ios`, or `:osx`). + # + attr_accessor :versions_by_sdk + + # @return [void] Parses the SDKs returned by xcodebuild and stores the + # information in the `needs_to_parse_sdks` hash. + # + def parse_sdks_if_needed + if @needs_to_parse_sdks + @versions_by_sdk = {} + @versions_by_sdk[:osx] = [] + @versions_by_sdk[:ios] = [] + @versions_by_sdk[:tvos] = [] + @versions_by_sdk[:visionos] = [] + @versions_by_sdk[:watchos] = [] + if xcodebuild_available? + sdks = parse_sdks_information(xcodebuild_sdks) + sdks.each do |(name, version)| + case + when name == 'macosx' then @versions_by_sdk[:osx] << version + when name == 'iphoneos' then @versions_by_sdk[:ios] << version + when name == 'appletvos' then @versions_by_sdk[:tvos] << version + when name == 'xros' then @versions_by_sdk[:visionos] << version + when name == 'watchos' then @versions_by_sdk[:watchos] << version + end + end + end + end + end + + # @return [Bool] Whether xcodebuild is available. + # + def xcodebuild_available? + if @xcodebuild_available.nil? + `which xcodebuild 2>/dev/null` + @xcodebuild_available = $?.exitstatus.zero? + end + @xcodebuild_available + end + + # @return [Array<Array<String>>] An array of tuples where the first element + # is the name of the SDK and the second is the version. + # + def parse_sdks_information(output) + output.scan(/-sdk (macosx|iphoneos|watchos|appletvos|xros)(.+\w)/) + end + + # @return [String] The sdk information reported by xcodebuild. + # + def xcodebuild_sdks + `xcodebuild -showsdks 2>/dev/null` + end + + #-------------------------------------------------------------------------# + + # @!group Singleton + + # @return [XcodebuildHelper] the current xcodebuild instance creating one + # if needed, which caches the information from the xcodebuild + # command line tool. + # + def self.instance + @instance ||= new + end + + #-------------------------------------------------------------------------# + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/specifications/CFPropertyList-3.0.7.gemspec b/ios/vendor/bundle/ruby/2.6.0/specifications/CFPropertyList-3.0.7.gemspec new file mode 100644 index 0000000..26a48fa --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/specifications/CFPropertyList-3.0.7.gemspec @@ -0,0 +1,52 @@ +# -*- encoding: utf-8 -*- +# stub: CFPropertyList 3.0.7 ruby lib + +Gem::Specification.new do |s| + s.name = "CFPropertyList".freeze + s.version = "3.0.7" + + s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version= + s.require_paths = ["lib".freeze] + s.authors = ["Christian Kruse".freeze] + s.date = "2024-02-15" + s.description = "This is a module to read, write and manipulate both binary and XML property lists as defined by apple.".freeze + s.email = "cjk@defunct.ch".freeze + s.extra_rdoc_files = ["README.rdoc".freeze] + s.files = ["README.rdoc".freeze] + s.homepage = "https://github.com/ckruse/CFPropertyList".freeze + s.licenses = ["MIT".freeze] + s.rubygems_version = "3.0.3.1".freeze + s.summary = "Read, write and manipulate both binary and XML property lists as defined by apple".freeze + + s.installed_by_version = "3.0.3.1" if s.respond_to? :installed_by_version + + if s.respond_to? :specification_version then + s.specification_version = 4 + + if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then + s.add_runtime_dependency(%q<rexml>.freeze, [">= 0"]) + s.add_runtime_dependency(%q<nkf>.freeze, [">= 0"]) + s.add_runtime_dependency(%q<base64>.freeze, [">= 0"]) + s.add_development_dependency(%q<libxml-ruby>.freeze, [">= 0"]) + s.add_development_dependency(%q<minitest>.freeze, [">= 0"]) + s.add_development_dependency(%q<nokogiri>.freeze, [">= 0"]) + s.add_development_dependency(%q<rake>.freeze, [">= 0.7.0"]) + else + s.add_dependency(%q<rexml>.freeze, [">= 0"]) + s.add_dependency(%q<nkf>.freeze, [">= 0"]) + s.add_dependency(%q<base64>.freeze, [">= 0"]) + s.add_dependency(%q<libxml-ruby>.freeze, [">= 0"]) + s.add_dependency(%q<minitest>.freeze, [">= 0"]) + s.add_dependency(%q<nokogiri>.freeze, [">= 0"]) + s.add_dependency(%q<rake>.freeze, [">= 0.7.0"]) + end + else + s.add_dependency(%q<rexml>.freeze, [">= 0"]) + s.add_dependency(%q<nkf>.freeze, [">= 0"]) + s.add_dependency(%q<base64>.freeze, [">= 0"]) + s.add_dependency(%q<libxml-ruby>.freeze, [">= 0"]) + s.add_dependency(%q<minitest>.freeze, [">= 0"]) + s.add_dependency(%q<nokogiri>.freeze, [">= 0"]) + s.add_dependency(%q<rake>.freeze, [">= 0.7.0"]) + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/specifications/atomos-0.1.3.gemspec b/ios/vendor/bundle/ruby/2.6.0/specifications/atomos-0.1.3.gemspec new file mode 100644 index 0000000..1d17732 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/specifications/atomos-0.1.3.gemspec @@ -0,0 +1,42 @@ +# -*- encoding: utf-8 -*- +# stub: atomos 0.1.3 ruby lib + +Gem::Specification.new do |s| + s.name = "atomos".freeze + s.version = "0.1.3" + + s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version= + s.require_paths = ["lib".freeze] + s.authors = ["Samuel Giddins".freeze] + s.bindir = "exe".freeze + s.date = "2018-08-07" + s.email = ["segiddins@segiddins.me".freeze] + s.homepage = "https://github.com/segiddins/atomos".freeze + s.licenses = ["MIT".freeze] + s.required_ruby_version = Gem::Requirement.new(">= 2.0".freeze) + s.rubygems_version = "3.0.3.1".freeze + s.summary = "A simple gem to atomically write files".freeze + + s.installed_by_version = "3.0.3.1" if s.respond_to? :installed_by_version + + if s.respond_to? :specification_version then + s.specification_version = 4 + + if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then + s.add_development_dependency(%q<bundler>.freeze, ["~> 1.16"]) + s.add_development_dependency(%q<rake>.freeze, ["~> 10.0"]) + s.add_development_dependency(%q<rspec>.freeze, ["~> 3.0"]) + s.add_development_dependency(%q<rubocop>.freeze, [">= 0"]) + else + s.add_dependency(%q<bundler>.freeze, ["~> 1.16"]) + s.add_dependency(%q<rake>.freeze, ["~> 10.0"]) + s.add_dependency(%q<rspec>.freeze, ["~> 3.0"]) + s.add_dependency(%q<rubocop>.freeze, [">= 0"]) + end + else + s.add_dependency(%q<bundler>.freeze, ["~> 1.16"]) + s.add_dependency(%q<rake>.freeze, ["~> 10.0"]) + s.add_dependency(%q<rspec>.freeze, ["~> 3.0"]) + s.add_dependency(%q<rubocop>.freeze, [">= 0"]) + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/specifications/base64-0.3.0.gemspec b/ios/vendor/bundle/ruby/2.6.0/specifications/base64-0.3.0.gemspec new file mode 100644 index 0000000..d9c817f --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/specifications/base64-0.3.0.gemspec @@ -0,0 +1,23 @@ +# -*- encoding: utf-8 -*- +# stub: base64 0.3.0 ruby lib + +Gem::Specification.new do |s| + s.name = "base64".freeze + s.version = "0.3.0" + + s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version= + s.metadata = { "changelog_uri" => "https://github.com/ruby/base64/releases", "homepage_uri" => "https://github.com/ruby/base64", "source_code_uri" => "https://github.com/ruby/base64" } if s.respond_to? :metadata= + s.require_paths = ["lib".freeze] + s.authors = ["Yusuke Endoh".freeze] + s.bindir = "exe".freeze + s.date = "1980-01-02" + s.description = "Support for encoding and decoding binary data using a Base64 representation.".freeze + s.email = ["mame@ruby-lang.org".freeze] + s.homepage = "https://github.com/ruby/base64".freeze + s.licenses = ["Ruby".freeze, "BSD-2-Clause".freeze] + s.required_ruby_version = Gem::Requirement.new(">= 2.4".freeze) + s.rubygems_version = "3.0.3.1".freeze + s.summary = "Support for encoding and decoding binary data using a Base64 representation.".freeze + + s.installed_by_version = "3.0.3.1" if s.respond_to? :installed_by_version +end diff --git a/ios/vendor/bundle/ruby/2.6.0/specifications/claide-1.1.0.gemspec b/ios/vendor/bundle/ruby/2.6.0/specifications/claide-1.1.0.gemspec new file mode 100644 index 0000000..51f3f33 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/specifications/claide-1.1.0.gemspec @@ -0,0 +1,20 @@ +# -*- encoding: utf-8 -*- +# stub: claide 1.1.0 ruby lib + +Gem::Specification.new do |s| + s.name = "claide".freeze + s.version = "1.1.0" + + s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version= + s.require_paths = ["lib".freeze] + s.authors = ["Eloy Duran".freeze, "Fabio Pelosin".freeze] + s.date = "2022-01-12" + s.email = ["eloy.de.enige@gmail.com".freeze, "fabiopelosin@gmail.com".freeze] + s.homepage = "https://github.com/CocoaPods/CLAide".freeze + s.licenses = ["MIT".freeze] + s.required_ruby_version = Gem::Requirement.new(">= 2.3.0".freeze) + s.rubygems_version = "3.0.3.1".freeze + s.summary = "A small command-line interface framework.".freeze + + s.installed_by_version = "3.0.3.1" if s.respond_to? :installed_by_version +end diff --git a/ios/vendor/bundle/ruby/2.6.0/specifications/colored2-3.1.2.gemspec b/ios/vendor/bundle/ruby/2.6.0/specifications/colored2-3.1.2.gemspec new file mode 100644 index 0000000..4c7fa86 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/specifications/colored2-3.1.2.gemspec @@ -0,0 +1,39 @@ +# -*- encoding: utf-8 -*- +# stub: colored2 3.1.2 ruby lib + +Gem::Specification.new do |s| + s.name = "colored2".freeze + s.version = "3.1.2" + + s.required_rubygems_version = Gem::Requirement.new(">= 1.3.6".freeze) if s.respond_to? :required_rubygems_version= + s.require_paths = ["lib".freeze] + s.authors = ["Chris Wanstrath".freeze, "Konstantin Gredeskoul".freeze] + s.date = "2017-02-14" + s.description = "This is a heavily modified fork of http://github.com/defunkt/colored gem, with many\nsensible pull requests combined. Since the authors of the original gem no longer support it,\nthis might, perhaps, be considered a good alternative.\n\nSimple gem that adds various color methods to String class, and can be used as follows:\n\n require 'colored2'\n\n puts 'this is red'.red\n puts 'this is red with a yellow background'.red.on.yellow\n puts 'this is red with and italic'.red.italic\n puts 'this is green bold'.green.bold << ' and regular'.green\n puts 'this is really bold blue on white but reversed'.bold.blue.on.white.reversed\n puts 'this is regular, but '.red! << 'this is red '.yellow! << ' and yellow.'.no_color!\n puts ('this is regular, but '.red! do\n 'this is red '.yellow! do\n ' and yellow.'.no_color!\n end\n end)\n\n".freeze + s.email = "kigster@gmail.com".freeze + s.homepage = "http://github.com/kigster/colored2".freeze + s.licenses = ["MIT".freeze] + s.required_ruby_version = Gem::Requirement.new(">= 2.0.0".freeze) + s.rubygems_version = "3.0.3.1".freeze + s.summary = "Add even more color to your life.".freeze + + s.installed_by_version = "3.0.3.1" if s.respond_to? :installed_by_version + + if s.respond_to? :specification_version then + s.specification_version = 4 + + if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then + s.add_development_dependency(%q<rake>.freeze, ["~> 10.0"]) + s.add_development_dependency(%q<rspec>.freeze, ["~> 3.4"]) + s.add_development_dependency(%q<codeclimate-test-reporter>.freeze, [">= 0"]) + else + s.add_dependency(%q<rake>.freeze, ["~> 10.0"]) + s.add_dependency(%q<rspec>.freeze, ["~> 3.4"]) + s.add_dependency(%q<codeclimate-test-reporter>.freeze, [">= 0"]) + end + else + s.add_dependency(%q<rake>.freeze, ["~> 10.0"]) + s.add_dependency(%q<rspec>.freeze, ["~> 3.4"]) + s.add_dependency(%q<codeclimate-test-reporter>.freeze, [">= 0"]) + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/specifications/nanaimo-0.4.0.gemspec b/ios/vendor/bundle/ruby/2.6.0/specifications/nanaimo-0.4.0.gemspec new file mode 100644 index 0000000..949c52e --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/specifications/nanaimo-0.4.0.gemspec @@ -0,0 +1,39 @@ +# -*- encoding: utf-8 -*- +# stub: nanaimo 0.4.0 ruby lib + +Gem::Specification.new do |s| + s.name = "nanaimo".freeze + s.version = "0.4.0" + + s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version= + s.require_paths = ["lib".freeze] + s.authors = ["Danielle Tomlinson".freeze, "Samuel Giddins".freeze] + s.bindir = "exe".freeze + s.date = "2024-10-03" + s.email = ["dan@tomlinson.io".freeze, "segiddins@segiddins.me".freeze] + s.homepage = "https://github.com/CocoaPods/Nanaimo".freeze + s.licenses = ["MIT".freeze] + s.required_ruby_version = Gem::Requirement.new(">= 2.3.0".freeze) + s.rubygems_version = "3.0.3.1".freeze + s.summary = "A library for (de)serialization of ASCII Plists.".freeze + + s.installed_by_version = "3.0.3.1" if s.respond_to? :installed_by_version + + if s.respond_to? :specification_version then + s.specification_version = 4 + + if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then + s.add_development_dependency(%q<bundler>.freeze, ["~> 2.3"]) + s.add_development_dependency(%q<rake>.freeze, ["~> 12.3"]) + s.add_development_dependency(%q<rspec>.freeze, ["~> 3.0"]) + else + s.add_dependency(%q<bundler>.freeze, ["~> 2.3"]) + s.add_dependency(%q<rake>.freeze, ["~> 12.3"]) + s.add_dependency(%q<rspec>.freeze, ["~> 3.0"]) + end + else + s.add_dependency(%q<bundler>.freeze, ["~> 2.3"]) + s.add_dependency(%q<rake>.freeze, ["~> 12.3"]) + s.add_dependency(%q<rspec>.freeze, ["~> 3.0"]) + end +end diff --git a/ios/vendor/bundle/ruby/2.6.0/specifications/nkf-0.2.0.gemspec b/ios/vendor/bundle/ruby/2.6.0/specifications/nkf-0.2.0.gemspec new file mode 100644 index 0000000..807da37 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/specifications/nkf-0.2.0.gemspec @@ -0,0 +1,26 @@ +# -*- encoding: utf-8 -*- +# stub: nkf 0.2.0 ruby lib +# stub: ext/nkf/extconf.rb + +Gem::Specification.new do |s| + s.name = "nkf".freeze + s.version = "0.2.0" + + s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version= + s.metadata = { "homepage_uri" => "https://github.com/ruby/nkf", "source_code_uri" => "https://github.com/ruby/nkf" } if s.respond_to? :metadata= + s.require_paths = ["lib".freeze] + s.authors = ["NARUSE Yui".freeze, "Charles Oliver Nutter".freeze] + s.bindir = "exe".freeze + s.date = "2024-01-22" + s.description = "Ruby extension for Network Kanji Filter".freeze + s.email = ["naruse@airemix.jp".freeze, "headius@headius.com".freeze] + s.extensions = ["ext/nkf/extconf.rb".freeze] + s.files = ["ext/nkf/extconf.rb".freeze] + s.homepage = "https://github.com/ruby/nkf".freeze + s.licenses = ["Ruby".freeze, "BSD-2-Clause".freeze] + s.required_ruby_version = Gem::Requirement.new(">= 2.3.0".freeze) + s.rubygems_version = "3.0.3.1".freeze + s.summary = "Ruby extension for Network Kanji Filter".freeze + + s.installed_by_version = "3.0.3.1" if s.respond_to? :installed_by_version +end diff --git a/ios/vendor/bundle/ruby/2.6.0/specifications/rexml-3.4.4.gemspec b/ios/vendor/bundle/ruby/2.6.0/specifications/rexml-3.4.4.gemspec new file mode 100644 index 0000000..ff8e2f6 --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/specifications/rexml-3.4.4.gemspec @@ -0,0 +1,25 @@ +# -*- encoding: utf-8 -*- +# stub: rexml 3.4.4 ruby lib + +Gem::Specification.new do |s| + s.name = "rexml".freeze + s.version = "3.4.4" + + s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version= + s.metadata = { "changelog_uri" => "https://github.com/ruby/rexml/releases/tag/v3.4.4" } if s.respond_to? :metadata= + s.require_paths = ["lib".freeze] + s.authors = ["Kouhei Sutou".freeze] + s.date = "1980-01-02" + s.description = "An XML toolkit for Ruby".freeze + s.email = ["kou@cozmixng.org".freeze] + s.extra_rdoc_files = ["LICENSE.txt".freeze, "NEWS.md".freeze, "README.md".freeze, "doc/rexml/context.rdoc".freeze, "doc/rexml/tasks/rdoc/child.rdoc".freeze, "doc/rexml/tasks/rdoc/document.rdoc".freeze, "doc/rexml/tasks/rdoc/element.rdoc".freeze, "doc/rexml/tasks/rdoc/node.rdoc".freeze, "doc/rexml/tasks/rdoc/parent.rdoc".freeze, "doc/rexml/tasks/tocs/child_toc.rdoc".freeze, "doc/rexml/tasks/tocs/document_toc.rdoc".freeze, "doc/rexml/tasks/tocs/element_toc.rdoc".freeze, "doc/rexml/tasks/tocs/master_toc.rdoc".freeze, "doc/rexml/tasks/tocs/node_toc.rdoc".freeze, "doc/rexml/tasks/tocs/parent_toc.rdoc".freeze, "doc/rexml/tutorial.rdoc".freeze] + s.files = ["LICENSE.txt".freeze, "NEWS.md".freeze, "README.md".freeze, "doc/rexml/context.rdoc".freeze, "doc/rexml/tasks/rdoc/child.rdoc".freeze, "doc/rexml/tasks/rdoc/document.rdoc".freeze, "doc/rexml/tasks/rdoc/element.rdoc".freeze, "doc/rexml/tasks/rdoc/node.rdoc".freeze, "doc/rexml/tasks/rdoc/parent.rdoc".freeze, "doc/rexml/tasks/tocs/child_toc.rdoc".freeze, "doc/rexml/tasks/tocs/document_toc.rdoc".freeze, "doc/rexml/tasks/tocs/element_toc.rdoc".freeze, "doc/rexml/tasks/tocs/master_toc.rdoc".freeze, "doc/rexml/tasks/tocs/node_toc.rdoc".freeze, "doc/rexml/tasks/tocs/parent_toc.rdoc".freeze, "doc/rexml/tutorial.rdoc".freeze] + s.homepage = "https://github.com/ruby/rexml".freeze + s.licenses = ["BSD-2-Clause".freeze] + s.rdoc_options = ["--main".freeze, "README.md".freeze] + s.required_ruby_version = Gem::Requirement.new(">= 2.5.0".freeze) + s.rubygems_version = "3.0.3.1".freeze + s.summary = "An XML toolkit for Ruby".freeze + + s.installed_by_version = "3.0.3.1" if s.respond_to? :installed_by_version +end diff --git a/ios/vendor/bundle/ruby/2.6.0/specifications/xcodeproj-1.27.0.gemspec b/ios/vendor/bundle/ruby/2.6.0/specifications/xcodeproj-1.27.0.gemspec new file mode 100644 index 0000000..5e79d1b --- /dev/null +++ b/ios/vendor/bundle/ruby/2.6.0/specifications/xcodeproj-1.27.0.gemspec @@ -0,0 +1,50 @@ +# -*- encoding: utf-8 -*- +# stub: xcodeproj 1.27.0 ruby lib + +Gem::Specification.new do |s| + s.name = "xcodeproj".freeze + s.version = "1.27.0" + + s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version= + s.require_paths = ["lib".freeze] + s.authors = ["Eloy Duran".freeze] + s.date = "2024-10-31" + s.description = "Xcodeproj lets you create and modify Xcode projects from Ruby. Script boring management tasks or build Xcode-friendly libraries. Also includes support for Xcode workspaces (.xcworkspace) and configuration files (.xcconfig).".freeze + s.email = "eloy.de.enige@gmail.com".freeze + s.executables = ["xcodeproj".freeze] + s.files = ["bin/xcodeproj".freeze] + s.homepage = "https://github.com/cocoapods/xcodeproj".freeze + s.licenses = ["MIT".freeze] + s.required_ruby_version = Gem::Requirement.new(">= 2.0.0".freeze) + s.rubygems_version = "3.0.3.1".freeze + s.summary = "Create and modify Xcode projects from Ruby.".freeze + + s.installed_by_version = "3.0.3.1" if s.respond_to? :installed_by_version + + if s.respond_to? :specification_version then + s.specification_version = 3 + + if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then + s.add_runtime_dependency(%q<atomos>.freeze, ["~> 0.1.3"]) + s.add_runtime_dependency(%q<CFPropertyList>.freeze, [">= 2.3.3", "< 4.0"]) + s.add_runtime_dependency(%q<claide>.freeze, [">= 1.0.2", "< 2.0"]) + s.add_runtime_dependency(%q<colored2>.freeze, ["~> 3.1"]) + s.add_runtime_dependency(%q<nanaimo>.freeze, ["~> 0.4.0"]) + s.add_runtime_dependency(%q<rexml>.freeze, [">= 3.3.6", "< 4.0"]) + else + s.add_dependency(%q<atomos>.freeze, ["~> 0.1.3"]) + s.add_dependency(%q<CFPropertyList>.freeze, [">= 2.3.3", "< 4.0"]) + s.add_dependency(%q<claide>.freeze, [">= 1.0.2", "< 2.0"]) + s.add_dependency(%q<colored2>.freeze, ["~> 3.1"]) + s.add_dependency(%q<nanaimo>.freeze, ["~> 0.4.0"]) + s.add_dependency(%q<rexml>.freeze, [">= 3.3.6", "< 4.0"]) + end + else + s.add_dependency(%q<atomos>.freeze, ["~> 0.1.3"]) + s.add_dependency(%q<CFPropertyList>.freeze, [">= 2.3.3", "< 4.0"]) + s.add_dependency(%q<claide>.freeze, [">= 1.0.2", "< 2.0"]) + s.add_dependency(%q<colored2>.freeze, ["~> 3.1"]) + s.add_dependency(%q<nanaimo>.freeze, ["~> 0.4.0"]) + s.add_dependency(%q<rexml>.freeze, [">= 3.3.6", "< 4.0"]) + end +end diff --git a/package-lock.json b/package-lock.json index f5c0497..1c929c7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -83,7 +83,8 @@ "@types/react-native": "^0.72.8", "babel-plugin-transform-remove-console": "^6.9.4", "react-native-svg-transformer": "^1.5.0", - "typescript": "^5.3.3" + "typescript": "^5.3.3", + "xcode": "^3.0.1" } }, "node_modules/@0no-co/graphql.web": { diff --git a/package.json b/package.json index fcf5d9f..b0c2782 100644 --- a/package.json +++ b/package.json @@ -83,7 +83,8 @@ "@types/react-native": "^0.72.8", "babel-plugin-transform-remove-console": "^6.9.4", "react-native-svg-transformer": "^1.5.0", - "typescript": "^5.3.3" + "typescript": "^5.3.3", + "xcode": "^3.0.1" }, "private": true } diff --git a/src/components/player/KSPlayer.tsx b/src/components/player/KSPlayer.tsx new file mode 100644 index 0000000..625ce2a --- /dev/null +++ b/src/components/player/KSPlayer.tsx @@ -0,0 +1,137 @@ +import React, { useRef, useImperativeHandle, forwardRef, useEffect, useState } from 'react'; +import { View, requireNativeComponent, UIManager, findNodeHandle, NativeModules } from 'react-native'; + +export interface KSPlayerSource { + uri: string; + headers?: Record<string, string>; +} + +interface KSPlayerViewProps { + source?: KSPlayerSource; + paused?: boolean; + volume?: number; + audioTrack?: number; + textTrack?: number; + onLoad?: (data: any) => void; + onProgress?: (data: any) => void; + onBuffering?: (data: any) => void; + onEnd?: () => void; + onError?: (error: any) => void; + onBufferingProgress?: (data: any) => void; + style?: any; +} + +const KSPlayerViewManager = requireNativeComponent<KSPlayerViewProps>('KSPlayerView'); +const KSPlayerModule = NativeModules.KSPlayerModule; + +export interface KSPlayerRef { + seek: (time: number) => void; + setSource: (source: KSPlayerSource) => void; + setPaused: (paused: boolean) => void; + setVolume: (volume: number) => void; + setAudioTrack: (trackId: number) => void; + setTextTrack: (trackId: number) => void; +} + +export interface KSPlayerProps { + source?: KSPlayerSource; + paused?: boolean; + volume?: number; + audioTrack?: number; + textTrack?: number; + onLoad?: (data: any) => void; + onProgress?: (data: any) => void; + onBuffering?: (data: any) => void; + onEnd?: () => void; + onError?: (error: any) => void; + onBufferingProgress?: (data: any) => void; + style?: any; +} + +const KSPlayer = forwardRef<KSPlayerRef, KSPlayerProps>((props, ref) => { + const nativeRef = useRef<any>(null); + const [key, setKey] = useState(0); // Force re-render when source changes + + useImperativeHandle(ref, () => ({ + seek: (time: number) => { + if (nativeRef.current) { + const node = findNodeHandle(nativeRef.current); + // @ts-ignore legacy UIManager commands path for Paper + const commandId = UIManager.getViewManagerConfig('KSPlayerView').Commands.seek; + UIManager.dispatchViewManagerCommand(node, commandId, [time]); + } + }, + setSource: (source: KSPlayerSource) => { + if (nativeRef.current) { + const node = findNodeHandle(nativeRef.current); + // @ts-ignore legacy UIManager commands path for Paper + const commandId = UIManager.getViewManagerConfig('KSPlayerView').Commands.setSource; + UIManager.dispatchViewManagerCommand(node, commandId, [source]); + } + }, + setPaused: (paused: boolean) => { + if (nativeRef.current) { + const node = findNodeHandle(nativeRef.current); + // @ts-ignore legacy UIManager commands path for Paper + const commandId = UIManager.getViewManagerConfig('KSPlayerView').Commands.setPaused; + UIManager.dispatchViewManagerCommand(node, commandId, [paused]); + } + }, + setVolume: (volume: number) => { + if (nativeRef.current) { + const node = findNodeHandle(nativeRef.current); + // @ts-ignore legacy UIManager commands path for Paper + const commandId = UIManager.getViewManagerConfig('KSPlayerView').Commands.setVolume; + UIManager.dispatchViewManagerCommand(node, commandId, [volume]); + } + }, + setAudioTrack: (trackId: number) => { + if (nativeRef.current) { + const node = findNodeHandle(nativeRef.current); + // @ts-ignore legacy UIManager commands path for Paper + const commandId = UIManager.getViewManagerConfig('KSPlayerView').Commands.setAudioTrack; + UIManager.dispatchViewManagerCommand(node, commandId, [trackId]); + } + }, + setTextTrack: (trackId: number) => { + if (nativeRef.current) { + const node = findNodeHandle(nativeRef.current); + // @ts-ignore legacy UIManager commands path for Paper + const commandId = UIManager.getViewManagerConfig('KSPlayerView').Commands.setTextTrack; + UIManager.dispatchViewManagerCommand(node, commandId, [trackId]); + } + }, + })); + + // No need for event listeners - events are handled through props + + // Force re-render when source changes to ensure proper reloading + useEffect(() => { + if (props.source) { + setKey(prev => prev + 1); + } + }, [props.source?.uri]); + + return ( + <KSPlayerViewManager + key={key} + ref={nativeRef} + source={props.source} + paused={props.paused} + volume={props.volume} + audioTrack={props.audioTrack} + textTrack={props.textTrack} + onLoad={props.onLoad} + onProgress={props.onProgress} + onBuffering={props.onBuffering} + onEnd={props.onEnd} + onError={props.onError} + onBufferingProgress={props.onBufferingProgress} + style={props.style} + /> + ); +}); + +KSPlayer.displayName = 'KSPlayer'; + +export default KSPlayer; diff --git a/src/components/player/VideoPlayer.tsx b/src/components/player/VideoPlayer.tsx index 123adaa..08043e9 100644 --- a/src/components/player/VideoPlayer.tsx +++ b/src/components/player/VideoPlayer.tsx @@ -1,7 +1,6 @@ import React, { useState, useRef, useEffect, useMemo, useCallback } from 'react'; import { View, TouchableOpacity, Dimensions, Animated, ActivityIndicator, Platform, NativeModules, StatusBar, Text, Image, StyleSheet, Modal, AppState } from 'react-native'; import { useSafeAreaInsets } from 'react-native-safe-area-context'; -import { VLCPlayer } from 'react-native-vlc-media-player'; import { useNavigation, useRoute, RouteProp, useFocusEffect } from '@react-navigation/native'; import { RootStackParamList, RootStackNavigationProp } from '../../navigation/AppNavigator'; import { PinchGestureHandler, PanGestureHandler, TapGestureHandler, State, PinchGestureHandlerGestureEvent, PanGestureHandlerGestureEvent, TapGestureHandlerGestureEvent } from 'react-native-gesture-handler'; @@ -14,6 +13,7 @@ import { MaterialIcons } from '@expo/vector-icons'; import { LinearGradient } from 'expo-linear-gradient'; import Slider from '@react-native-community/slider'; import AndroidVideoPlayer from './AndroidVideoPlayer'; +import KSPlayer, { KSPlayerRef, KSPlayerSource } from './KSPlayer'; import { useTraktAutosync } from '../../hooks/useTraktAutosync'; import { useTraktAutosyncSettings } from '../../hooks/useTraktAutosyncSettings'; import { useMetadata } from '../../hooks/useMetadata'; @@ -51,20 +51,16 @@ const VideoPlayer: React.FC = () => { // Detect if stream is MKV format const isMkvFile = isMkvStream(uri, headers); - // Use AndroidVideoPlayer for: - // - Android devices - // - Non-MKV files on iOS (unless forceVlc is set) - // Use VideoPlayer (VLC) for: - // - MKV files on iOS (unless forceVlc is set) - const shouldUseAndroidPlayer = Platform.OS === 'android' || - (Platform.OS === 'ios' && !isMkvFile && !forceVlc); + // Use AndroidVideoPlayer for Android devices + // Use KSPlayer for iOS devices + const shouldUseAndroidPlayer = Platform.OS === 'android'; safeDebugLog("Player selection logic", { platform: Platform.OS, isMkvFile, - forceVlc, shouldUseAndroidPlayer }); + if (shouldUseAndroidPlayer) { return <AndroidVideoPlayer />; } @@ -132,7 +128,7 @@ const VideoPlayer: React.FC = () => { const [resizeMode, setResizeMode] = useState<ResizeModeType>('stretch'); const [buffered, setBuffered] = useState(0); const [seekPosition, setSeekPosition] = useState<number | null>(null); - const vlcRef = useRef<any>(null); + const ksPlayerRef = useRef<KSPlayerRef>(null); const [showAudioModal, setShowAudioModal] = useState(false); const [showSubtitleModal, setShowSubtitleModal] = useState(false); const [initialPosition, setInitialPosition] = useState<number | null>(null); @@ -784,51 +780,27 @@ const VideoPlayer: React.FC = () => { const seekToTime = (rawSeconds: number) => { // Clamp to just before the end to avoid triggering onEnd. const timeInSeconds = Math.max(0, Math.min(rawSeconds, duration > 0 ? duration - END_EPSILON : rawSeconds)); - if (vlcRef.current && duration > 0 && !isSeeking.current) { + if (ksPlayerRef.current && duration > 0 && !isSeeking.current) { if (DEBUG_MODE) { if (__DEV__) logger.log(`[VideoPlayer] Seeking to ${timeInSeconds.toFixed(2)}s out of ${duration.toFixed(2)}s`); } isSeeking.current = true; - // For Android, use direct seeking on VLC player ref instead of seek prop - if (Platform.OS === 'android' && vlcRef.current.seek) { - // Calculate position as fraction - const position = timeInSeconds / duration; - vlcRef.current.seek(position); - // Clear seek state after Android seek - setTimeout(() => { - if (isMounted.current) { - isSeeking.current = false; - if (DEBUG_MODE) { - logger.log(`[VideoPlayer] Android seek completed to ${timeInSeconds.toFixed(2)}s`); - } - } - }, 500); - } else { - // iOS (and other platforms) – prefer direct seek on the ref to avoid re-mounts caused by the `seek` prop - const position = timeInSeconds / duration; // VLC expects a 0-1 fraction - if (vlcRef.current && typeof vlcRef.current.seek === 'function') { - vlcRef.current.seek(position); - } else { - // Fallback to legacy behaviour only if direct seek is unavailable - setSeekPosition(position); - } + // KSPlayer uses direct time seeking + ksPlayerRef.current.seek(timeInSeconds); - setTimeout(() => { - if (isMounted.current) { - // Reset temporary seek state - setSeekPosition(null); - isSeeking.current = false; - if (DEBUG_MODE) { - logger.log(`[VideoPlayer] iOS seek completed to ${timeInSeconds.toFixed(2)}s`); - } + setTimeout(() => { + if (isMounted.current) { + isSeeking.current = false; + if (DEBUG_MODE) { + logger.log(`[VideoPlayer] KSPlayer seek completed to ${timeInSeconds.toFixed(2)}s`); } - }, 500); - } + } + }, 500); } else { if (DEBUG_MODE) { - logger.error(`[VideoPlayer] Seek failed: vlcRef=${!!vlcRef.current}, duration=${duration}, seeking=${isSeeking.current}`); + logger.error(`[VideoPlayer] Seek failed: ksPlayerRef=${!!ksPlayerRef.current}, duration=${duration}, seeking=${isSeeking.current}`); } } }; @@ -882,13 +854,14 @@ const VideoPlayer: React.FC = () => { const handleProgress = (event: any) => { if (isDragging || isSeeking.current) return; - const currentTimeInSeconds = event.currentTime / 1000; + // KSPlayer returns times in seconds directly + const currentTimeInSeconds = event.currentTime; // Only update if there's a significant change to avoid unnecessary updates if (Math.abs(currentTimeInSeconds - currentTime) > 0.5) { safeSetState(() => setCurrentTime(currentTimeInSeconds)); - // Removed progressAnim animation - no longer needed with React Native Community Slider - const bufferedTime = event.bufferTime / 1000 || currentTimeInSeconds; + // KSPlayer returns bufferTime in seconds + const bufferedTime = event.bufferTime || currentTimeInSeconds; safeSetState(() => setBuffered(bufferedTime)); } @@ -954,8 +927,9 @@ const VideoPlayer: React.FC = () => { logger.error('[VideoPlayer] onLoad called with null/undefined data'); return; } - const videoDuration = data.duration / 1000; - if (data.duration > 0) { + // KSPlayer returns duration in seconds directly + const videoDuration = data.duration; + if (videoDuration > 0) { setDuration(videoDuration); // Store the actual duration for future reference and update existing progress @@ -969,13 +943,14 @@ const VideoPlayer: React.FC = () => { } } } - // Set aspect ratio with null check for videoSize - if (data.videoSize && data.videoSize.width && data.videoSize.height) { - setVideoAspectRatio(data.videoSize.width / data.videoSize.height); + + // Set aspect ratio from naturalSize (KSPlayer format) + if (data.naturalSize && data.naturalSize.width && data.naturalSize.height) { + setVideoAspectRatio(data.naturalSize.width / data.naturalSize.height); } else { - // Fallback to 16:9 aspect ratio if videoSize is not available + // Fallback to 16:9 aspect ratio if naturalSize is not available setVideoAspectRatio(16 / 9); - logger.warn('[VideoPlayer] videoSize not available, using default 16:9 aspect ratio'); + logger.warn('[VideoPlayer] naturalSize not available, using default 16:9 aspect ratio'); } if (data.audioTracks && data.audioTracks.length > 0) { @@ -2551,31 +2526,22 @@ const VideoPlayer: React.FC = () => { onLongPress={resetZoom} delayLongPress={300} > - <VLCPlayer - ref={vlcRef} + <KSPlayer + ref={ksPlayerRef} style={[styles.video, customVideoStyles, { transform: [{ scale: zoomScale }] }]} - source={(() => { - // Use route headers for VLC streams - const sourceWithHeaders = headers && Object.keys(headers).length > 0 ? { - uri: currentStreamUrl, - headers: headers - } : { uri: currentStreamUrl }; - - return sourceWithHeaders; - })()} + source={{ + uri: currentStreamUrl, + headers: headers && Object.keys(headers).length > 0 ? headers : undefined + }} paused={paused} + volume={volume / 100} + audioTrack={selectedAudioTrack} + textTrack={useCustomSubtitles ? -1 : selectedTextTrack} onProgress={handleProgress} onLoad={onLoad} onEnd={onEnd} onError={handleError} onBuffering={onBuffering} - onPlaying={onPlaying} - onPaused={onPaused} - resizeMode={resizeMode as any} - audioTrack={selectedAudioTrack ?? undefined} - textTrack={useCustomSubtitles ? -1 : (selectedTextTrack >= 0 ? selectedTextTrack : -1)} - autoAspectRatio - volume={volume / 100} /> </TouchableOpacity> </View> @@ -2596,7 +2562,7 @@ const VideoPlayer: React.FC = () => { currentTime={currentTime} duration={duration} zoomScale={zoomScale} - vlcAudioTracks={vlcAudioTracks} + vlcAudioTracks={[]} // TODO: Update with KSPlayer tracks selectedAudioTrack={selectedAudioTrack} availableStreams={availableStreams} togglePlayback={togglePlayback}

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 F{u^hr6^sA? literal 0 HcmV?d00001 diff --git a/ios/Nuvio/Images.xcassets/AppIcon.appiconset/Contents.json b/ios/Nuvio/Images.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..90d8d4c --- /dev/null +++ b/ios/Nuvio/Images.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,14 @@ +{ + "images": [ + { + "filename": "App-Icon-1024x1024@1x.png", + "idiom": "universal", + "platform": "ios", + "size": "1024x1024" + } + ], + "info": { + "version": 1, + "author": "expo" + } +} \ No newline at end of file diff --git a/ios/Nuvio/Images.xcassets/Contents.json b/ios/Nuvio/Images.xcassets/Contents.json new file mode 100644 index 0000000..ed285c2 --- /dev/null +++ b/ios/Nuvio/Images.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "version" : 1, + "author" : "expo" + } +} diff --git a/ios/Nuvio/Images.xcassets/SplashScreenBackground.colorset/Contents.json b/ios/Nuvio/Images.xcassets/SplashScreenBackground.colorset/Contents.json new file mode 100644 index 0000000..dba1090 --- /dev/null +++ b/ios/Nuvio/Images.xcassets/SplashScreenBackground.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "colors": [ + { + "color": { + "components": { + "alpha": "1.000", + "blue": "0.0156862745098039", + "green": "0.0156862745098039", + "red": "0.00784313725490196" + }, + "color-space": "srgb" + }, + "idiom": "universal" + } + ], + "info": { + "version": 1, + "author": "expo" + } +} \ No newline at end of file diff --git a/ios/Nuvio/Images.xcassets/SplashScreenLogo.imageset/Contents.json b/ios/Nuvio/Images.xcassets/SplashScreenLogo.imageset/Contents.json new file mode 100644 index 0000000..f65c008 --- /dev/null +++ b/ios/Nuvio/Images.xcassets/SplashScreenLogo.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images": [ + { + "idiom": "universal", + "filename": "image.png", + "scale": "1x" + }, + { + "idiom": "universal", + "filename": "image@2x.png", + "scale": "2x" + }, + { + "idiom": "universal", + "filename": "image@3x.png", + "scale": "3x" + } + ], + "info": { + "version": 1, + "author": "expo" + } +} \ No newline at end of file diff --git a/ios/Nuvio/Images.xcassets/SplashScreenLogo.imageset/image.png b/ios/Nuvio/Images.xcassets/SplashScreenLogo.imageset/image.png new file mode 100644 index 0000000000000000000000000000000000000000..efcdf22ab650f5b21783aad81ec3f8b7e1204478 GIT binary patch literal 269134 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