herb 0.10.3-x86-linux-gnu → 0.11.0-x86-linux-gnu
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Makefile +16 -6
- data/README.md +36 -119
- data/Rakefile +2 -11
- data/config/action_view_helpers/actioncable/action_cable_helper/action_cable_meta_tag.yml +12 -8
- data/config/action_view_helpers/actionpack/content_security_policy/content_security_policy?.yml +9 -6
- data/config/action_view_helpers/actionpack/content_security_policy/content_security_policy_nonce.yml +9 -6
- data/config/action_view_helpers/actionpack/polymorphic_routes/polymorphic_path.yml +20 -12
- data/config/action_view_helpers/actionpack/polymorphic_routes/polymorphic_url.yml +30 -18
- data/config/action_view_helpers/actionpack/request_forgery_protection/form_authenticity_token.yml +15 -9
- data/config/action_view_helpers/actionpack/request_forgery_protection/protect_against_forgery?.yml +9 -6
- data/config/action_view_helpers/actiontext/content_helper/render_action_text_content.yml +15 -9
- data/config/action_view_helpers/actiontext/content_helper/sanitize_action_text_content.yml +15 -9
- data/config/action_view_helpers/actiontext/tag_helper/rich_textarea_tag.yml +34 -22
- data/config/action_view_helpers/actionview/active_model_helper/error_message.yml +9 -6
- data/config/action_view_helpers/actionview/active_model_helper/error_wrapping.yml +9 -6
- data/config/action_view_helpers/actionview/active_model_helper/object.yml +9 -6
- data/config/action_view_helpers/actionview/asset_tag_helper/apply_stylesheet_media_default.yml +9 -6
- data/config/action_view_helpers/actionview/asset_tag_helper/audio_tag.yml +40 -27
- data/config/action_view_helpers/actionview/asset_tag_helper/auto_discovery_link_tag.yml +37 -23
- data/config/action_view_helpers/actionview/asset_tag_helper/auto_include_nonce.yml +9 -6
- data/config/action_view_helpers/actionview/asset_tag_helper/auto_include_nonce_for_scripts.yml +9 -6
- data/config/action_view_helpers/actionview/asset_tag_helper/auto_include_nonce_for_styles.yml +9 -6
- data/config/action_view_helpers/actionview/asset_tag_helper/favicon_link_tag.yml +32 -22
- data/config/action_view_helpers/actionview/asset_tag_helper/image_decoding.yml +9 -6
- data/config/action_view_helpers/actionview/asset_tag_helper/image_loading.yml +9 -6
- data/config/action_view_helpers/actionview/asset_tag_helper/image_tag.yml +67 -46
- data/config/action_view_helpers/actionview/asset_tag_helper/javascript_include_tag.yml +58 -39
- data/config/action_view_helpers/actionview/asset_tag_helper/picture_tag.yml +22 -14
- data/config/action_view_helpers/actionview/asset_tag_helper/preload_link_tag.yml +45 -30
- data/config/action_view_helpers/actionview/asset_tag_helper/preload_links_header.yml +9 -6
- data/config/action_view_helpers/actionview/asset_tag_helper/stylesheet_link_tag.yml +49 -30
- data/config/action_view_helpers/actionview/asset_tag_helper/video_tag.yml +53 -35
- data/config/action_view_helpers/actionview/asset_url_helper/asset_path.yml +16 -10
- data/config/action_view_helpers/actionview/asset_url_helper/asset_url.yml +16 -10
- data/config/action_view_helpers/actionview/asset_url_helper/audio_path.yml +16 -10
- data/config/action_view_helpers/actionview/asset_url_helper/audio_url.yml +16 -10
- data/config/action_view_helpers/actionview/asset_url_helper/compute_asset_extname.yml +9 -6
- data/config/action_view_helpers/actionview/asset_url_helper/compute_asset_host.yml +9 -6
- data/config/action_view_helpers/actionview/asset_url_helper/compute_asset_path.yml +9 -6
- data/config/action_view_helpers/actionview/asset_url_helper/font_path.yml +16 -10
- data/config/action_view_helpers/actionview/asset_url_helper/font_url.yml +16 -10
- data/config/action_view_helpers/actionview/asset_url_helper/image_path.yml +16 -10
- data/config/action_view_helpers/actionview/asset_url_helper/image_url.yml +16 -10
- data/config/action_view_helpers/actionview/asset_url_helper/javascript_path.yml +16 -10
- data/config/action_view_helpers/actionview/asset_url_helper/javascript_url.yml +16 -10
- data/config/action_view_helpers/actionview/asset_url_helper/public_compute_asset_path.yml +9 -6
- data/config/action_view_helpers/actionview/asset_url_helper/stylesheet_path.yml +16 -10
- data/config/action_view_helpers/actionview/asset_url_helper/stylesheet_url.yml +16 -10
- data/config/action_view_helpers/actionview/asset_url_helper/video_path.yml +16 -10
- data/config/action_view_helpers/actionview/asset_url_helper/video_url.yml +16 -10
- data/config/action_view_helpers/actionview/atom_feed_helper/atom_feed.yml +52 -27
- data/config/action_view_helpers/actionview/cache_helper/cache.yml +25 -15
- data/config/action_view_helpers/actionview/cache_helper/cache_fragment_name.yml +9 -6
- data/config/action_view_helpers/actionview/cache_helper/cache_if.yml +20 -12
- data/config/action_view_helpers/actionview/cache_helper/cache_unless.yml +20 -12
- data/config/action_view_helpers/actionview/cache_helper/caching_predicate.yml +9 -6
- data/config/action_view_helpers/actionview/cache_helper/digest_path_from_template.yml +9 -6
- data/config/action_view_helpers/actionview/cache_helper/fragment_for.yml +9 -6
- data/config/action_view_helpers/actionview/cache_helper/fragment_name_with_digest.yml +9 -6
- data/config/action_view_helpers/actionview/cache_helper/read_fragment_for.yml +9 -6
- data/config/action_view_helpers/actionview/cache_helper/uncacheable.yml +9 -6
- data/config/action_view_helpers/actionview/cache_helper/write_fragment_for.yml +9 -6
- data/config/action_view_helpers/actionview/capture_helper/capture.yml +9 -6
- data/config/action_view_helpers/actionview/capture_helper/content_for.yml +20 -12
- data/config/action_view_helpers/actionview/capture_helper/content_for_predicate.yml +15 -9
- data/config/action_view_helpers/actionview/capture_helper/provide.yml +15 -9
- data/config/action_view_helpers/actionview/capture_helper/with_output_buffer.yml +9 -6
- data/config/action_view_helpers/actionview/content_exfiltration_prevention_helper/prepend_content_exfiltration_prevention.yml +9 -6
- data/config/action_view_helpers/actionview/content_exfiltration_prevention_helper/prevent_content_exfiltration.yml +9 -6
- data/config/action_view_helpers/actionview/controller_helper/action_name.yml +9 -6
- data/config/action_view_helpers/actionview/controller_helper/assign_controller.yml +9 -6
- data/config/action_view_helpers/actionview/controller_helper/controller.yml +9 -6
- data/config/action_view_helpers/actionview/controller_helper/controller_name.yml +9 -6
- data/config/action_view_helpers/actionview/controller_helper/controller_path.yml +9 -6
- data/config/action_view_helpers/actionview/controller_helper/cookies.yml +9 -6
- data/config/action_view_helpers/actionview/controller_helper/flash.yml +9 -6
- data/config/action_view_helpers/actionview/controller_helper/headers.yml +9 -6
- data/config/action_view_helpers/actionview/controller_helper/logger.yml +9 -6
- data/config/action_view_helpers/actionview/controller_helper/params.yml +9 -6
- data/config/action_view_helpers/actionview/controller_helper/request.yml +9 -6
- data/config/action_view_helpers/actionview/controller_helper/request_forgery_protection_token.yml +9 -6
- data/config/action_view_helpers/actionview/controller_helper/response.yml +9 -6
- data/config/action_view_helpers/actionview/controller_helper/session.yml +9 -6
- data/config/action_view_helpers/actionview/csp_helper/csp_meta_tag.yml +18 -11
- data/config/action_view_helpers/actionview/csrf_helper/csrf_meta_tags.yml +16 -10
- data/config/action_view_helpers/actionview/date_helper/date_select.yml +85 -51
- data/config/action_view_helpers/actionview/date_helper/datetime_select.yml +65 -39
- data/config/action_view_helpers/actionview/date_helper/distance_of_time_in_words.yml +30 -18
- data/config/action_view_helpers/actionview/date_helper/relative_time_in_words.yml +35 -21
- data/config/action_view_helpers/actionview/date_helper/select_date.yml +50 -30
- data/config/action_view_helpers/actionview/date_helper/select_datetime.yml +65 -39
- data/config/action_view_helpers/actionview/date_helper/select_day.yml +40 -24
- data/config/action_view_helpers/actionview/date_helper/select_hour.yml +50 -30
- data/config/action_view_helpers/actionview/date_helper/select_minute.yml +40 -24
- data/config/action_view_helpers/actionview/date_helper/select_month.yml +60 -36
- data/config/action_view_helpers/actionview/date_helper/select_second.yml +35 -21
- data/config/action_view_helpers/actionview/date_helper/select_time.yml +55 -33
- data/config/action_view_helpers/actionview/date_helper/select_year.yml +45 -27
- data/config/action_view_helpers/actionview/date_helper/time_ago_in_words.yml +21 -13
- data/config/action_view_helpers/actionview/date_helper/time_select.yml +60 -36
- data/config/action_view_helpers/actionview/date_helper/time_tag.yml +32 -20
- data/config/action_view_helpers/actionview/debug_helper/debug.yml +15 -9
- data/config/action_view_helpers/actionview/form_builder/button.yml +60 -0
- data/config/action_view_helpers/actionview/form_builder/submit.yml +48 -0
- data/config/action_view_helpers/actionview/form_helper/apply_form_for_options.yml +9 -6
- data/config/action_view_helpers/actionview/form_helper/checkbox.yml +41 -25
- data/config/action_view_helpers/actionview/form_helper/color_field.yml +25 -15
- data/config/action_view_helpers/actionview/form_helper/date_field.yml +35 -21
- data/config/action_view_helpers/actionview/form_helper/datetime_field.yml +41 -25
- data/config/action_view_helpers/actionview/form_helper/email_field.yml +25 -15
- data/config/action_view_helpers/actionview/form_helper/emitted_hidden_id.yml +9 -6
- data/config/action_view_helpers/actionview/form_helper/fields.yml +37 -18
- data/config/action_view_helpers/actionview/form_helper/fields_for.yml +33 -15
- data/config/action_view_helpers/actionview/form_helper/file_field.yml +45 -27
- data/config/action_view_helpers/actionview/form_helper/form_for.yml +45 -24
- data/config/action_view_helpers/actionview/form_helper/form_with.yml +56 -30
- data/config/action_view_helpers/actionview/form_helper/form_with_generates_ids.yml +9 -6
- data/config/action_view_helpers/actionview/form_helper/form_with_generates_remote_forms.yml +9 -6
- data/config/action_view_helpers/actionview/form_helper/hidden_field.yml +25 -15
- data/config/action_view_helpers/actionview/form_helper/label.yml +52 -27
- data/config/action_view_helpers/actionview/form_helper/month_field.yml +25 -15
- data/config/action_view_helpers/actionview/form_helper/multipart.yml +9 -6
- data/config/action_view_helpers/actionview/form_helper/multiple_file_field_include_hidden.yml +9 -6
- data/config/action_view_helpers/actionview/form_helper/number_field.yml +45 -27
- data/config/action_view_helpers/actionview/form_helper/password_field.yml +25 -15
- data/config/action_view_helpers/actionview/form_helper/radio_button.yml +30 -18
- data/config/action_view_helpers/actionview/form_helper/range_field.yml +45 -27
- data/config/action_view_helpers/actionview/form_helper/search_field.yml +25 -15
- data/config/action_view_helpers/actionview/form_helper/telephone_field.yml +26 -16
- data/config/action_view_helpers/actionview/form_helper/text_field.yml +25 -15
- data/config/action_view_helpers/actionview/form_helper/textarea.yml +31 -19
- data/config/action_view_helpers/actionview/form_helper/time_field.yml +40 -24
- data/config/action_view_helpers/actionview/form_helper/url_field.yml +25 -15
- data/config/action_view_helpers/actionview/form_helper/week_field.yml +25 -15
- data/config/action_view_helpers/actionview/form_options_helper/collection_checkboxes.yml +58 -31
- data/config/action_view_helpers/actionview/form_options_helper/collection_radio_buttons.yml +57 -30
- data/config/action_view_helpers/actionview/form_options_helper/collection_select.yml +65 -39
- data/config/action_view_helpers/actionview/form_options_helper/grouped_collection_select.yml +65 -39
- data/config/action_view_helpers/actionview/form_options_helper/grouped_options_for_select.yml +35 -21
- data/config/action_view_helpers/actionview/form_options_helper/option_groups_from_collection_for_select.yml +40 -24
- data/config/action_view_helpers/actionview/form_options_helper/options_for_select.yml +20 -12
- data/config/action_view_helpers/actionview/form_options_helper/options_from_collection_for_select.yml +30 -18
- data/config/action_view_helpers/actionview/form_options_helper/select.yml +60 -36
- data/config/action_view_helpers/actionview/form_options_helper/time_zone_options_for_select.yml +25 -15
- data/config/action_view_helpers/actionview/form_options_helper/time_zone_select.yml +50 -30
- data/config/action_view_helpers/actionview/form_options_helper/weekday_options_for_select.yml +30 -18
- data/config/action_view_helpers/actionview/form_options_helper/weekday_select.yml +30 -18
- data/config/action_view_helpers/actionview/form_tag_helper/button_tag.yml +39 -21
- data/config/action_view_helpers/actionview/form_tag_helper/checkbox_tag.yml +33 -21
- data/config/action_view_helpers/actionview/form_tag_helper/color_field_tag.yml +26 -17
- data/config/action_view_helpers/actionview/form_tag_helper/date_field_tag.yml +27 -17
- data/config/action_view_helpers/actionview/form_tag_helper/datetime_field_tag.yml +28 -18
- data/config/action_view_helpers/actionview/form_tag_helper/default_enforce_utf8.yml +9 -6
- data/config/action_view_helpers/actionview/form_tag_helper/email_field_tag.yml +27 -17
- data/config/action_view_helpers/actionview/form_tag_helper/embed_authenticity_token_in_remote_forms.yml +9 -6
- data/config/action_view_helpers/actionview/form_tag_helper/field_id.yml +30 -18
- data/config/action_view_helpers/actionview/form_tag_helper/field_name.yml +30 -18
- data/config/action_view_helpers/actionview/form_tag_helper/field_set_tag.yml +23 -15
- data/config/action_view_helpers/actionview/form_tag_helper/file_field_tag.yml +35 -22
- data/config/action_view_helpers/actionview/form_tag_helper/form_tag.yml +38 -24
- data/config/action_view_helpers/actionview/form_tag_helper/hidden_field_tag.yml +27 -17
- data/config/action_view_helpers/actionview/form_tag_helper/image_submit_tag.yml +31 -21
- data/config/action_view_helpers/actionview/form_tag_helper/label_tag.yml +33 -17
- data/config/action_view_helpers/actionview/form_tag_helper/month_field_tag.yml +27 -17
- data/config/action_view_helpers/actionview/form_tag_helper/number_field_tag.yml +47 -29
- data/config/action_view_helpers/actionview/form_tag_helper/password_field_tag.yml +27 -17
- data/config/action_view_helpers/actionview/form_tag_helper/radio_button_tag.yml +32 -20
- data/config/action_view_helpers/actionview/form_tag_helper/range_field_tag.yml +47 -29
- data/config/action_view_helpers/actionview/form_tag_helper/search_field_tag.yml +27 -17
- data/config/action_view_helpers/actionview/form_tag_helper/select_tag.yml +47 -29
- data/config/action_view_helpers/actionview/form_tag_helper/submit_tag.yml +33 -21
- data/config/action_view_helpers/actionview/form_tag_helper/telephone_field_tag.yml +28 -18
- data/config/action_view_helpers/actionview/form_tag_helper/text_field_tag.yml +27 -17
- data/config/action_view_helpers/actionview/form_tag_helper/textarea_tag.yml +31 -20
- data/config/action_view_helpers/actionview/form_tag_helper/time_field_tag.yml +27 -17
- data/config/action_view_helpers/actionview/form_tag_helper/url_field_tag.yml +27 -17
- data/config/action_view_helpers/actionview/form_tag_helper/utf8_enforcer_tag.yml +9 -6
- data/config/action_view_helpers/actionview/form_tag_helper/week_field_tag.yml +28 -18
- data/config/action_view_helpers/actionview/javascript_helper/escape_javascript.yml +16 -10
- data/config/action_view_helpers/actionview/javascript_helper/javascript_cdata_section.yml +9 -6
- data/config/action_view_helpers/actionview/javascript_helper/javascript_tag.yml +41 -27
- data/config/action_view_helpers/actionview/number_helper/number_to_currency.yml +29 -18
- data/config/action_view_helpers/actionview/number_helper/number_to_human.yml +25 -15
- data/config/action_view_helpers/actionview/number_helper/number_to_human_size.yml +20 -12
- data/config/action_view_helpers/actionview/number_helper/number_to_percentage.yml +20 -12
- data/config/action_view_helpers/actionview/number_helper/number_to_phone.yml +33 -20
- data/config/action_view_helpers/actionview/number_helper/number_with_delimiter.yml +21 -13
- data/config/action_view_helpers/actionview/number_helper/number_with_precision.yml +25 -15
- data/config/action_view_helpers/actionview/output_safety_helper/raw.yml +15 -9
- data/config/action_view_helpers/actionview/output_safety_helper/safe_join.yml +20 -12
- data/config/action_view_helpers/actionview/output_safety_helper/to_sentence.yml +24 -15
- data/config/action_view_helpers/actionview/record_identifier/dom_class.yml +20 -12
- data/config/action_view_helpers/actionview/record_identifier/dom_id.yml +20 -12
- data/config/action_view_helpers/actionview/record_identifier/dom_target.yml +15 -9
- data/config/action_view_helpers/actionview/record_identifier/model_name_from_record_or_class.yml +9 -6
- data/config/action_view_helpers/actionview/rendering_helper/render.yml +108 -22
- data/config/action_view_helpers/actionview/sanitize_helper/sanitize.yml +25 -15
- data/config/action_view_helpers/actionview/sanitize_helper/sanitize_css.yml +15 -9
- data/config/action_view_helpers/actionview/sanitize_helper/sanitizer_vendor.yml +9 -6
- data/config/action_view_helpers/actionview/sanitize_helper/strip_links.yml +15 -9
- data/config/action_view_helpers/actionview/sanitize_helper/strip_tags.yml +15 -9
- data/config/action_view_helpers/actionview/tag_helper/cdata_section.yml +15 -9
- data/config/action_view_helpers/actionview/tag_helper/content_tag.yml +59 -38
- data/config/action_view_helpers/actionview/tag_helper/escape_once.yml +15 -9
- data/config/action_view_helpers/actionview/tag_helper/tag.yml +54 -31
- data/config/action_view_helpers/actionview/tag_helper/token_list.yml +16 -10
- data/config/action_view_helpers/actionview/text_helper/concat.yml +15 -9
- data/config/action_view_helpers/actionview/text_helper/current_cycle.yml +15 -9
- data/config/action_view_helpers/actionview/text_helper/cycle.yml +23 -14
- data/config/action_view_helpers/actionview/text_helper/excerpt.yml +33 -20
- data/config/action_view_helpers/actionview/text_helper/highlight.yml +37 -18
- data/config/action_view_helpers/actionview/text_helper/pluralize.yml +30 -18
- data/config/action_view_helpers/actionview/text_helper/reset_cycle.yml +15 -9
- data/config/action_view_helpers/actionview/text_helper/safe_concat.yml +9 -6
- data/config/action_view_helpers/actionview/text_helper/simple_format.yml +33 -20
- data/config/action_view_helpers/actionview/text_helper/truncate.yml +38 -23
- data/config/action_view_helpers/actionview/text_helper/word_wrap.yml +25 -15
- data/config/action_view_helpers/actionview/translation_helper/debug_missing_translation.yml +9 -6
- data/config/action_view_helpers/actionview/translation_helper/localize.yml +26 -16
- data/config/action_view_helpers/actionview/translation_helper/translate.yml +31 -19
- data/config/action_view_helpers/actionview/url_helper/button_to.yml +57 -33
- data/config/action_view_helpers/actionview/url_helper/button_to_generates_button_tag.yml +9 -6
- data/config/action_view_helpers/actionview/url_helper/current_page?.yml +25 -15
- data/config/action_view_helpers/actionview/url_helper/link_to.yml +76 -53
- data/config/action_view_helpers/actionview/url_helper/link_to_if.yml +54 -20
- data/config/action_view_helpers/actionview/url_helper/link_to_unless.yml +54 -20
- data/config/action_view_helpers/actionview/url_helper/link_to_unless_current.yml +49 -17
- data/config/action_view_helpers/actionview/url_helper/mail_to.yml +60 -34
- data/config/action_view_helpers/actionview/url_helper/phone_to.yml +40 -22
- data/config/action_view_helpers/actionview/url_helper/sms_to.yml +45 -25
- data/config/action_view_helpers/actionview/url_helper/url_for.yml +15 -9
- data/config/action_view_helpers/importmap-rails/importmap_tags_helper/javascript_import_module_tag.yml +32 -0
- data/config/action_view_helpers/importmap-rails/importmap_tags_helper/javascript_importmap_module_preload_tags.yml +39 -0
- data/config/action_view_helpers/importmap-rails/importmap_tags_helper/javascript_importmap_tags.yml +35 -0
- data/config/action_view_helpers/importmap-rails/importmap_tags_helper/javascript_inline_importmap_tag.yml +32 -0
- data/config/action_view_helpers/importmap-rails/importmap_tags_helper/javascript_module_preload_tag.yml +35 -0
- data/config/action_view_helpers/turbo-rails/drive_helper/turbo_exempts_page_from_cache.yml +9 -6
- data/config/action_view_helpers/turbo-rails/drive_helper/turbo_exempts_page_from_cache_tag.yml +12 -8
- data/config/action_view_helpers/turbo-rails/drive_helper/turbo_exempts_page_from_preview.yml +9 -6
- data/config/action_view_helpers/turbo-rails/drive_helper/turbo_exempts_page_from_preview_tag.yml +12 -8
- data/config/action_view_helpers/turbo-rails/drive_helper/turbo_page_requires_reload.yml +9 -6
- data/config/action_view_helpers/turbo-rails/drive_helper/turbo_page_requires_reload_tag.yml +12 -8
- data/config/action_view_helpers/turbo-rails/drive_helper/turbo_refresh_method_tag.yml +17 -11
- data/config/action_view_helpers/turbo-rails/drive_helper/turbo_refresh_scroll_tag.yml +17 -11
- data/config/action_view_helpers/turbo-rails/drive_helper/turbo_refreshes_with.yml +20 -12
- data/config/action_view_helpers/turbo-rails/frames_helper/turbo_frame_tag.yml +54 -33
- data/config/action_view_helpers/turbo-rails/includes_helper/turbo_include_tags.yml +9 -6
- data/config/action_view_helpers/turbo-rails/streams_action_helper/turbo_stream_action_tag.yml +32 -20
- data/config/action_view_helpers/turbo-rails/streams_action_helper/turbo_stream_refresh_tag.yml +18 -11
- data/config/action_view_helpers/turbo-rails/streams_helper/turbo_stream.yml +9 -6
- data/config/action_view_helpers/turbo-rails/streams_helper/turbo_stream_from.yml +28 -18
- data/config/html_elements.yml +597 -0
- data/config/options.yml +1 -0
- data/config/slots/components.yml +52 -0
- data/config/state/kind.yml +61 -0
- data/config/state/operators.yml +27 -0
- data/config/state/predicates.yml +39 -0
- data/config/state/transforms.yml +18 -0
- data/config/view_context_methods/actionview/base/annotate_rendered_view_with_filenames.yml +4 -4
- data/config/view_context_methods/actionview/base/assign.yml +4 -4
- data/config/view_context_methods/actionview/base/assigns.yml +4 -4
- data/config/view_context_methods/actionview/base/automatically_disable_submit_tag.yml +4 -4
- data/config/view_context_methods/actionview/base/compiled_method_container.yml +4 -4
- data/config/view_context_methods/actionview/base/config.yml +4 -4
- data/config/view_context_methods/actionview/base/default_form_builder.yml +4 -4
- data/config/view_context_methods/actionview/base/default_formats.yml +4 -4
- data/config/view_context_methods/actionview/base/field_error_proc.yml +4 -4
- data/config/view_context_methods/actionview/base/formats.yml +4 -4
- data/config/view_context_methods/actionview/base/in_rendering_context.yml +4 -4
- data/config/view_context_methods/actionview/base/locale.yml +4 -4
- data/config/view_context_methods/actionview/base/lookup_context.yml +4 -4
- data/config/view_context_methods/actionview/base/output_buffer.yml +4 -4
- data/config/view_context_methods/actionview/base/prefix_partial_path_with_controller_namespace.yml +4 -4
- data/config/view_context_methods/actionview/base/remove_hidden_field_autocomplete.yml +4 -4
- data/config/view_context_methods/actionview/base/streaming_completion_on_exception.yml +4 -4
- data/config/view_context_methods/actionview/base/view_flow.yml +4 -4
- data/config/view_context_methods/actionview/base/view_paths.yml +4 -4
- data/config/view_context_methods/actionview/base/view_renderer.yml +4 -4
- data/config/view_context_methods/actionview/template/local_assigns.yml +4 -4
- data/config/view_context_methods/activemodel/conversion/convert_to_model.yml +4 -4
- data/config/view_context_methods/activesupport/benchmarkable/benchmark.yml +4 -4
- data/config.yml +1240 -790
- data/exe/herb +2 -0
- data/ext/herb/error_helpers.c +355 -17
- data/ext/herb/error_helpers.h +1 -1
- data/ext/herb/extconf.rb +4 -2
- data/ext/herb/extension.c +137 -89
- data/ext/herb/extension_helpers.c +81 -42
- data/ext/herb/extension_helpers.h +4 -1
- data/ext/herb/nodes.c +826 -358
- data/ext/herb/nodes.h +3 -2
- data/ext/herb/parser_options_helpers.c +151 -0
- data/ext/herb/parser_options_helpers.h +14 -0
- data/herb.gemspec +2 -2
- data/lib/herb/3.2/herb.so +0 -0
- data/lib/herb/3.3/herb.so +0 -0
- data/lib/herb/3.4/herb.so +0 -0
- data/lib/herb/4.0/herb.so +0 -0
- data/lib/herb/action_view/helper_registry.rb +1358 -62
- data/lib/herb/analysis/partial_declaration.rb +140 -0
- data/lib/herb/analysis/partial_index.rb +189 -0
- data/lib/herb/analysis/partial_resolution.rb +161 -0
- data/lib/herb/analysis/partial_resolver.rb +144 -0
- data/lib/herb/analysis/project_index.rb +152 -0
- data/lib/herb/{action_view → analysis}/render_analyzer.rb +287 -77
- data/lib/herb/analysis/render_graph/ancestor_chain.rb +27 -0
- data/lib/herb/analysis/render_graph/builder.rb +376 -0
- data/lib/herb/analysis/render_graph/call_frame.rb +9 -0
- data/lib/herb/analysis/render_graph/call_site_location.rb +23 -0
- data/lib/herb/analysis/render_graph/inferred_signature.rb +21 -0
- data/lib/herb/analysis/render_graph/partial_call_site.rb +40 -0
- data/lib/herb/analysis/render_graph/partial_context.rb +46 -0
- data/lib/herb/analysis/render_graph/template_roots.rb +31 -0
- data/lib/herb/analysis/render_graph.rb +285 -0
- data/lib/herb/analysis/ruby_locals_index/local.rb +25 -0
- data/lib/herb/analysis/ruby_locals_index/named_reference.rb +22 -0
- data/lib/herb/analysis/ruby_locals_index/offset_table.rb +44 -0
- data/lib/herb/analysis/ruby_locals_index/reference_collector.rb +80 -0
- data/lib/herb/analysis/ruby_locals_index/state_locals.rb +49 -0
- data/lib/herb/analysis/ruby_locals_index.rb +165 -0
- data/lib/herb/analysis/ruby_reference.rb +67 -0
- data/lib/herb/analysis/template_dependencies/dependency_collector.rb +179 -0
- data/lib/herb/analysis/template_dependencies/node_dependency_collector.rb +309 -0
- data/lib/herb/analysis/template_dependencies.rb +562 -0
- data/lib/herb/ast/erb_render_node.rb +26 -94
- data/lib/herb/ast/helpers.rb +90 -10
- data/lib/herb/ast/herb_directive_node.rb +18 -0
- data/lib/herb/ast/node.rb +32 -2
- data/lib/herb/ast/nodes.rb +1342 -105
- data/lib/herb/backend.rb +73 -0
- data/lib/herb/bootstrap.rb +3 -7
- data/lib/herb/cli.rb +550 -32
- data/lib/herb/colors.rb +14 -0
- data/lib/herb/configuration.rb +71 -35
- data/lib/herb/defaults.yml +2 -1
- data/lib/herb/dev/assets.rb +57 -0
- data/lib/herb/dev/classifier.rb +84 -0
- data/lib/herb/dev/embedded.rb +27 -0
- data/lib/herb/dev/pipeline.rb +305 -0
- data/lib/herb/dev/protocol.rb +221 -0
- data/lib/herb/dev/runner.rb +175 -175
- data/lib/herb/dev/server.rb +89 -26
- data/lib/herb/dev/server_entry.rb +41 -6
- data/lib/herb/dev/watcher.rb +181 -0
- data/lib/herb/dev.rb +163 -0
- data/lib/herb/diagnostic/formatter.rb +88 -0
- data/lib/herb/diagnostic.rb +172 -0
- data/lib/herb/diff/operation.rb +36 -0
- data/lib/herb/diff/result.rb +62 -0
- data/lib/herb/diff.rb +10 -0
- data/lib/herb/engine/collector.rb +62 -0
- data/lib/herb/engine/compiler.rb +346 -108
- data/lib/herb/engine/component_tags/constant_resolver.rb +28 -0
- data/lib/herb/engine/component_tags/partial_resolver.rb +54 -0
- data/lib/herb/engine/component_tags/resolver.rb +32 -0
- data/lib/herb/engine/component_tags/visitor.rb +231 -0
- data/lib/herb/engine/css_inliner/inliner.rb +101 -0
- data/lib/herb/engine/css_inliner/visitor.rb +174 -0
- data/lib/herb/engine/errors.rb +122 -0
- data/lib/herb/engine/helpers.rb +82 -0
- data/lib/herb/engine/inline_render/inliner.rb +122 -0
- data/lib/herb/engine/inline_render/visitor.rb +267 -0
- data/lib/herb/engine/runtime/entry.rb +62 -0
- data/lib/herb/engine/runtime/error_page.rb +362 -0
- data/lib/herb/engine/runtime/html_safe_assertions.rb +217 -0
- data/lib/herb/engine/runtime/journal/summary.rb +227 -0
- data/lib/herb/engine/runtime/journal.rb +379 -0
- data/lib/herb/engine/runtime/middleware.rb +212 -0
- data/lib/herb/engine/runtime/observations.rb +73 -0
- data/lib/herb/engine/runtime/report.rb +204 -0
- data/lib/herb/engine/runtime/session.rb +437 -0
- data/lib/herb/engine/runtime.rb +21 -0
- data/lib/herb/engine/scoped_style/channel.rb +66 -0
- data/lib/herb/engine/scoped_style/collector.rb +74 -0
- data/lib/herb/engine/scoped_style/visitor.rb +533 -0
- data/lib/herb/engine/slots/annotation.rb +98 -0
- data/lib/herb/engine/slots/bindings.rb +61 -0
- data/lib/herb/engine/slots/callee.rb +118 -0
- data/lib/herb/engine/slots/component_definitions.rb +67 -0
- data/lib/herb/engine/slots/components/async.rb +24 -0
- data/lib/herb/engine/slots/components/base.rb +132 -0
- data/lib/herb/engine/slots/components/deferred.rb +81 -0
- data/lib/herb/engine/slots/components/fallback.rb +27 -0
- data/lib/herb/engine/slots/components/fragment.rb +99 -0
- data/lib/herb/engine/slots/components/lazy.rb +24 -0
- data/lib/herb/engine/slots/components.rb +52 -0
- data/lib/herb/engine/slots/dependencies/channel.rb +72 -0
- data/lib/herb/engine/slots/dependencies.rb +269 -0
- data/lib/herb/engine/slots/dynamics_compiler.rb +854 -0
- data/lib/herb/engine/slots/identifier.rb +35 -0
- data/lib/herb/engine/slots/manifest/channel.rb +74 -0
- data/lib/herb/engine/slots/manifest/collector.rb +75 -0
- data/lib/herb/engine/slots/markers.rb +128 -0
- data/lib/herb/engine/slots/render_bindings.rb +141 -0
- data/lib/herb/engine/slots/schema_compiler.rb +94 -0
- data/lib/herb/engine/slots/state_anchor.rb +94 -0
- data/lib/herb/engine/slots/state_compiler.rb +1326 -0
- data/lib/herb/engine/slots/state_directives.rb +854 -0
- data/lib/herb/engine/slots/state_kinds.rb +54 -0
- data/lib/herb/engine/slots/state_operators.rb +36 -0
- data/lib/herb/engine/slots/state_overrides.rb +79 -0
- data/lib/herb/engine/slots/state_predicates.rb +65 -0
- data/lib/herb/engine/slots/state_transforms.rb +42 -0
- data/lib/herb/engine/slots/statics.rb +185 -0
- data/lib/herb/engine/slots/subtree.rb +82 -0
- data/lib/herb/engine/slots/subtree_compiler.rb +255 -0
- data/lib/herb/engine/slots/types.rb +42 -0
- data/lib/herb/engine/slots/visitor.rb +2256 -0
- data/lib/herb/engine/validators/accessibility_validator.rb +3 -3
- data/lib/herb/engine/validators/base.rb +36 -0
- data/lib/herb/engine/validators/generator_template_validator.rb +39 -0
- data/lib/herb/engine/validators/nesting_validator.rb +3 -3
- data/lib/herb/engine/validators/render_validator.rb +13 -33
- data/lib/herb/engine/validators/security_validator.rb +3 -17
- data/lib/herb/engine/validators.rb +43 -0
- data/lib/herb/engine/visitors/auto_close_omitted_tags_visitor.rb +48 -0
- data/lib/herb/engine/visitors/content_for_visitor.rb +127 -0
- data/lib/herb/engine/{debug_visitor.rb → visitors/debug_visitor.rb} +121 -93
- data/lib/herb/engine/visitors/html_safe_assertions_visitor.rb +281 -0
- data/lib/herb/engine/visitors/instrumentation_visitor.rb +290 -0
- data/lib/herb/engine/visitors/optimize_visitor.rb +728 -0
- data/lib/herb/engine/visitors/remove_comments_visitor.rb +106 -0
- data/lib/herb/engine/visitors/source_attribution_visitor.rb +177 -0
- data/lib/herb/engine.rb +218 -257
- data/lib/herb/ensure_installed.rb +43 -0
- data/lib/herb/errors.rb +646 -157
- data/lib/herb/fingerprint.rb +82 -0
- data/lib/herb/html/elements.rb +18 -0
- data/lib/herb/html/util.rb +21 -2
- data/lib/herb/lex_result.rb +0 -10
- data/lib/herb/locate.rb +163 -0
- data/lib/herb/location.rb +20 -0
- data/lib/herb/parse_result.rb +17 -11
- data/lib/herb/parser_options.rb +65 -46
- data/lib/herb/position.rb +19 -0
- data/lib/herb/prism_inspect.rb +1 -4
- data/lib/herb/project.rb +31 -18
- data/lib/herb/range.rb +5 -0
- data/lib/herb/result.rb +2 -2
- data/lib/herb/ruby_program.rb +110 -0
- data/lib/herb/source_path.rb +232 -0
- data/lib/herb/token.rb +14 -3
- data/lib/herb/version.rb +1 -1
- data/lib/herb/visitor/context/origin.rb +52 -0
- data/lib/herb/visitor/context/replacements.rb +59 -0
- data/lib/herb/visitor/context.rb +169 -0
- data/lib/herb/visitor/context_aware.rb +45 -0
- data/lib/herb/visitor/diagnostics.rb +148 -0
- data/lib/herb/visitor/experimental.rb +33 -0
- data/lib/herb/visitor/parser_option_requirements.rb +151 -0
- data/lib/herb/visitor/stack.rb +192 -0
- data/lib/herb/visitor.rb +47 -1
- data/lib/herb/warnings.rb +25 -0
- data/lib/herb.rb +74 -63
- data/sig/herb/action_view/helper_registry.rbs +82 -10
- data/sig/herb/analysis/partial_declaration.rbs +80 -0
- data/sig/herb/analysis/partial_index.rbs +66 -0
- data/sig/herb/analysis/partial_resolution.rbs +57 -0
- data/sig/herb/analysis/partial_resolver.rbs +76 -0
- data/sig/herb/analysis/project_index.rbs +57 -0
- data/sig/herb/{action_view → analysis}/render_analyzer.rbs +25 -4
- data/sig/herb/analysis/render_graph/ancestor_chain.rbs +22 -0
- data/sig/herb/analysis/render_graph/builder.rbs +180 -0
- data/sig/herb/analysis/render_graph/call_frame.rbs +26 -0
- data/sig/herb/analysis/render_graph/call_site_location.rbs +28 -0
- data/sig/herb/analysis/render_graph/inferred_signature.rbs +27 -0
- data/sig/herb/analysis/render_graph/partial_call_site.rbs +36 -0
- data/sig/herb/analysis/render_graph/partial_context.rbs +31 -0
- data/sig/herb/analysis/render_graph/template_roots.rbs +32 -0
- data/sig/herb/analysis/render_graph.rbs +83 -0
- data/sig/herb/analysis/ruby_locals_index/local.rbs +21 -0
- data/sig/herb/analysis/ruby_locals_index/named_reference.rbs +20 -0
- data/sig/herb/analysis/ruby_locals_index/offset_table.rbs +26 -0
- data/sig/herb/analysis/ruby_locals_index/reference_collector.rbs +40 -0
- data/sig/herb/analysis/ruby_locals_index/state_locals.rbs +19 -0
- data/sig/herb/analysis/ruby_locals_index.rbs +62 -0
- data/sig/herb/analysis/ruby_reference.rbs +28 -0
- data/sig/herb/analysis/template_dependencies/dependency_collector.rbs +52 -0
- data/sig/herb/analysis/template_dependencies/node_dependency_collector.rbs +81 -0
- data/sig/herb/analysis/template_dependencies.rbs +125 -0
- data/sig/herb/ast/erb_render_node.rbs +10 -2
- data/sig/herb/ast/helpers.rbs +31 -1
- data/sig/herb/ast/herb_directive_node.rbs +13 -0
- data/sig/herb/ast/node.rbs +9 -0
- data/sig/herb/ast/nodes.rbs +662 -89
- data/sig/herb/backend.rbs +52 -0
- data/sig/herb/colors.rbs +3 -0
- data/sig/herb/configuration.rbs +27 -3
- data/sig/herb/dev/assets.rbs +27 -0
- data/sig/herb/dev/classifier.rbs +57 -0
- data/sig/herb/dev/embedded.rbs +21 -0
- data/sig/herb/dev/pipeline.rbs +118 -0
- data/sig/herb/dev/protocol.rbs +78 -0
- data/sig/herb/dev/runner.rbs +61 -23
- data/sig/herb/dev/server.rbs +49 -22
- data/sig/herb/dev/server_entry.rbs +46 -21
- data/sig/herb/dev/watcher.rbs +84 -0
- data/sig/herb/dev.rbs +58 -0
- data/sig/herb/diagnostic/formatter.rbs +28 -0
- data/sig/herb/diagnostic.rbs +88 -0
- data/sig/herb/diff/operation.rbs +36 -0
- data/sig/herb/diff/result.rbs +36 -0
- data/sig/herb/diff.rbs +6 -0
- data/sig/herb/engine/collector.rbs +48 -0
- data/sig/herb/engine/compiler.rbs +62 -23
- data/sig/herb/engine/component_tags/constant_resolver.rbs +19 -0
- data/sig/herb/engine/component_tags/partial_resolver.rbs +30 -0
- data/sig/herb/engine/component_tags/resolver.rbs +25 -0
- data/sig/herb/engine/component_tags/visitor.rbs +69 -0
- data/sig/herb/engine/css_inliner/inliner.rbs +65 -0
- data/sig/herb/engine/css_inliner/visitor.rbs +87 -0
- data/sig/herb/engine/errors.rbs +68 -0
- data/sig/herb/engine/helpers.rbs +28 -0
- data/sig/herb/engine/inline_render/inliner.rbs +39 -0
- data/sig/herb/engine/inline_render/visitor.rbs +104 -0
- data/sig/herb/engine/runtime/entry.rbs +43 -0
- data/sig/herb/engine/runtime/error_page.rbs +115 -0
- data/sig/herb/engine/runtime/html_safe_assertions.rbs +99 -0
- data/sig/herb/engine/runtime/journal/summary.rbs +172 -0
- data/sig/herb/engine/runtime/journal.rbs +126 -0
- data/sig/herb/engine/runtime/middleware.rbs +96 -0
- data/sig/herb/engine/runtime/observations.rbs +38 -0
- data/sig/herb/engine/runtime/report.rbs +97 -0
- data/sig/herb/engine/runtime/session.rbs +233 -0
- data/sig/herb/engine/runtime.rbs +14 -0
- data/sig/herb/engine/scoped_style/channel.rbs +45 -0
- data/sig/herb/engine/scoped_style/collector.rbs +45 -0
- data/sig/herb/engine/scoped_style/visitor.rbs +220 -0
- data/sig/herb/engine/slots/annotation.rbs +72 -0
- data/sig/herb/engine/slots/bindings.rbs +34 -0
- data/sig/herb/engine/slots/callee.rbs +62 -0
- data/sig/herb/engine/slots/component_definitions.rbs +19 -0
- data/sig/herb/engine/slots/components/async.rbs +20 -0
- data/sig/herb/engine/slots/components/base.rbs +60 -0
- data/sig/herb/engine/slots/components/deferred.rbs +29 -0
- data/sig/herb/engine/slots/components/fallback.rbs +21 -0
- data/sig/herb/engine/slots/components/fragment.rbs +34 -0
- data/sig/herb/engine/slots/components/lazy.rbs +20 -0
- data/sig/herb/engine/slots/components.rbs +30 -0
- data/sig/herb/engine/slots/dependencies/channel.rbs +51 -0
- data/sig/herb/engine/slots/dependencies.rbs +94 -0
- data/sig/herb/engine/slots/dynamics_compiler.rbs +349 -0
- data/sig/herb/engine/slots/identifier.rbs +19 -0
- data/sig/herb/engine/slots/manifest/channel.rbs +49 -0
- data/sig/herb/engine/slots/manifest/collector.rbs +45 -0
- data/sig/herb/engine/slots/markers.rbs +85 -0
- data/sig/herb/engine/slots/render_bindings.rbs +69 -0
- data/sig/herb/engine/slots/schema_compiler.rbs +62 -0
- data/sig/herb/engine/slots/state_anchor.rbs +41 -0
- data/sig/herb/engine/slots/state_compiler.rbs +258 -0
- data/sig/herb/engine/slots/state_directives.rbs +278 -0
- data/sig/herb/engine/slots/state_kinds.rbs +24 -0
- data/sig/herb/engine/slots/state_operators.rbs +19 -0
- data/sig/herb/engine/slots/state_overrides.rbs +33 -0
- data/sig/herb/engine/slots/state_predicates.rbs +16 -0
- data/sig/herb/engine/slots/state_transforms.rbs +15 -0
- data/sig/herb/engine/slots/statics.rbs +67 -0
- data/sig/herb/engine/slots/subtree.rbs +49 -0
- data/sig/herb/engine/slots/subtree_compiler.rbs +130 -0
- data/sig/herb/engine/slots/types.rbs +46 -0
- data/sig/herb/engine/slots/visitor.rbs +599 -0
- data/sig/herb/engine/validators/accessibility_validator.rbs +1 -1
- data/sig/herb/engine/validators/base.rbs +28 -0
- data/sig/herb/engine/validators/generator_template_validator.rbs +19 -0
- data/sig/herb/engine/validators/nesting_validator.rbs +1 -1
- data/sig/herb/engine/validators/render_validator.rbs +2 -6
- data/sig/herb/engine/validators/security_validator.rbs +1 -3
- data/sig/herb/engine/validators.rbs +21 -0
- data/sig/herb/engine/visitors/auto_close_omitted_tags_visitor.rbs +26 -0
- data/sig/herb/engine/visitors/content_for_visitor.rbs +52 -0
- data/sig/herb/engine/{debug_visitor.rbs → visitors/debug_visitor.rbs} +26 -15
- data/sig/herb/engine/visitors/html_safe_assertions_visitor.rbs +100 -0
- data/sig/herb/engine/visitors/instrumentation_visitor.rbs +111 -0
- data/sig/herb/engine/visitors/optimize_visitor.rbs +246 -0
- data/sig/herb/engine/visitors/remove_comments_visitor.rbs +66 -0
- data/sig/herb/engine/visitors/source_attribution_visitor.rbs +90 -0
- data/sig/herb/engine.rbs +47 -41
- data/sig/herb/ensure_installed.rbs +9 -0
- data/sig/herb/errors.rbs +293 -0
- data/sig/herb/fingerprint.rbs +37 -0
- data/sig/herb/html/elements.rbs +19 -0
- data/sig/herb/html/util.rbs +15 -1
- data/sig/herb/lex_result.rbs +0 -6
- data/sig/herb/locate.rbs +89 -0
- data/sig/herb/location.rbs +12 -0
- data/sig/herb/parse_result.rbs +10 -8
- data/sig/herb/parser_options.rbs +47 -21
- data/sig/herb/position.rbs +11 -0
- data/sig/herb/range.rbs +3 -0
- data/sig/herb/ruby_program.rbs +51 -0
- data/sig/herb/source_path.rbs +132 -0
- data/sig/herb/token.rbs +5 -2
- data/sig/herb/visitor/context/origin.rbs +51 -0
- data/sig/herb/visitor/context/replacements.rbs +39 -0
- data/sig/herb/visitor/context.rbs +83 -0
- data/sig/herb/visitor/context_aware.rbs +32 -0
- data/sig/herb/visitor/diagnostics.rbs +82 -0
- data/sig/herb/visitor/experimental.rbs +23 -0
- data/sig/herb/visitor/parser_option_requirements.rbs +76 -0
- data/sig/herb/visitor/stack.rbs +91 -0
- data/sig/herb/visitor.rbs +22 -0
- data/sig/herb/warnings.rbs +10 -0
- data/sig/herb.rbs +27 -10
- data/sig/serialized_ast_errors.rbs +58 -1
- data/sig/serialized_ast_nodes.rbs +58 -2
- data/src/analyze/action_view/attribute_extraction_helpers.c +73 -36
- data/src/analyze/action_view/generated_handlers.c +37 -1
- data/src/analyze/action_view/generated_handlers.h +2 -1
- data/src/analyze/action_view/helper_registry.c +1353 -58
- data/src/analyze/action_view/registry.c +10 -17
- data/src/analyze/action_view/stylesheet_link_tag.c +40 -0
- data/src/analyze/action_view/tag_helper_node_builders.c +57 -0
- data/src/analyze/action_view/tag_helpers.c +423 -93
- data/src/analyze/analyze.c +301 -64
- data/src/analyze/analyze_helpers.c +420 -23
- data/src/analyze/builders.c +79 -51
- data/src/analyze/conditional_elements.c +13 -8
- data/src/analyze/conditional_open_tags.c +11 -5
- data/src/analyze/control_type.c +16 -1
- data/src/analyze/herb_directives.c +701 -0
- data/src/analyze/invalid_structures.c +11 -7
- data/src/analyze/iteration_nodes.c +306 -0
- data/src/analyze/missing_end.c +116 -32
- data/src/analyze/parse_errors.c +8 -3
- data/src/analyze/postfix_conditionals.c +98 -63
- data/src/analyze/prism_annotate.c +13 -4
- data/src/analyze/render_nodes.c +345 -123
- data/src/analyze/strict_locals.c +30 -26
- data/src/analyze/ternary_conditionals.c +95 -70
- data/src/analyze/transform.c +43 -1
- data/src/ast/ast_node.c +3 -13
- data/src/ast/ast_nodes.c +911 -112
- data/src/ast/ast_pretty_print.c +161 -2
- data/src/diff/herb_diff.c +8 -0
- data/src/diff/herb_diff_attributes.c +1 -0
- data/src/diff/herb_diff_children.c +4 -3
- data/src/diff/herb_diff_helpers.c +7 -1
- data/src/diff/herb_diff_nodes.c +186 -71
- data/src/diff/herb_hash_tree.c +99 -1
- data/src/errors.c +1096 -128
- data/src/extract.c +30 -8
- data/src/herb.c +30 -11
- data/src/include/analyze/action_view/attribute_extraction_helpers.h +1 -1
- data/src/include/analyze/action_view/helper_registry.h +28 -4
- data/src/include/analyze/action_view/tag_helper_handler.h +1 -1
- data/src/include/analyze/action_view/tag_helper_node_builders.h +7 -0
- data/src/include/analyze/analyze.h +11 -0
- data/src/include/analyze/builders.h +16 -0
- data/src/include/analyze/helpers.h +23 -2
- data/src/include/analyze/herb_directive_kinds.h +41 -0
- data/src/include/analyze/herb_directives.h +14 -0
- data/src/include/analyze/iteration_nodes.h +11 -0
- data/src/include/analyze/prism_annotate.h +3 -3
- data/src/include/analyze/ternary_conditionals.h +2 -0
- data/src/include/ast/ast_node.h +1 -5
- data/src/include/ast/ast_nodes.h +76 -2
- data/src/include/ast/ast_pretty_print.h +1 -1
- data/src/include/diff/herb_diff.h +11 -0
- data/src/include/errors.h +156 -39
- data/src/include/extract.h +11 -0
- data/src/include/herb.h +6 -0
- data/src/include/lexer/erb_openers.h +29 -0
- data/src/include/lexer/lexer_peek_helpers.h +8 -1
- data/src/include/lexer/lexer_struct.h +4 -0
- data/src/include/lexer/token.h +3 -0
- data/src/include/lexer/token_struct.h +8 -6
- data/src/include/lib/hb_allocator.h +2 -1
- data/src/include/lib/hb_array.h +2 -0
- data/src/include/lib/hb_foreach.h +1 -1
- data/src/include/lib/hb_string.h +7 -0
- data/src/include/parser/dot_notation.h +1 -1
- data/src/include/parser/foreign_content_elements.h +32 -0
- data/src/include/parser/parser.h +16 -30
- data/src/include/parser/parser_helpers.h +13 -11
- data/src/include/parser/parser_options.h +41 -0
- data/src/include/prism/ruby_parser.h +6 -0
- data/src/include/util/html_elements.h +85 -0
- data/src/include/util/html_util.h +1 -0
- data/src/include/version.h +1 -1
- data/src/lexer/lexer_peek_helpers.c +15 -1
- data/src/lexer/token.c +83 -1
- data/src/lexer.c +196 -12
- data/src/lib/hb_allocator.c +2 -0
- data/src/lib/hb_array.c +26 -0
- data/src/lib/hb_string.c +26 -0
- data/src/main.c +1 -1
- data/src/parser/dot_notation.c +4 -3
- data/src/parser/match_tags.c +66 -1
- data/src/parser/parser_helpers.c +69 -37
- data/src/parser.c +606 -383
- data/src/parser_options_defaults.c +30 -0
- data/src/prism/prism_helpers.c +3 -0
- data/src/prism/ruby_parser.c +49 -0
- data/src/util/html_util.c +11 -58
- data/src/visitor.c +77 -1
- data/templates/ext/herb/error_helpers.c.erb +1 -1
- data/templates/ext/herb/nodes.c.erb +18 -13
- data/templates/ext/herb/nodes.h.erb +2 -1
- data/templates/ext/herb/parser_options_helpers.c.erb +69 -0
- data/templates/ext/herb/parser_options_helpers.h.erb +11 -0
- data/templates/java/nodes.c.erb +20 -16
- data/templates/java/nodes.h.erb +3 -2
- data/templates/java/org/herb/ParserOptions.java.erb +24 -0
- data/templates/java/org/herb/ast/HelperRegistry.java.erb +67 -31
- data/templates/java/org/herb/ast/HelperType.java.erb +29 -0
- data/templates/java/org/herb/ast/Nodes.java.erb +11 -7
- data/templates/java/parser_options_helpers.c.erb +45 -0
- data/templates/java/parser_options_helpers.h.erb +10 -0
- data/templates/javascript/packages/client/src/state-kinds.ts.erb +49 -0
- data/templates/javascript/packages/client/src/state-operators.ts.erb +15 -0
- data/templates/javascript/packages/client/src/state-predicates.ts.erb +27 -0
- data/templates/javascript/packages/client/src/state-transforms.ts.erb +19 -0
- data/templates/javascript/packages/core/src/action-view-helpers.ts.erb +47 -0
- data/templates/javascript/packages/core/src/built-in-components.ts.erb +67 -0
- data/templates/javascript/packages/core/src/errors.ts.erb +9 -3
- data/templates/javascript/packages/core/src/foreign-content-elements.ts.erb +18 -0
- data/templates/javascript/packages/core/src/html-constants.ts.erb +32 -0
- data/templates/javascript/packages/core/src/html-elements.ts.erb +41 -0
- data/templates/javascript/packages/core/src/node-type-guards.ts.erb +11 -7
- data/templates/javascript/packages/core/src/nodes.ts.erb +82 -19
- data/templates/javascript/packages/core/src/parser-options.ts.erb +41 -0
- data/templates/javascript/packages/core/src/visitor.ts.erb +1 -1
- data/templates/javascript/packages/node/extension/error_helpers.cpp.erb +3 -3
- data/templates/javascript/packages/node/extension/nodes.cpp.erb +17 -12
- data/templates/javascript/packages/node/extension/nodes.h.erb +3 -3
- data/templates/javascript/packages/node/extension/parser_options_helpers.cpp.erb +41 -0
- data/templates/javascript/packages/node/extension/parser_options_helpers.h.erb +12 -0
- data/templates/lib/herb/action_view/helper_registry.rb.erb +77 -3
- data/templates/lib/herb/ast/nodes.rb.erb +16 -6
- data/templates/lib/herb/engine/slots/component_definitions.rb.erb +38 -0
- data/templates/lib/herb/engine/slots/state_kinds.rb.erb +37 -0
- data/templates/lib/herb/engine/slots/state_operators.rb.erb +26 -0
- data/templates/lib/herb/engine/slots/state_predicates.rb.erb +39 -0
- data/templates/lib/herb/engine/slots/state_transforms.rb.erb +27 -0
- data/templates/lib/herb/errors.rb.erb +34 -6
- data/templates/lib/herb/html/elements.rb.erb +12 -0
- data/templates/lib/herb/parser_options.rb.erb +32 -0
- data/templates/lib/herb/visitor.rb.erb +7 -1
- data/templates/rust/herb-printer/src/printer_visitor.rs.erb +14 -0
- data/templates/rust/src/action_view_helpers.rs.erb +38 -0
- data/templates/rust/src/ast/nodes.rs.erb +24 -31
- data/templates/rust/src/errors.rs.erb +1 -1
- data/templates/rust/src/nodes.rs.erb +58 -26
- data/templates/rust/src/parser_options.rs.erb +16 -0
- data/templates/rust/src/prism/generated_deserialize.rs.erb +109 -0
- data/templates/rust/src/prism/generated_prettyprint.rs.erb +153 -0
- data/templates/rust/src/union_types.rs.erb +7 -1
- data/templates/rust/src/visitor.rs.erb +1 -1
- data/templates/src/analyze/action_view/helper_registry.c.erb +22 -0
- data/templates/src/analyze/missing_end.c.erb +13 -5
- data/templates/src/ast/ast_nodes.c.erb +41 -2
- data/templates/src/diff/herb_diff_nodes.c.erb +44 -8
- data/templates/src/errors.c.erb +8 -3
- data/templates/src/include/analyze/action_view/helper_registry.h.erb +19 -0
- data/templates/src/include/analyze/herb_directive_kinds.h.erb +25 -0
- data/templates/src/include/errors.h.erb +3 -1
- data/templates/src/include/parser/foreign_content_elements.h.erb +23 -0
- data/templates/src/include/parser/parser_options.h.erb +21 -0
- data/templates/src/include/util/html_elements.h.erb +28 -0
- data/templates/src/parser_options_defaults.c.erb +9 -0
- data/templates/template.rb +564 -9
- data/templates/wasm/error_helpers.cpp.erb +4 -4
- data/templates/wasm/nodes.cpp.erb +12 -12
- data/templates/wasm/nodes.h.erb +3 -3
- data/templates/wasm/parser_options_helpers.cpp.erb +25 -0
- data/templates/wasm/parser_options_helpers.h.erb +12 -0
- metadata +306 -27
- data/config/action_view_helpers/actionview/form_helper/button.yml +0 -38
- data/config/action_view_helpers/actionview/form_helper/submit.yml +0 -35
- data/lib/herb/ast.rb +0 -7
- data/lib/herb/diff_operation.rb +0 -34
- data/lib/herb/diff_result.rb +0 -59
- data/lib/herb/engine/error_formatter.rb +0 -432
- data/lib/herb/engine/parser_error_overlay.rb +0 -773
- data/lib/herb/engine/validation_error_overlay.rb +0 -182
- data/lib/herb/engine/validation_errors.rb +0 -65
- data/lib/herb/engine/validator.rb +0 -80
- data/sig/herb/ast.rbs +0 -6
- data/sig/herb/diff_operation.rbs +0 -34
- data/sig/herb/diff_result.rbs +0 -34
- data/sig/herb/engine/debug.rbs +0 -38
- data/sig/herb/engine/error_formatter.rbs +0 -47
- data/sig/herb/engine/parser_error_overlay.rbs +0 -41
- data/sig/herb/engine/validation_error_overlay.rbs +0 -35
- data/sig/herb/engine/validation_errors.rbs +0 -45
- data/sig/herb/engine/validator.rbs +0 -41
- data/sig/herb_c_extension.rbs +0 -10
|
@@ -5,34 +5,6 @@ import java.util.LinkedHashMap;
|
|
|
5
5
|
import java.util.List;
|
|
6
6
|
import java.util.Map;
|
|
7
7
|
|
|
8
|
-
/**
|
|
9
|
-
* Type enum for all supported Action View tag helpers.
|
|
10
|
-
*/
|
|
11
|
-
public enum HelperType {
|
|
12
|
-
<%- helpers.each_with_index do |helper, index| -%>
|
|
13
|
-
<%= helper.constant_name %>("<%= helper.name %>")<%= index < helpers.size - 1 ? "," : ";" %>
|
|
14
|
-
<%- end -%>
|
|
15
|
-
|
|
16
|
-
private final String name;
|
|
17
|
-
|
|
18
|
-
HelperType(String name) {
|
|
19
|
-
this.name = name;
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
public String getName() {
|
|
23
|
-
return name;
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
public static HelperType fromName(String name) {
|
|
27
|
-
for (HelperType type : values()) {
|
|
28
|
-
if (type.name.equals(name)) {
|
|
29
|
-
return type;
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
return null;
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
|
|
36
8
|
/**
|
|
37
9
|
* Argument metadata for a tag helper.
|
|
38
10
|
*/
|
|
@@ -86,6 +58,28 @@ class HelperOption {
|
|
|
86
58
|
public String getDescription() { return description; }
|
|
87
59
|
}
|
|
88
60
|
|
|
61
|
+
class HelperBlockArgument {
|
|
62
|
+
private final String name;
|
|
63
|
+
private final int position;
|
|
64
|
+
private final String type;
|
|
65
|
+
private final boolean optional;
|
|
66
|
+
private final String description;
|
|
67
|
+
|
|
68
|
+
HelperBlockArgument(String name, int position, String type, boolean optional, String description) {
|
|
69
|
+
this.name = name;
|
|
70
|
+
this.position = position;
|
|
71
|
+
this.type = type;
|
|
72
|
+
this.optional = optional;
|
|
73
|
+
this.description = description;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
public String getName() { return name; }
|
|
77
|
+
public int getPosition() { return position; }
|
|
78
|
+
public String getType() { return type; }
|
|
79
|
+
public boolean isOptional() { return optional; }
|
|
80
|
+
public String getDescription() { return description; }
|
|
81
|
+
}
|
|
82
|
+
|
|
89
83
|
/**
|
|
90
84
|
* Implicit attribute metadata for a tag helper.
|
|
91
85
|
*/
|
|
@@ -108,6 +102,31 @@ class HelperImplicitAttribute {
|
|
|
108
102
|
public String getWrapper() { return wrapper; }
|
|
109
103
|
}
|
|
110
104
|
|
|
105
|
+
/**
|
|
106
|
+
* Content metadata describing where a helper takes its rendered content from.
|
|
107
|
+
*/
|
|
108
|
+
class HelperContent {
|
|
109
|
+
private final String source;
|
|
110
|
+
private final Integer argPosition;
|
|
111
|
+
private final boolean skipIfHash;
|
|
112
|
+
private final boolean toSSuffixWhenSingle;
|
|
113
|
+
private final Integer positionalArgumentsWithBlock;
|
|
114
|
+
|
|
115
|
+
HelperContent(String source, Integer argPosition, boolean skipIfHash, boolean toSSuffixWhenSingle, Integer positionalArgumentsWithBlock) {
|
|
116
|
+
this.source = source;
|
|
117
|
+
this.argPosition = argPosition;
|
|
118
|
+
this.skipIfHash = skipIfHash;
|
|
119
|
+
this.toSSuffixWhenSingle = toSSuffixWhenSingle;
|
|
120
|
+
this.positionalArgumentsWithBlock = positionalArgumentsWithBlock;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
public String getSource() { return source; }
|
|
124
|
+
public Integer getArgPosition() { return argPosition; }
|
|
125
|
+
public boolean skipIfHash() { return skipIfHash; }
|
|
126
|
+
public boolean toSSuffixWhenSingle() { return toSSuffixWhenSingle; }
|
|
127
|
+
public Integer getPositionalArgumentsWithBlock() { return positionalArgumentsWithBlock; }
|
|
128
|
+
}
|
|
129
|
+
|
|
111
130
|
/**
|
|
112
131
|
* Registry entry containing all metadata for a single tag helper.
|
|
113
132
|
*/
|
|
@@ -118,6 +137,7 @@ class HelperEntry {
|
|
|
118
137
|
private final String gem;
|
|
119
138
|
private final String output;
|
|
120
139
|
private final String visibility;
|
|
140
|
+
private final String receiver;
|
|
121
141
|
private final String tagName;
|
|
122
142
|
private final boolean isVoid;
|
|
123
143
|
private final boolean supportsBlock;
|
|
@@ -128,16 +148,19 @@ class HelperEntry {
|
|
|
128
148
|
private final String signature;
|
|
129
149
|
private final String documentationUrl;
|
|
130
150
|
private final HelperImplicitAttribute implicitAttribute;
|
|
151
|
+
private final HelperContent content;
|
|
131
152
|
private final List<HelperArgument> arguments;
|
|
132
153
|
private final List<HelperOption> options;
|
|
154
|
+
private final List<HelperBlockArgument> blockArguments;
|
|
133
155
|
private final List<String> specialBehaviors;
|
|
134
156
|
private final List<String> aliases;
|
|
135
157
|
|
|
136
158
|
HelperEntry(
|
|
137
|
-
String name, HelperType type, String source, String gem, String output, String visibility, String tagName,
|
|
159
|
+
String name, HelperType type, String source, String gem, String output, String visibility, String receiver, String tagName,
|
|
138
160
|
boolean isVoid, boolean supportsBlock, boolean preferredForTag, boolean supported, String detectStyle, String description,
|
|
139
|
-
String signature, String documentationUrl, HelperImplicitAttribute implicitAttribute,
|
|
140
|
-
List<HelperArgument> arguments, List<HelperOption> options, List<
|
|
161
|
+
String signature, String documentationUrl, HelperImplicitAttribute implicitAttribute, HelperContent content,
|
|
162
|
+
List<HelperArgument> arguments, List<HelperOption> options, List<HelperBlockArgument> blockArguments,
|
|
163
|
+
List<String> specialBehaviors, List<String> aliases
|
|
141
164
|
) {
|
|
142
165
|
this.name = name;
|
|
143
166
|
this.type = type;
|
|
@@ -145,6 +168,7 @@ class HelperEntry {
|
|
|
145
168
|
this.gem = gem;
|
|
146
169
|
this.output = output;
|
|
147
170
|
this.visibility = visibility;
|
|
171
|
+
this.receiver = receiver;
|
|
148
172
|
this.tagName = tagName;
|
|
149
173
|
this.isVoid = isVoid;
|
|
150
174
|
this.supportsBlock = supportsBlock;
|
|
@@ -155,8 +179,10 @@ class HelperEntry {
|
|
|
155
179
|
this.signature = signature;
|
|
156
180
|
this.documentationUrl = documentationUrl;
|
|
157
181
|
this.implicitAttribute = implicitAttribute;
|
|
182
|
+
this.content = content;
|
|
158
183
|
this.arguments = arguments;
|
|
159
184
|
this.options = options;
|
|
185
|
+
this.blockArguments = blockArguments;
|
|
160
186
|
this.specialBehaviors = specialBehaviors;
|
|
161
187
|
this.aliases = aliases;
|
|
162
188
|
}
|
|
@@ -167,6 +193,7 @@ class HelperEntry {
|
|
|
167
193
|
public String getGem() { return gem; }
|
|
168
194
|
public String getOutput() { return output; }
|
|
169
195
|
public String getVisibility() { return visibility; }
|
|
196
|
+
public String getReceiver() { return receiver; }
|
|
170
197
|
public String getTagName() { return tagName; }
|
|
171
198
|
public boolean isVoid() { return isVoid; }
|
|
172
199
|
public boolean supportsBlock() { return supportsBlock; }
|
|
@@ -177,8 +204,10 @@ class HelperEntry {
|
|
|
177
204
|
public String getSignature() { return signature; }
|
|
178
205
|
public String getDocumentationUrl() { return documentationUrl; }
|
|
179
206
|
public HelperImplicitAttribute getImplicitAttribute() { return implicitAttribute; }
|
|
207
|
+
public HelperContent getContent() { return content; }
|
|
180
208
|
public List<HelperArgument> getArguments() { return arguments; }
|
|
181
209
|
public List<HelperOption> getOptions() { return options; }
|
|
210
|
+
public List<HelperBlockArgument> getBlockArguments() { return blockArguments; }
|
|
182
211
|
public List<String> getSpecialBehaviors() { return specialBehaviors; }
|
|
183
212
|
public List<String> getAliases() { return aliases; }
|
|
184
213
|
}
|
|
@@ -210,6 +239,7 @@ public final class HelperRegistry {
|
|
|
210
239
|
"<%= helper.gem %>",
|
|
211
240
|
"<%= helper.output %>",
|
|
212
241
|
"<%= helper.visibility %>",
|
|
242
|
+
"<%= helper.receiver %>",
|
|
213
243
|
<%= helper.tag_name ? "\"#{helper.tag_name}\"" : "null" %>,
|
|
214
244
|
<%= helper.void? %>,
|
|
215
245
|
<%= helper.supports_block %>,
|
|
@@ -223,9 +253,15 @@ public final class HelperRegistry {
|
|
|
223
253
|
new HelperImplicitAttribute("<%= helper.implicit_attribute.name %>", "<%= helper.implicit_attribute.source %>", <%= helper.implicit_attribute.source_with_block ? "\"#{helper.implicit_attribute.source_with_block}\"" : "null" %>, "<%= helper.implicit_attribute.wrapper %>"),
|
|
224
254
|
<%- else -%>
|
|
225
255
|
null,
|
|
256
|
+
<%- end -%>
|
|
257
|
+
<%- if helper.content? -%>
|
|
258
|
+
new HelperContent("<%= helper.content.source %>", <%= helper.content.arg_position || "null" %>, <%= helper.content.skip_if_hash %>, <%= helper.content.to_s_suffix_when_single %>, <%= helper.content.positional_arguments_with_block || "null" %>),
|
|
259
|
+
<%- else -%>
|
|
260
|
+
null,
|
|
226
261
|
<%- end -%>
|
|
227
262
|
List.of(<%= helper.arguments.map { |arg| "new HelperArgument(\"#{arg.name}\", #{arg.position}, \"#{arg.type_display}\", #{arg.optional}, #{arg.default ? "\"#{arg.escaped_default}\"" : "null"}, #{arg.splat}, \"#{arg.escaped_description}\")" }.join(", ") %>),
|
|
228
263
|
List.of(<%= helper.options.map { |opt| "new HelperOption(\"#{opt.name}\", \"#{opt.type_display}\", #{opt.maps_to ? "\"#{opt.maps_to}\"" : "null"}, \"#{opt.escaped_description}\")" }.join(", ") %>),
|
|
264
|
+
List.of(<%= helper.block_arguments.map { |arg| "new HelperBlockArgument(\"#{arg.name}\", #{arg.position}, \"#{arg.type_display}\", #{arg.optional}, \"#{arg.escaped_description}\")" }.join(", ") %>),
|
|
229
265
|
List.of(<%= helper.special_behaviors.map { |b| "\"#{b}\"" }.join(", ") %>),
|
|
230
266
|
List.of(<%= helper.aliases.map { |a| "\"#{a}\"" }.join(", ") %>)
|
|
231
267
|
);
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
package org.herb.ast;
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Type enum for all supported Action View tag helpers.
|
|
5
|
+
*/
|
|
6
|
+
public enum HelperType {
|
|
7
|
+
<%- helpers.each_with_index do |helper, index| -%>
|
|
8
|
+
<%= helper.constant_name %>("<%= helper.name %>")<%= index < helpers.size - 1 ? "," : ";" %>
|
|
9
|
+
<%- end -%>
|
|
10
|
+
|
|
11
|
+
private final String name;
|
|
12
|
+
|
|
13
|
+
HelperType(String name) {
|
|
14
|
+
this.name = name;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
public String getName() {
|
|
18
|
+
return name;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
public static HelperType fromName(String name) {
|
|
22
|
+
for (HelperType type : values()) {
|
|
23
|
+
if (type.name.equals(name)) {
|
|
24
|
+
return type;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
return null;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
@@ -162,7 +162,7 @@ class <%= node.name %> extends BaseNode {
|
|
|
162
162
|
public String inspect(String source) {
|
|
163
163
|
StringBuilder output = new StringBuilder();
|
|
164
164
|
|
|
165
|
-
output.append("@ <%= node.name %> ").append(
|
|
165
|
+
output.append("@ <%= node.name %> ").append("(location: " + (location != null ? location.toString() : "∅") + ")").append("\n");
|
|
166
166
|
<%- if node.fields.any? -%>
|
|
167
167
|
output.append(inspectErrors("│ "));
|
|
168
168
|
<%- else -%>
|
|
@@ -250,10 +250,16 @@ class <%= node.name %> extends BaseNode {
|
|
|
250
250
|
|
|
251
251
|
@Override
|
|
252
252
|
public List<Node> recursiveErrors() {
|
|
253
|
-
List<Node>
|
|
253
|
+
List<Node> accumulator = new ArrayList<>();
|
|
254
|
+
collectErrors(accumulator);
|
|
254
255
|
|
|
256
|
+
return accumulator;
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
@Override
|
|
260
|
+
protected void collectErrors(List<Node> accumulator) {
|
|
255
261
|
if (errors != null) {
|
|
256
|
-
|
|
262
|
+
accumulator.addAll(errors);
|
|
257
263
|
}
|
|
258
264
|
|
|
259
265
|
<%- if node.fields.any? -%>
|
|
@@ -263,21 +269,19 @@ class <%= node.name %> extends BaseNode {
|
|
|
263
269
|
if (<%= field.name %> != null) {
|
|
264
270
|
for (Node child : <%= field.name %>) {
|
|
265
271
|
if (child != null) {
|
|
266
|
-
|
|
272
|
+
((BaseNode) child).collectErrors(accumulator);
|
|
267
273
|
}
|
|
268
274
|
}
|
|
269
275
|
}
|
|
270
276
|
|
|
271
277
|
<%- elsif field.is_a?(Herb::Template::NodeField) || field.is_a?(Herb::Template::BorrowedNodeField) -%>
|
|
272
278
|
if (<%= field.name %> != null) {
|
|
273
|
-
|
|
279
|
+
((BaseNode) <%= field.name %>).collectErrors(accumulator);
|
|
274
280
|
}
|
|
275
281
|
|
|
276
282
|
<%- end -%>
|
|
277
283
|
<%- end -%>
|
|
278
284
|
<%- end -%>
|
|
279
|
-
|
|
280
|
-
return result;
|
|
281
285
|
}
|
|
282
286
|
|
|
283
287
|
@Override
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
#include "parser_options_helpers.h"
|
|
2
|
+
|
|
3
|
+
void herb_extract_parser_options(JNIEnv* env, jobject options, parser_options_T* parser_options) {
|
|
4
|
+
if (options == NULL) { return; }
|
|
5
|
+
|
|
6
|
+
jclass optionsClass = (*env)->GetObjectClass(env, options);
|
|
7
|
+
<%- parser_options.extractable_fields_for(:java).each do |field| -%>
|
|
8
|
+
|
|
9
|
+
<%- if field.boolean? -%>
|
|
10
|
+
{
|
|
11
|
+
jmethodID method = (*env)->GetMethodID(env, optionsClass, "<%= field.java_getter %>", "<%= field.java_jni_signature %>");
|
|
12
|
+
|
|
13
|
+
if (method != NULL) {
|
|
14
|
+
jboolean value = (*env)->CallBooleanMethod(env, options, method);
|
|
15
|
+
parser_options-><%= field.c_name %> = (value == JNI_TRUE);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
<%- elsif field.nullable? -%>
|
|
19
|
+
{
|
|
20
|
+
jmethodID method = (*env)->GetMethodID(env, optionsClass, "<%= field.java_getter %>", "<%= field.java_jni_signature %>");
|
|
21
|
+
|
|
22
|
+
if (method != NULL) {
|
|
23
|
+
jobject value = (*env)->CallObjectMethod(env, options, method);
|
|
24
|
+
|
|
25
|
+
if (value == NULL) {
|
|
26
|
+
parser_options-><%= field.c_name %> = <%= field.null_sentinel %>;
|
|
27
|
+
} else {
|
|
28
|
+
jclass integerClass = (*env)->FindClass(env, "java/lang/Integer");
|
|
29
|
+
jmethodID intValue = (*env)->GetMethodID(env, integerClass, "intValue", "()I");
|
|
30
|
+
parser_options-><%= field.c_name %> = (uint32_t) (*env)->CallIntMethod(env, value, intValue);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
<%- else -%>
|
|
35
|
+
{
|
|
36
|
+
jmethodID method = (*env)->GetMethodID(env, optionsClass, "<%= field.java_getter %>", "<%= field.java_jni_signature %>");
|
|
37
|
+
|
|
38
|
+
if (method != NULL) {
|
|
39
|
+
jint value = (*env)->CallIntMethod(env, options, method);
|
|
40
|
+
parser_options-><%= field.c_name %> = (uint32_t) value;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
<%- end -%>
|
|
44
|
+
<%- end -%>
|
|
45
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
#ifndef HERB_JAVA_PARSER_OPTIONS_HELPERS_H
|
|
2
|
+
#define HERB_JAVA_PARSER_OPTIONS_HELPERS_H
|
|
3
|
+
|
|
4
|
+
#include "../src/include/parser/parser_options.h"
|
|
5
|
+
|
|
6
|
+
#include <jni.h>
|
|
7
|
+
|
|
8
|
+
void herb_extract_parser_options(JNIEnv* env, jobject options, parser_options_T* parser_options);
|
|
9
|
+
|
|
10
|
+
#endif
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
export type StateDefaultKind =
|
|
2
|
+
<%- state_kinds.each do |kind| -%>
|
|
3
|
+
| <%= kind.name.inspect %>
|
|
4
|
+
<%- end -%>
|
|
5
|
+
|
|
6
|
+
export type StateValueKind =
|
|
7
|
+
<%- state_kinds.select(&:value?).each do |kind| -%>
|
|
8
|
+
| <%= kind.name.inspect %>
|
|
9
|
+
<%- end -%>
|
|
10
|
+
|
|
11
|
+
export const STATE_DEFAULT_KINDS: readonly StateDefaultKind[] = [<%= state_kinds.map { |kind| kind.name.inspect }.join(", ") %>]
|
|
12
|
+
|
|
13
|
+
export const LITERAL_STATE_KINDS: ReadonlySet<string> = new Set([<%= state_kinds.select(&:literal?).map { |kind| kind.name.inspect }.join(", ") %>])
|
|
14
|
+
|
|
15
|
+
export const UNKNOWN_STATE_KINDS: ReadonlySet<string> = new Set([<%= state_kinds.select(&:unknown?).map { |kind| kind.name.inspect }.join(", ") %>])
|
|
16
|
+
|
|
17
|
+
export const FALSY_STATE_KINDS: ReadonlySet<string> = new Set([<%= state_kinds.select(&:falsy?).map { |kind| kind.name.inspect }.join(", ") %>])
|
|
18
|
+
|
|
19
|
+
export const NILABLE_STATE_KINDS: ReadonlySet<string> = new Set([<%= state_kinds.select(&:nilable?).map { |kind| kind.name.inspect }.join(", ") %>])
|
|
20
|
+
|
|
21
|
+
export const PRISM_LITERAL_KINDS: Record<string, StateDefaultKind> = {
|
|
22
|
+
<%- state_kinds.select(&:literal?).each do |kind| -%>
|
|
23
|
+
<%- kind.prism_nodes.each do |node| -%>
|
|
24
|
+
<%= node.inspect %>: <%= kind.name.inspect %>,
|
|
25
|
+
<%- end -%>
|
|
26
|
+
<%- end -%>
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
const STATE_KIND_ARTICLES: Record<string, string> = {
|
|
30
|
+
<%- state_kinds.each do |kind| -%>
|
|
31
|
+
<%= kind.name.inspect %>: <%= kind.article.inspect %>,
|
|
32
|
+
<%- end -%>
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export function stateKindArticle(kind: string): string {
|
|
36
|
+
const known = STATE_KIND_ARTICLES[kind]
|
|
37
|
+
|
|
38
|
+
if (known) {
|
|
39
|
+
return known
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
const spelled = kind.charAt(0).toUpperCase() + kind.slice(1)
|
|
43
|
+
|
|
44
|
+
if (spelled === "") {
|
|
45
|
+
return "a value"
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
return /^[AEIOU]/.test(spelled) ? `an ${spelled}` : `a ${spelled}`
|
|
49
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export const MIRRORED_COMPARISONS: Record<string, string> = {
|
|
2
|
+
<%- state_operators.select(&:mirrored).each do |operator| -%>
|
|
3
|
+
<%= operator.operator.inspect %>: <%= operator.mirrored.inspect %>,
|
|
4
|
+
<%- end -%>
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
export const NEGATED_COMPARISONS: Record<string, string> = {
|
|
8
|
+
<%- state_operators.each do |operator| -%>
|
|
9
|
+
<%= operator.operator.inspect %>: <%= operator.negated.inspect %>,
|
|
10
|
+
<%- end -%>
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export const ORDERED_COMPARISONS: ReadonlySet<string> = new Set([<%= state_operators.select(&:ordered?).map { |operator| operator.operator.inspect }.join(", ") %>])
|
|
14
|
+
|
|
15
|
+
export const COMPARISON_OPERATORS: ReadonlySet<string> = new Set([<%= state_operators.map { |operator| operator.operator.inspect }.join(", ") %>])
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export interface StatePredicate {
|
|
2
|
+
readonly comparand?: string
|
|
3
|
+
readonly operator?: string
|
|
4
|
+
readonly kinds: string[] | null
|
|
5
|
+
readonly only: string
|
|
6
|
+
readonly rewrite?: string
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export const STATE_PREDICATES: Record<string, StatePredicate> = {
|
|
10
|
+
<%- state_predicates.each do |predicate| -%>
|
|
11
|
+
<%= predicate.literal(predicate.name) %>: {
|
|
12
|
+
<%- if predicate.comparand -%>
|
|
13
|
+
comparand: <%= predicate.literal(predicate.comparand) %>,
|
|
14
|
+
<%- end -%>
|
|
15
|
+
<%- if predicate.operator -%>
|
|
16
|
+
operator: <%= predicate.literal(predicate.operator) %>,
|
|
17
|
+
<%- end -%>
|
|
18
|
+
kinds: <%= predicate.typescript_kinds %>,
|
|
19
|
+
only: <%= predicate.literal(predicate.only) %>,
|
|
20
|
+
<%- if predicate.rewrite -%>
|
|
21
|
+
rewrite: <%= predicate.literal(predicate.rewrite) %>,
|
|
22
|
+
<%- end -%>
|
|
23
|
+
},
|
|
24
|
+
<%- end -%>
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export const STATE_PREDICATE_NAMES = Object.keys(STATE_PREDICATES)
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export interface StateTransform {
|
|
2
|
+
readonly operation: string
|
|
3
|
+
readonly kinds: string[] | null
|
|
4
|
+
readonly returns: string
|
|
5
|
+
readonly only: string
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
export const STATE_TRANSFORMS: Record<string, StateTransform> = {
|
|
9
|
+
<%- state_transforms.each do |transform| -%>
|
|
10
|
+
<%= transform.name.inspect %>: {
|
|
11
|
+
operation: <%= transform.operation.inspect %>,
|
|
12
|
+
kinds: <%= transform.typescript_kinds %>,
|
|
13
|
+
returns: <%= transform.returns.inspect %>,
|
|
14
|
+
only: <%= transform.only.inspect %>,
|
|
15
|
+
},
|
|
16
|
+
<%- end -%>
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export const STATE_TRANSFORM_NAMES = Object.keys(STATE_TRANSFORMS)
|
|
@@ -6,6 +6,7 @@ export enum HelperType {
|
|
|
6
6
|
|
|
7
7
|
export type HelperDetectStyle = "call_name" | "receiver_call"
|
|
8
8
|
export type HelperOutput = "html" | "text" | "url" | "boolean" | "void" | "object"
|
|
9
|
+
export type HelperReceiver = "view" | "form_builder"
|
|
9
10
|
|
|
10
11
|
export interface HelperArgument {
|
|
11
12
|
readonly name: string
|
|
@@ -24,6 +25,14 @@ export interface HelperOption {
|
|
|
24
25
|
readonly description: string
|
|
25
26
|
}
|
|
26
27
|
|
|
28
|
+
export interface HelperBlockArgument {
|
|
29
|
+
readonly name: string
|
|
30
|
+
readonly position: number
|
|
31
|
+
readonly type: string
|
|
32
|
+
readonly optional: boolean
|
|
33
|
+
readonly description: string
|
|
34
|
+
}
|
|
35
|
+
|
|
27
36
|
export interface HelperImplicitAttribute {
|
|
28
37
|
readonly name: string
|
|
29
38
|
readonly source: string
|
|
@@ -32,6 +41,16 @@ export interface HelperImplicitAttribute {
|
|
|
32
41
|
readonly skipWrappingFor: string[]
|
|
33
42
|
}
|
|
34
43
|
|
|
44
|
+
export type HelperContentSource = "first_arg" | "block_or_arg"
|
|
45
|
+
|
|
46
|
+
export interface HelperContent {
|
|
47
|
+
readonly source: HelperContentSource
|
|
48
|
+
readonly argPosition: number | null
|
|
49
|
+
readonly skipIfHash: boolean
|
|
50
|
+
readonly toSSuffixWhenSingle: boolean
|
|
51
|
+
readonly positionalArgumentsWithBlock: number | null
|
|
52
|
+
}
|
|
53
|
+
|
|
35
54
|
export interface HelperEntry {
|
|
36
55
|
readonly name: string
|
|
37
56
|
readonly type: HelperType
|
|
@@ -39,6 +58,7 @@ export interface HelperEntry {
|
|
|
39
58
|
readonly gem: string
|
|
40
59
|
readonly output: HelperOutput
|
|
41
60
|
readonly visibility: "public" | "internal"
|
|
61
|
+
readonly receiver: HelperReceiver
|
|
42
62
|
readonly tagName: string | null
|
|
43
63
|
readonly isVoid: boolean
|
|
44
64
|
readonly supportsBlock: boolean
|
|
@@ -49,8 +69,10 @@ export interface HelperEntry {
|
|
|
49
69
|
readonly signature: string
|
|
50
70
|
readonly documentationURL: string
|
|
51
71
|
readonly implicitAttribute: HelperImplicitAttribute | null
|
|
72
|
+
readonly content: HelperContent | null
|
|
52
73
|
readonly arguments: HelperArgument[]
|
|
53
74
|
readonly options: HelperOption[]
|
|
75
|
+
readonly blockArguments: HelperBlockArgument[]
|
|
54
76
|
readonly specialBehaviors: string[]
|
|
55
77
|
readonly aliases: string[]
|
|
56
78
|
}
|
|
@@ -63,6 +85,7 @@ const <%= helper.lower_camel_case_name %>Entry: HelperEntry = {
|
|
|
63
85
|
gem: "<%= helper.gem %>",
|
|
64
86
|
output: "<%= helper.output %>",
|
|
65
87
|
visibility: "<%= helper.visibility %>",
|
|
88
|
+
receiver: "<%= helper.receiver %>",
|
|
66
89
|
tagName: <%= helper.tag_name ? "\"#{helper.tag_name}\"" : "null" %>,
|
|
67
90
|
isVoid: <%= helper.void? %>,
|
|
68
91
|
supportsBlock: <%= helper.supports_block %>,
|
|
@@ -83,6 +106,17 @@ const <%= helper.lower_camel_case_name %>Entry: HelperEntry = {
|
|
|
83
106
|
<%- else -%>
|
|
84
107
|
implicitAttribute: null,
|
|
85
108
|
<%- end -%>
|
|
109
|
+
<%- if helper.content? -%>
|
|
110
|
+
content: {
|
|
111
|
+
source: "<%= helper.content.source %>",
|
|
112
|
+
argPosition: <%= helper.content.arg_position || "null" %>,
|
|
113
|
+
skipIfHash: <%= helper.content.skip_if_hash %>,
|
|
114
|
+
toSSuffixWhenSingle: <%= helper.content.to_s_suffix_when_single %>,
|
|
115
|
+
positionalArgumentsWithBlock: <%= helper.content.positional_arguments_with_block || "null" %>,
|
|
116
|
+
},
|
|
117
|
+
<%- else -%>
|
|
118
|
+
content: null,
|
|
119
|
+
<%- end -%>
|
|
86
120
|
arguments: [
|
|
87
121
|
<%- helper.arguments.each do |arg| -%>
|
|
88
122
|
{ name: "<%= arg.name %>", position: <%= arg.position %>, type: "<%= arg.type_display %>", optional: <%= arg.optional %>, default: <%= arg.default ? "\"#{arg.escaped_default}\"" : "null" %>, splat: <%= arg.splat %>, description: "<%= arg.escaped_description %>" },
|
|
@@ -93,6 +127,11 @@ const <%= helper.lower_camel_case_name %>Entry: HelperEntry = {
|
|
|
93
127
|
{ name: "<%= opt.name %>", type: "<%= opt.type_display %>", mapsTo: <%= opt.maps_to ? "\"#{opt.maps_to}\"" : "null" %>, description: "<%= opt.escaped_description %>" },
|
|
94
128
|
<%- end -%>
|
|
95
129
|
],
|
|
130
|
+
blockArguments: [
|
|
131
|
+
<%- helper.block_arguments.each do |arg| -%>
|
|
132
|
+
{ name: "<%= arg.name %>", position: <%= arg.position %>, type: "<%= arg.type_display %>", optional: <%= arg.optional %>, description: "<%= arg.escaped_description %>" },
|
|
133
|
+
<%- end -%>
|
|
134
|
+
],
|
|
96
135
|
specialBehaviors: [<%= helper.special_behaviors.map { |b| "\"#{b}\"" }.join(", ") %>],
|
|
97
136
|
aliases: [<%= helper.aliases.map { |a| "\"#{a}\"" }.join(", ") %>],
|
|
98
137
|
}
|
|
@@ -140,6 +179,10 @@ export function helperExists(name: string): boolean {
|
|
|
140
179
|
return name in HELPER_REGISTRY
|
|
141
180
|
}
|
|
142
181
|
|
|
182
|
+
export function viewHelperExists(name: string): boolean {
|
|
183
|
+
return HELPER_REGISTRY[name]?.receiver === "view"
|
|
184
|
+
}
|
|
185
|
+
|
|
143
186
|
export function getHelpersForTag(tagName: string): HelperEntry[] {
|
|
144
187
|
return HELPERS_BY_TAG_NAME[tagName] ?? []
|
|
145
188
|
}
|
|
@@ -163,6 +206,10 @@ export function getHelpersByOutput(output: HelperOutput): HelperEntry[] {
|
|
|
163
206
|
return Object.values(HELPER_REGISTRY).filter(entry => entry.output === output)
|
|
164
207
|
}
|
|
165
208
|
|
|
209
|
+
export function getHelpersByReceiver(receiver: HelperReceiver): HelperEntry[] {
|
|
210
|
+
return Object.values(HELPER_REGISTRY).filter(entry => entry.receiver === receiver)
|
|
211
|
+
}
|
|
212
|
+
|
|
166
213
|
export function getHelpersByModule(moduleName: string): HelperEntry[] {
|
|
167
214
|
return Object.values(HELPER_REGISTRY).filter(entry => {
|
|
168
215
|
const parts = entry.source.split("#")[0].split("::")
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
export type BuiltInComponent =
|
|
2
|
+
<%- slots_components.each do |component| -%>
|
|
3
|
+
| <%= component.name.inspect %>
|
|
4
|
+
<%- end -%>
|
|
5
|
+
|
|
6
|
+
export type ComponentAttributeType =
|
|
7
|
+
<%- slots_components.flat_map { |component| component.attributes.map(&:type) }.uniq.each do |type| -%>
|
|
8
|
+
| <%= type.inspect %>
|
|
9
|
+
<%- end -%>
|
|
10
|
+
|
|
11
|
+
export interface ComponentAttributeDefinition {
|
|
12
|
+
name: string
|
|
13
|
+
type: ComponentAttributeType
|
|
14
|
+
description: string
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export interface ComponentDefinition {
|
|
18
|
+
name: BuiltInComponent
|
|
19
|
+
void: boolean
|
|
20
|
+
deferred: boolean
|
|
21
|
+
parents: readonly BuiltInComponent[] | null
|
|
22
|
+
description: string
|
|
23
|
+
attributes: readonly ComponentAttributeDefinition[]
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export const COMPONENT_DEFINITIONS: Readonly<Record<BuiltInComponent, ComponentDefinition>> = {
|
|
27
|
+
<%- slots_components.each do |component| -%>
|
|
28
|
+
<%= component.name %>: {
|
|
29
|
+
name: <%= component.name.inspect %>,
|
|
30
|
+
void: <%= component.void? %>,
|
|
31
|
+
deferred: <%= component.deferred? %>,
|
|
32
|
+
parents: <%= component.parents ? "[#{component.parents.map(&:inspect).join(", ")}]" : "null" %>,
|
|
33
|
+
description: <%= component.description.inspect %>,
|
|
34
|
+
<%- if component.attributes.empty? -%>
|
|
35
|
+
attributes: [],
|
|
36
|
+
<%- else -%>
|
|
37
|
+
attributes: [
|
|
38
|
+
<%- component.attributes.each do |attribute| -%>
|
|
39
|
+
{ name: <%= attribute.name.inspect %>, type: <%= attribute.type.inspect %>, description: <%= attribute.description.inspect %> },
|
|
40
|
+
<%- end -%>
|
|
41
|
+
],
|
|
42
|
+
<%- end -%>
|
|
43
|
+
},
|
|
44
|
+
<%- end -%>
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
export const BUILT_IN_COMPONENTS: readonly BuiltInComponent[] = Object.keys(COMPONENT_DEFINITIONS) as BuiltInComponent[]
|
|
48
|
+
|
|
49
|
+
export const BUILT_IN_COMPONENT_NAMES: ReadonlySet<string> = new Set(BUILT_IN_COMPONENTS)
|
|
50
|
+
|
|
51
|
+
export const DEFERRED_COMPONENTS: ReadonlySet<string> = new Set(BUILT_IN_COMPONENTS.filter((name) => COMPONENT_DEFINITIONS[name].deferred))
|
|
52
|
+
|
|
53
|
+
export function isBuiltInComponent(tagName: string | null | undefined): tagName is BuiltInComponent {
|
|
54
|
+
if (!tagName) return false
|
|
55
|
+
|
|
56
|
+
return BUILT_IN_COMPONENT_NAMES.has(tagName)
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
export function isComponentTagName(tagName: string | null | undefined): boolean {
|
|
60
|
+
if (!tagName) return false
|
|
61
|
+
|
|
62
|
+
return /^[A-Z][A-Za-z0-9]*$/.test(tagName) && /[a-z]/.test(tagName)
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
export function componentAttribute(component: BuiltInComponent, attributeName: string): ComponentAttributeDefinition | undefined {
|
|
66
|
+
return COMPONENT_DEFINITIONS[component].attributes.find((attribute) => attribute.name === attributeName)
|
|
67
|
+
}
|
|
@@ -67,8 +67,10 @@ export interface Serialized<%= error.name %> {
|
|
|
67
67
|
<%= field.name %>: string | null;
|
|
68
68
|
<%- when Herb::Template::PositionField -%>
|
|
69
69
|
<%= field.name %>: SerializedPosition;
|
|
70
|
+
<%- when Herb::Template::SizeTField -%>
|
|
71
|
+
<%= field.name %>: number;
|
|
70
72
|
<%- else -%>
|
|
71
|
-
|
|
73
|
+
<% raise "Unexpected type: #{field.class}" %>
|
|
72
74
|
<%- end -%>
|
|
73
75
|
<%- end -%>
|
|
74
76
|
}
|
|
@@ -87,8 +89,10 @@ export interface <%= error.name %>Props {
|
|
|
87
89
|
<%= field.name %>: string | null;
|
|
88
90
|
<%- when Herb::Template::PositionField -%>
|
|
89
91
|
<%= field.name %>: Position;
|
|
92
|
+
<%- when Herb::Template::SizeTField -%>
|
|
93
|
+
<%= field.name %>: number;
|
|
90
94
|
<%- else -%>
|
|
91
|
-
|
|
95
|
+
<% raise "Unexpected type: #{field.class}" %>
|
|
92
96
|
<%- end -%>
|
|
93
97
|
<%- end -%>
|
|
94
98
|
}
|
|
@@ -104,8 +108,10 @@ export class <%= error.name %> extends HerbError {
|
|
|
104
108
|
readonly <%= field.name %>: string | null;
|
|
105
109
|
<%- when Herb::Template::PositionField -%>
|
|
106
110
|
readonly <%= field.name %>: Position;
|
|
111
|
+
<%- when Herb::Template::SizeTField -%>
|
|
112
|
+
readonly <%= field.name %>: number;
|
|
107
113
|
<%- else -%>
|
|
108
|
-
|
|
114
|
+
<% raise "Unexpected type: #{field.class}" %>
|
|
109
115
|
<%- end -%>
|
|
110
116
|
<%- end -%>
|
|
111
117
|
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export type ForeignContentKind = "raw_text" | "rcdata"
|
|
2
|
+
|
|
3
|
+
export interface ForeignContentElement {
|
|
4
|
+
name: string
|
|
5
|
+
kind: ForeignContentKind
|
|
6
|
+
endTag: boolean
|
|
7
|
+
htmlOnly: boolean
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export const FOREIGN_CONTENT_ELEMENTS: readonly ForeignContentElement[] = [
|
|
11
|
+
<%- foreign_content_elements.each do |element| -%>
|
|
12
|
+
{ name: <%= element.name.inspect %>, kind: <%= element.kind.inspect %>, endTag: <%= element.end_tag? %>, htmlOnly: <%= element.html_only? %> },
|
|
13
|
+
<%- end -%>
|
|
14
|
+
]
|
|
15
|
+
|
|
16
|
+
export const RAW_TEXT_ELEMENTS: ReadonlySet<string> = new Set([<%= foreign_content_elements.select(&:raw_text?).map { |element| element.name.inspect }.join(", ") %>])
|
|
17
|
+
|
|
18
|
+
export const RCDATA_ELEMENTS: ReadonlySet<string> = new Set([<%= foreign_content_elements.select(&:rcdata?).map { |element| element.name.inspect }.join(", ") %>])
|