Add nginx to components, fixed basic highlighting, add a few tests
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885
diff --git a/components.js b/components.js
index 26ba89f..3a1b705 100644
--- a/components.js
+++ b/components.js
@@ -287,6 +287,11 @@ var components = {
"title": "NASM",
"owner": "rbmj"
},
+ "nginx": {
+ "title": "nginx",
+ "owner": "westonganger",
+ "require": "clike"
+ },
"nim": {
"title": "Nim",
"owner": "Golmote"
diff --git a/components/prism-nginx.js b/components/prism-nginx.js
index db3da23..f094267 100644
--- a/components/prism-nginx.js
+++ b/components/prism-nginx.js
@@ -1,18 +1,11 @@
Prism.languages.nginx = Prism.languages.extend('clike', {
- comment: {
- lookbehind: true,
+ 'comment': {
pattern: /(^|[^"{\\])#.*/,
+ lookbehind: true
},
- keyword: /\b(CONTENT_|DOCUMENT_|GATEWAY_|HTTP_|HTTPS|if_not_empty|PATH_|QUERY_|REDIRECT_|REMOTE_|REQUEST_|SCGI|SCRIPT_|SERVER_|http|server|events|location|include|accept_mutex|accept_mutex_delay|access_log|add_after_body|add_before_body|add_header|addition_types|aio|alias|allow|ancient_browser|ancient_browser_value|auth|auth_basic|auth_basic_user_file|auth_http|auth_http_header|auth_http_timeout|autoindex|autoindex_exact_size|autoindex_localtime|break|charset|charset_map|charset_types|chunked_transfer_encoding|client_body_buffer_size|client_body_in_file_only|client_body_in_single_buffer|client_body_temp_path|client_body_timeout|client_header_buffer_size|client_header_timeout|client_max_body_size|connection_pool_size|create_full_put_path|daemon|dav_access|dav_methods|debug_connection|debug_points|default_type|deny|devpoll_changes|devpoll_events|directio|directio_alignment|disable_symlinks|empty_gif|env|epoll_events|error_log|error_page|expires|fastcgi_buffer_size|fastcgi_buffers|fastcgi_busy_buffers_size|fastcgi_cache|fastcgi_cache_bypass|fastcgi_cache_key|fastcgi_cache_lock|fastcgi_cache_lock_timeout|fastcgi_cache_methods|fastcgi_cache_min_uses|fastcgi_cache_path|fastcgi_cache_purge|fastcgi_cache_use_stale|fastcgi_cache_valid|fastcgi_connect_timeout|fastcgi_hide_header|fastcgi_ignore_client_abort|fastcgi_ignore_headers|fastcgi_index|fastcgi_intercept_errors|fastcgi_keep_conn|fastcgi_max_temp_file_size|fastcgi_next_upstream|fastcgi_no_cache|fastcgi_param|fastcgi_pass|fastcgi_pass_header|fastcgi_read_timeout|fastcgi_redirect_errors|fastcgi_send_timeout|fastcgi_split_path_info|fastcgi_store|fastcgi_store_access|fastcgi_temp_file_write_size|fastcgi_temp_path|flv|geo|geoip_city|geoip_country|google_perftools_profiles|gzip|gzip_buffers|gzip_comp_level|gzip_disable|gzip_http_version|gzip_min_length|gzip_proxied|gzip_static|gzip_types|gzip_vary|if|if_modified_since|ignore_invalid_headers|image_filter|image_filter_buffer|image_filter_jpeg_quality|image_filter_sharpen|image_filter_transparency|imap_capabilities|imap_client_buffer|include|index|internal|ip_hash|keepalive|keepalive_disable|keepalive_requests|keepalive_timeout|kqueue_changes|kqueue_events|large_client_header_buffers|limit_conn|limit_conn_log_level|limit_conn_zone|limit_except|limit_rate|limit_rate_after|limit_req|limit_req_log_level|limit_req_zone|limit_zone|lingering_close|lingering_time|lingering_timeout|listen|location|lock_file|log_format|log_format_combined|log_not_found|log_subrequest|map|map_hash_bucket_size|map_hash_max_size|master_process|max_ranges|memcached_buffer_size|memcached_connect_timeout|memcached_next_upstream|memcached_pass|memcached_read_timeout|memcached_send_timeout|merge_slashes|min_delete_depth|modern_browser|modern_browser_value|mp4|mp4_buffer_size|mp4_max_buffer_size|msie_padding|msie_refresh|multi_accept|open_file_cache|open_file_cache_errors|open_file_cache_min_uses|open_file_cache_valid|open_log_file_cache|optimize_server_names|override_charset|pcre_jit|perl|perl_modules|perl_require|perl_set|pid|pop3_auth|pop3_capabilities|port_in_redirect|post_action|postpone_output|protocol|proxy|proxy_buffer|proxy_buffer_size|proxy_buffering|proxy_buffers|proxy_busy_buffers_size|proxy_cache|proxy_cache_bypass|proxy_cache_key|proxy_cache_lock|proxy_cache_lock_timeout|proxy_cache_methods|proxy_cache_min_uses|proxy_cache_path|proxy_cache_use_stale|proxy_cache_valid|proxy_connect_timeout|proxy_cookie_domain|proxy_cookie_path|proxy_headers_hash_bucket_size|proxy_headers_hash_max_size|proxy_hide_header|proxy_http_version|proxy_ignore_client_abort|proxy_ignore_headers|proxy_intercept_errors|proxy_max_temp_file_size|proxy_method|proxy_next_upstream|proxy_no_cache|proxy_pass|proxy_pass_error_message|proxy_pass_header|proxy_pass_request_body|proxy_pass_request_headers|proxy_read_timeout|proxy_redirect|proxy_redirect_errors|proxy_send_lowat|proxy_send_timeout|proxy_set_body|proxy_set_header|proxy_ssl_session_reuse|proxy_store|proxy_store_access|proxy_temp_file_write_size|proxy_temp_path|proxy_timeout|proxy_upstream_fail_timeout|proxy_upstream_max_fails|random_index|read_ahead|real_ip_header|recursive_error_pages|request_pool_size|reset_timedout_connection|resolver|resolver_timeout|return|rewrite|root|rtsig_overflow_events|rtsig_overflow_test|rtsig_overflow_threshold|rtsig_signo|satisfy|satisfy_any|secure_link_secret|send_lowat|send_timeout|sendfile|sendfile_max_chunk|server|server_name|server_name_in_redirect|server_names_hash_bucket_size|server_names_hash_max_size|server_tokens|set|set_real_ip_from|smtp_auth|smtp_capabilities|so_keepalive|source_charset|split_clients|ssi|ssi_silent_errors|ssi_types|ssi_value_length|ssl|ssl_certificate|ssl_certificate_key|ssl_ciphers|ssl_client_certificate|ssl_crl|ssl_dhparam|ssl_engine|ssl_prefer_server_ciphers|ssl_protocols|ssl_session_cache|ssl_session_timeout|ssl_verify_client|ssl_verify_depth|starttls|stub_status|sub_filter|sub_filter_once|sub_filter_types|tcp_nodelay|tcp_nopush|timeout|timer_resolution|try_files|types|types_hash_bucket_size|types_hash_max_size|underscores_in_headers|uninitialized_variable_warn|upstream|use|user|userid|userid_domain|userid_expires|userid_name|userid_p3p|userid_path|userid_service|valid_referers|variables_hash_bucket_size|variables_hash_max_size|worker_connections|worker_cpu_affinity|worker_priority|worker_processes|worker_rlimit_core|worker_rlimit_nofile|worker_rlimit_sigpending|working_directory|xclient|xml_entities|xslt_entities|xslt_stylesheet|xslt_types)\b/i,
+ 'keyword': /\b(?:CONTENT_|DOCUMENT_|GATEWAY_|HTTP_|HTTPS|if_not_empty|PATH_|QUERY_|REDIRECT_|REMOTE_|REQUEST_|SCGI|SCRIPT_|SERVER_|http|server|events|location|include|accept_mutex|accept_mutex_delay|access_log|add_after_body|add_before_body|add_header|addition_types|aio|alias|allow|ancient_browser|ancient_browser_value|auth|auth_basic|auth_basic_user_file|auth_http|auth_http_header|auth_http_timeout|autoindex|autoindex_exact_size|autoindex_localtime|break|charset|charset_map|charset_types|chunked_transfer_encoding|client_body_buffer_size|client_body_in_file_only|client_body_in_single_buffer|client_body_temp_path|client_body_timeout|client_header_buffer_size|client_header_timeout|client_max_body_size|connection_pool_size|create_full_put_path|daemon|dav_access|dav_methods|debug_connection|debug_points|default_type|deny|devpoll_changes|devpoll_events|directio|directio_alignment|disable_symlinks|empty_gif|env|epoll_events|error_log|error_page|expires|fastcgi_buffer_size|fastcgi_buffers|fastcgi_busy_buffers_size|fastcgi_cache|fastcgi_cache_bypass|fastcgi_cache_key|fastcgi_cache_lock|fastcgi_cache_lock_timeout|fastcgi_cache_methods|fastcgi_cache_min_uses|fastcgi_cache_path|fastcgi_cache_purge|fastcgi_cache_use_stale|fastcgi_cache_valid|fastcgi_connect_timeout|fastcgi_hide_header|fastcgi_ignore_client_abort|fastcgi_ignore_headers|fastcgi_index|fastcgi_intercept_errors|fastcgi_keep_conn|fastcgi_max_temp_file_size|fastcgi_next_upstream|fastcgi_no_cache|fastcgi_param|fastcgi_pass|fastcgi_pass_header|fastcgi_read_timeout|fastcgi_redirect_errors|fastcgi_send_timeout|fastcgi_split_path_info|fastcgi_store|fastcgi_store_access|fastcgi_temp_file_write_size|fastcgi_temp_path|flv|geo|geoip_city|geoip_country|google_perftools_profiles|gzip|gzip_buffers|gzip_comp_level|gzip_disable|gzip_http_version|gzip_min_length|gzip_proxied|gzip_static|gzip_types|gzip_vary|if|if_modified_since|ignore_invalid_headers|image_filter|image_filter_buffer|image_filter_jpeg_quality|image_filter_sharpen|image_filter_transparency|imap_capabilities|imap_client_buffer|include|index|internal|ip_hash|keepalive|keepalive_disable|keepalive_requests|keepalive_timeout|kqueue_changes|kqueue_events|large_client_header_buffers|limit_conn|limit_conn_log_level|limit_conn_zone|limit_except|limit_rate|limit_rate_after|limit_req|limit_req_log_level|limit_req_zone|limit_zone|lingering_close|lingering_time|lingering_timeout|listen|location|lock_file|log_format|log_format_combined|log_not_found|log_subrequest|map|map_hash_bucket_size|map_hash_max_size|master_process|max_ranges|memcached_buffer_size|memcached_connect_timeout|memcached_next_upstream|memcached_pass|memcached_read_timeout|memcached_send_timeout|merge_slashes|min_delete_depth|modern_browser|modern_browser_value|mp4|mp4_buffer_size|mp4_max_buffer_size|msie_padding|msie_refresh|multi_accept|open_file_cache|open_file_cache_errors|open_file_cache_min_uses|open_file_cache_valid|open_log_file_cache|optimize_server_names|override_charset|pcre_jit|perl|perl_modules|perl_require|perl_set|pid|pop3_auth|pop3_capabilities|port_in_redirect|post_action|postpone_output|protocol|proxy|proxy_buffer|proxy_buffer_size|proxy_buffering|proxy_buffers|proxy_busy_buffers_size|proxy_cache|proxy_cache_bypass|proxy_cache_key|proxy_cache_lock|proxy_cache_lock_timeout|proxy_cache_methods|proxy_cache_min_uses|proxy_cache_path|proxy_cache_use_stale|proxy_cache_valid|proxy_connect_timeout|proxy_cookie_domain|proxy_cookie_path|proxy_headers_hash_bucket_size|proxy_headers_hash_max_size|proxy_hide_header|proxy_http_version|proxy_ignore_client_abort|proxy_ignore_headers|proxy_intercept_errors|proxy_max_temp_file_size|proxy_method|proxy_next_upstream|proxy_no_cache|proxy_pass|proxy_pass_error_message|proxy_pass_header|proxy_pass_request_body|proxy_pass_request_headers|proxy_read_timeout|proxy_redirect|proxy_redirect_errors|proxy_send_lowat|proxy_send_timeout|proxy_set_body|proxy_set_header|proxy_ssl_session_reuse|proxy_store|proxy_store_access|proxy_temp_file_write_size|proxy_temp_path|proxy_timeout|proxy_upstream_fail_timeout|proxy_upstream_max_fails|random_index|read_ahead|real_ip_header|recursive_error_pages|request_pool_size|reset_timedout_connection|resolver|resolver_timeout|return|rewrite|root|rtsig_overflow_events|rtsig_overflow_test|rtsig_overflow_threshold|rtsig_signo|satisfy|satisfy_any|secure_link_secret|send_lowat|send_timeout|sendfile|sendfile_max_chunk|server|server_name|server_name_in_redirect|server_names_hash_bucket_size|server_names_hash_max_size|server_tokens|set|set_real_ip_from|smtp_auth|smtp_capabilities|so_keepalive|source_charset|split_clients|ssi|ssi_silent_errors|ssi_types|ssi_value_length|ssl|ssl_certificate|ssl_certificate_key|ssl_ciphers|ssl_client_certificate|ssl_crl|ssl_dhparam|ssl_engine|ssl_prefer_server_ciphers|ssl_protocols|ssl_session_cache|ssl_session_timeout|ssl_verify_client|ssl_verify_depth|starttls|stub_status|sub_filter|sub_filter_once|sub_filter_types|tcp_nodelay|tcp_nopush|timeout|timer_resolution|try_files|types|types_hash_bucket_size|types_hash_max_size|underscores_in_headers|uninitialized_variable_warn|upstream|use|user|userid|userid_domain|userid_expires|userid_name|userid_p3p|userid_path|userid_service|valid_referers|variables_hash_bucket_size|variables_hash_max_size|worker_connections|worker_cpu_affinity|worker_priority|worker_processes|worker_rlimit_core|worker_rlimit_nofile|worker_rlimit_sigpending|working_directory|xclient|xml_entities|xslt_entities|xslt_stylesheet|xslt_types)\b/i,
});
Prism.languages.insertBefore('nginx', 'keyword', {
- variable:/\$[a-zA-Z_]+/i,
- 'package': {
- pattern: /(\\|namespace\s+|use\s+)[\w\\]+/,
- lookbehind: true,
- inside: {
- punctuation: /\\/
- }
- }
-});
+ 'variable': /\$[a-z_]+/i
+});
\ No newline at end of file
diff --git a/components/prism-nginx.min.js b/components/prism-nginx.min.js
new file mode 100644
index 0000000..b0965ed
--- /dev/null
+++ b/components/prism-nginx.min.js
@@ -0,0 +1 @@
+Prism.languages.nginx=Prism.languages.extend("clike",{comment:{pattern:/(^|[^"{\\])#.*/,lookbehind:!0},keyword:/\b(?:CONTENT_|DOCUMENT_|GATEWAY_|HTTP_|HTTPS|if_not_empty|PATH_|QUERY_|REDIRECT_|REMOTE_|REQUEST_|SCGI|SCRIPT_|SERVER_|http|server|events|location|include|accept_mutex|accept_mutex_delay|access_log|add_after_body|add_before_body|add_header|addition_types|aio|alias|allow|ancient_browser|ancient_browser_value|auth|auth_basic|auth_basic_user_file|auth_http|auth_http_header|auth_http_timeout|autoindex|autoindex_exact_size|autoindex_localtime|break|charset|charset_map|charset_types|chunked_transfer_encoding|client_body_buffer_size|client_body_in_file_only|client_body_in_single_buffer|client_body_temp_path|client_body_timeout|client_header_buffer_size|client_header_timeout|client_max_body_size|connection_pool_size|create_full_put_path|daemon|dav_access|dav_methods|debug_connection|debug_points|default_type|deny|devpoll_changes|devpoll_events|directio|directio_alignment|disable_symlinks|empty_gif|env|epoll_events|error_log|error_page|expires|fastcgi_buffer_size|fastcgi_buffers|fastcgi_busy_buffers_size|fastcgi_cache|fastcgi_cache_bypass|fastcgi_cache_key|fastcgi_cache_lock|fastcgi_cache_lock_timeout|fastcgi_cache_methods|fastcgi_cache_min_uses|fastcgi_cache_path|fastcgi_cache_purge|fastcgi_cache_use_stale|fastcgi_cache_valid|fastcgi_connect_timeout|fastcgi_hide_header|fastcgi_ignore_client_abort|fastcgi_ignore_headers|fastcgi_index|fastcgi_intercept_errors|fastcgi_keep_conn|fastcgi_max_temp_file_size|fastcgi_next_upstream|fastcgi_no_cache|fastcgi_param|fastcgi_pass|fastcgi_pass_header|fastcgi_read_timeout|fastcgi_redirect_errors|fastcgi_send_timeout|fastcgi_split_path_info|fastcgi_store|fastcgi_store_access|fastcgi_temp_file_write_size|fastcgi_temp_path|flv|geo|geoip_city|geoip_country|google_perftools_profiles|gzip|gzip_buffers|gzip_comp_level|gzip_disable|gzip_http_version|gzip_min_length|gzip_proxied|gzip_static|gzip_types|gzip_vary|if|if_modified_since|ignore_invalid_headers|image_filter|image_filter_buffer|image_filter_jpeg_quality|image_filter_sharpen|image_filter_transparency|imap_capabilities|imap_client_buffer|include|index|internal|ip_hash|keepalive|keepalive_disable|keepalive_requests|keepalive_timeout|kqueue_changes|kqueue_events|large_client_header_buffers|limit_conn|limit_conn_log_level|limit_conn_zone|limit_except|limit_rate|limit_rate_after|limit_req|limit_req_log_level|limit_req_zone|limit_zone|lingering_close|lingering_time|lingering_timeout|listen|location|lock_file|log_format|log_format_combined|log_not_found|log_subrequest|map|map_hash_bucket_size|map_hash_max_size|master_process|max_ranges|memcached_buffer_size|memcached_connect_timeout|memcached_next_upstream|memcached_pass|memcached_read_timeout|memcached_send_timeout|merge_slashes|min_delete_depth|modern_browser|modern_browser_value|mp4|mp4_buffer_size|mp4_max_buffer_size|msie_padding|msie_refresh|multi_accept|open_file_cache|open_file_cache_errors|open_file_cache_min_uses|open_file_cache_valid|open_log_file_cache|optimize_server_names|override_charset|pcre_jit|perl|perl_modules|perl_require|perl_set|pid|pop3_auth|pop3_capabilities|port_in_redirect|post_action|postpone_output|protocol|proxy|proxy_buffer|proxy_buffer_size|proxy_buffering|proxy_buffers|proxy_busy_buffers_size|proxy_cache|proxy_cache_bypass|proxy_cache_key|proxy_cache_lock|proxy_cache_lock_timeout|proxy_cache_methods|proxy_cache_min_uses|proxy_cache_path|proxy_cache_use_stale|proxy_cache_valid|proxy_connect_timeout|proxy_cookie_domain|proxy_cookie_path|proxy_headers_hash_bucket_size|proxy_headers_hash_max_size|proxy_hide_header|proxy_http_version|proxy_ignore_client_abort|proxy_ignore_headers|proxy_intercept_errors|proxy_max_temp_file_size|proxy_method|proxy_next_upstream|proxy_no_cache|proxy_pass|proxy_pass_error_message|proxy_pass_header|proxy_pass_request_body|proxy_pass_request_headers|proxy_read_timeout|proxy_redirect|proxy_redirect_errors|proxy_send_lowat|proxy_send_timeout|proxy_set_body|proxy_set_header|proxy_ssl_session_reuse|proxy_store|proxy_store_access|proxy_temp_file_write_size|proxy_temp_path|proxy_timeout|proxy_upstream_fail_timeout|proxy_upstream_max_fails|random_index|read_ahead|real_ip_header|recursive_error_pages|request_pool_size|reset_timedout_connection|resolver|resolver_timeout|return|rewrite|root|rtsig_overflow_events|rtsig_overflow_test|rtsig_overflow_threshold|rtsig_signo|satisfy|satisfy_any|secure_link_secret|send_lowat|send_timeout|sendfile|sendfile_max_chunk|server|server_name|server_name_in_redirect|server_names_hash_bucket_size|server_names_hash_max_size|server_tokens|set|set_real_ip_from|smtp_auth|smtp_capabilities|so_keepalive|source_charset|split_clients|ssi|ssi_silent_errors|ssi_types|ssi_value_length|ssl|ssl_certificate|ssl_certificate_key|ssl_ciphers|ssl_client_certificate|ssl_crl|ssl_dhparam|ssl_engine|ssl_prefer_server_ciphers|ssl_protocols|ssl_session_cache|ssl_session_timeout|ssl_verify_client|ssl_verify_depth|starttls|stub_status|sub_filter|sub_filter_once|sub_filter_types|tcp_nodelay|tcp_nopush|timeout|timer_resolution|try_files|types|types_hash_bucket_size|types_hash_max_size|underscores_in_headers|uninitialized_variable_warn|upstream|use|user|userid|userid_domain|userid_expires|userid_name|userid_p3p|userid_path|userid_service|valid_referers|variables_hash_bucket_size|variables_hash_max_size|worker_connections|worker_cpu_affinity|worker_priority|worker_processes|worker_rlimit_core|worker_rlimit_nofile|worker_rlimit_sigpending|working_directory|xclient|xml_entities|xslt_entities|xslt_stylesheet|xslt_types)\b/i}),Prism.languages.insertBefore("nginx","keyword",{variable:/\$[a-z_]+/i});
\ No newline at end of file
diff --git a/examples/prism-nginx.html b/examples/prism-nginx.html
index 231432c..6ea8b05 100644
--- a/examples/prism-nginx.html
+++ b/examples/prism-nginx.html
@@ -1,19 +1,11 @@
<h1>Nginx</h1>
<p>To use this language, use the class "language-nginx".</p>
-<h2>Single-line comments</h2>
+<h2>Comments</h2>
<pre><code># This is a comment</code></pre>
-<h2>Strings</h2>
-<pre><code>"foo \"bar\" baz"
-'foo \'bar\' baz'</code></pre>
-
-<h2>Regular expressions</h2>
-<pre><code>/foo?[ ]*bar/</code></pre>
-
<h2>Variables</h2>
-<pre><code>
-fastcgi_param SERVER_NAME $server_name;</code></pre>
+<pre><code>fastcgi_param SERVER_NAME $server_name;</code></pre>
<h2>Server Block</h2>
<pre><code>
@@ -33,7 +25,4 @@ server { # simple reverse-proxy
location / {
proxy_pass http://127.0.0.1:8080;
}
-}</code></pre>
-
-<h2>Known failures</h2>
-<p>N/A</p>
+}</code></pre>
\ No newline at end of file
diff --git a/plugins/autoloader/prism-autoloader.js b/plugins/autoloader/prism-autoloader.js
index f7e1e66..6bcbec7 100644
--- a/plugins/autoloader/prism-autoloader.js
+++ b/plugins/autoloader/prism-autoloader.js
@@ -4,7 +4,7 @@
}
// The dependencies map is built automatically with gulp
- var lang_dependencies = /*languages_placeholder[*/{"javascript":"clike","actionscript":"javascript","aspnet":"markup","bash":"clike","bison":"c","c":"clike","csharp":"clike","cpp":"c","coffeescript":"javascript","css-extras":"css","d":"clike","dart":"clike","fsharp":"clike","glsl":"clike","go":"clike","groovy":"clike","haml":"ruby","handlebars":"markup","jade":"javascript","java":"clike","less":"css","markdown":"markup","objectivec":"c","php":"clike","php-extras":"php","processing":"clike","qore":"clike","jsx":["markup","javascript"],"ruby":"clike","sass":"css","scss":"css","scala":"java","smarty":"markup","swift":"clike","textile":"markup","twig":"markup","typescript":"javascript","wiki":"markup"}/*]*/;
+ var lang_dependencies = /*languages_placeholder[*/{"javascript":"clike","actionscript":"javascript","aspnet":"markup","bash":"clike","bison":"c","c":"clike","csharp":"clike","cpp":"c","coffeescript":"javascript","css-extras":"css","d":"clike","dart":"clike","fsharp":"clike","glsl":"clike","go":"clike","groovy":"clike","haml":"ruby","handlebars":"markup","jade":"javascript","java":"clike","less":"css","markdown":"markup","nginx":"clike","objectivec":"c","php":"clike","php-extras":"php","processing":"clike","qore":"clike","jsx":["markup","javascript"],"ruby":"clike","sass":"css","scss":"css","scala":"java","smarty":"markup","swift":"clike","textile":"markup","twig":"markup","typescript":"javascript","wiki":"markup"}/*]*/;
var lang_data = {};
diff --git a/plugins/autoloader/prism-autoloader.min.js b/plugins/autoloader/prism-autoloader.min.js
index 8fd9ed8..6ab53c7 100644
--- a/plugins/autoloader/prism-autoloader.min.js
+++ b/plugins/autoloader/prism-autoloader.min.js
@@ -1 +1 @@
-!function(){if("undefined"!=typeof self&&self.Prism&&self.document&&document.createElement){var e={javascript:"clike",actionscript:"javascript",aspnet:"markup",bash:"clike",bison:"c",c:"clike",csharp:"clike",cpp:"c",coffeescript:"javascript","css-extras":"css",d:"clike",dart:"clike",fsharp:"clike",glsl:"clike",go:"clike",groovy:"clike",haml:"ruby",handlebars:"markup",jade:"javascript",java:"clike",less:"css",markdown:"markup",objectivec:"c",php:"clike","php-extras":"php",processing:"clike",qore:"clike",jsx:["markup","javascript"],ruby:"clike",sass:"css",scss:"css",scala:"java",smarty:"markup",swift:"clike",textile:"markup",twig:"markup",typescript:"javascript",wiki:"markup"},c={},a=Prism.plugins.autoloader={languages_path:"components/",use_minified:!0},s=function(e,c,a){var s=document.createElement("script");s.src=e,s.async=!0,s.onload=function(){document.body.removeChild(s),c&&c()},s.onerror=function(){document.body.removeChild(s),a&&a()},document.body.appendChild(s)},n=function(e){return a.languages_path+"prism-"+e+(a.use_minified?".min":"")+".js"},r=function(e,a){var s=c[e];s||(s=c[e]={});var n=a.getAttribute("data-dependencies");!n&&a.parentNode&&"pre"===a.parentNode.tagName.toLowerCase()&&(n=a.parentNode.getAttribute("data-dependencies")),n=n?n.split(/\s*,\s*/g):[],i(n,function(){t(e,function(){Prism.highlightElement(a)})})},i=function(e,c,a){"string"==typeof e&&(e=[e]);var s=0,n=e.length,r=function(){n>s?t(e[s],function(){s++,r()},function(){a&&a(e[s])}):s===n&&c&&c(e)};r()},t=function(a,r,t){var u=function(){var e=!1;a.indexOf("!")>=0&&(e=!0,a=a.replace("!",""));var i=c[a];if(i||(i=c[a]={}),r&&(i.success_callbacks||(i.success_callbacks=[]),i.success_callbacks.push(r)),t&&(i.error_callbacks||(i.error_callbacks=[]),i.error_callbacks.push(t)),!e&&Prism.languages[a])l(a);else if(!e&&i.error)o(a);else if(e||!i.loading){i.loading=!0;var u=n(a);s(u,function(){i.loading=!1,l(a)},function(){i.loading=!1,i.error=!0,o(a)})}},p=e[a];p&&p.length?i(p,u):u()},l=function(e){c[e]&&c[e].success_callbacks&&c[e].success_callbacks.length&&c[e].success_callbacks.forEach(function(c){c(e)})},o=function(e){c[e]&&c[e].error_callbacks&&c[e].error_callbacks.length&&c[e].error_callbacks.forEach(function(c){c(e)})};Prism.hooks.add("complete",function(e){e.element&&e.language&&!e.grammar&&r(e.language,e.element)})}}();
\ No newline at end of file
+!function(){if("undefined"!=typeof self&&self.Prism&&self.document&&document.createElement){var e={javascript:"clike",actionscript:"javascript",aspnet:"markup",bash:"clike",bison:"c",c:"clike",csharp:"clike",cpp:"c",coffeescript:"javascript","css-extras":"css",d:"clike",dart:"clike",fsharp:"clike",glsl:"clike",go:"clike",groovy:"clike",haml:"ruby",handlebars:"markup",jade:"javascript",java:"clike",less:"css",markdown:"markup",nginx:"clike",objectivec:"c",php:"clike","php-extras":"php",processing:"clike",qore:"clike",jsx:["markup","javascript"],ruby:"clike",sass:"css",scss:"css",scala:"java",smarty:"markup",swift:"clike",textile:"markup",twig:"markup",typescript:"javascript",wiki:"markup"},c={},a=Prism.plugins.autoloader={languages_path:"components/",use_minified:!0},s=function(e,c,a){var s=document.createElement("script");s.src=e,s.async=!0,s.onload=function(){document.body.removeChild(s),c&&c()},s.onerror=function(){document.body.removeChild(s),a&&a()},document.body.appendChild(s)},n=function(e){return a.languages_path+"prism-"+e+(a.use_minified?".min":"")+".js"},r=function(e,a){var s=c[e];s||(s=c[e]={});var n=a.getAttribute("data-dependencies");!n&&a.parentNode&&"pre"===a.parentNode.tagName.toLowerCase()&&(n=a.parentNode.getAttribute("data-dependencies")),n=n?n.split(/\s*,\s*/g):[],i(n,function(){t(e,function(){Prism.highlightElement(a)})})},i=function(e,c,a){"string"==typeof e&&(e=[e]);var s=0,n=e.length,r=function(){n>s?t(e[s],function(){s++,r()},function(){a&&a(e[s])}):s===n&&c&&c(e)};r()},t=function(a,r,t){var u=function(){var e=!1;a.indexOf("!")>=0&&(e=!0,a=a.replace("!",""));var i=c[a];if(i||(i=c[a]={}),r&&(i.success_callbacks||(i.success_callbacks=[]),i.success_callbacks.push(r)),t&&(i.error_callbacks||(i.error_callbacks=[]),i.error_callbacks.push(t)),!e&&Prism.languages[a])l(a);else if(!e&&i.error)o(a);else if(e||!i.loading){i.loading=!0;var u=n(a);s(u,function(){i.loading=!1,l(a)},function(){i.loading=!1,i.error=!0,o(a)})}},p=e[a];p&&p.length?i(p,u):u()},l=function(e){c[e]&&c[e].success_callbacks&&c[e].success_callbacks.length&&c[e].success_callbacks.forEach(function(c){c(e)})},o=function(e){c[e]&&c[e].error_callbacks&&c[e].error_callbacks.length&&c[e].error_callbacks.forEach(function(c){c(e)})};Prism.hooks.add("complete",function(e){e.element&&e.language&&!e.grammar&&r(e.language,e.element)})}}();
\ No newline at end of file
diff --git a/plugins/show-language/prism-show-language.js b/plugins/show-language/prism-show-language.js
index 09f6298..073c4f5 100644
--- a/plugins/show-language/prism-show-language.js
+++ b/plugins/show-language/prism-show-language.js
@@ -5,7 +5,7 @@ if (typeof self === 'undefined' || !self.Prism || !self.document) {
}
// The languages map is built automatically with gulp
-var Languages = /*languages_placeholder[*/{"css":"CSS","clike":"C-like","javascript":"JavaScript","abap":"ABAP","actionscript":"ActionScript","apacheconf":"Apache Configuration","apl":"APL","applescript":"AppleScript","aspnet":"ASP.NET (C#)","autoit":"AutoIt","autohotkey":"AutoHotkey","basic":"BASIC","csharp":"C#","cpp":"C++","coffeescript":"CoffeeScript","css-extras":"CSS Extras","fsharp":"F#","glsl":"GLSL","http":"HTTP","inform7":"Inform 7","latex":"LaTeX","lolcode":"LOLCODE","matlab":"MATLAB","mel":"MEL","nasm":"NASM","nsis":"NSIS","objectivec":"Objective-C","ocaml":"OCaml","php":"PHP","php-extras":"PHP Extras","powershell":"PowerShell","jsx":"React JSX","rest":"reST (reStructuredText)","sas":"SAS","sass":"Sass (Sass)","scss":"Sass (Scss)","sql":"SQL","typescript":"TypeScript","vhdl":"VHDL","wiki":"Wiki markup","yaml":"YAML"}/*]*/;
+var Languages = /*languages_placeholder[*/{"css":"CSS","clike":"C-like","javascript":"JavaScript","abap":"ABAP","actionscript":"ActionScript","apacheconf":"Apache Configuration","apl":"APL","applescript":"AppleScript","aspnet":"ASP.NET (C#)","autoit":"AutoIt","autohotkey":"AutoHotkey","basic":"BASIC","csharp":"C#","cpp":"C++","coffeescript":"CoffeeScript","css-extras":"CSS Extras","fsharp":"F#","glsl":"GLSL","http":"HTTP","inform7":"Inform 7","latex":"LaTeX","lolcode":"LOLCODE","matlab":"MATLAB","mel":"MEL","nasm":"NASM","nginx":"nginx","nsis":"NSIS","objectivec":"Objective-C","ocaml":"OCaml","php":"PHP","php-extras":"PHP Extras","powershell":"PowerShell","jsx":"React JSX","rest":"reST (reStructuredText)","sas":"SAS","sass":"Sass (Sass)","scss":"Sass (Scss)","sql":"SQL","typescript":"TypeScript","vhdl":"VHDL","wiki":"Wiki markup","yaml":"YAML"}/*]*/;
Prism.hooks.add('before-highlight', function(env) {
var pre = env.element.parentNode;
if (!pre || !/pre/i.test(pre.nodeName)) {
diff --git a/plugins/show-language/prism-show-language.min.js b/plugins/show-language/prism-show-language.min.js
index 90ef27e..905f5f6 100644
--- a/plugins/show-language/prism-show-language.min.js
+++ b/plugins/show-language/prism-show-language.min.js
@@ -1 +1 @@
-!function(){if("undefined"!=typeof self&&self.Prism&&self.document){var e={css:"CSS",clike:"C-like",javascript:"JavaScript",abap:"ABAP",actionscript:"ActionScript",apacheconf:"Apache Configuration",apl:"APL",applescript:"AppleScript",aspnet:"ASP.NET (C#)",autoit:"AutoIt",autohotkey:"AutoHotkey",basic:"BASIC",csharp:"C#",cpp:"C++",coffeescript:"CoffeeScript","css-extras":"CSS Extras",fsharp:"F#",glsl:"GLSL",http:"HTTP",inform7:"Inform 7",latex:"LaTeX",lolcode:"LOLCODE",matlab:"MATLAB",mel:"MEL",nasm:"NASM",nsis:"NSIS",objectivec:"Objective-C",ocaml:"OCaml",php:"PHP","php-extras":"PHP Extras",powershell:"PowerShell",jsx:"React JSX",rest:"reST (reStructuredText)",sas:"SAS",sass:"Sass (Sass)",scss:"Sass (Scss)",sql:"SQL",typescript:"TypeScript",vhdl:"VHDL",wiki:"Wiki markup",yaml:"YAML"};Prism.hooks.add("before-highlight",function(a){var t=a.element.parentNode;if(t&&/pre/i.test(t.nodeName)){var s=e[a.language]||a.language.substring(0,1).toUpperCase()+a.language.substring(1);t.setAttribute("data-language",s)}})}}();
\ No newline at end of file
+!function(){if("undefined"!=typeof self&&self.Prism&&self.document){var e={css:"CSS",clike:"C-like",javascript:"JavaScript",abap:"ABAP",actionscript:"ActionScript",apacheconf:"Apache Configuration",apl:"APL",applescript:"AppleScript",aspnet:"ASP.NET (C#)",autoit:"AutoIt",autohotkey:"AutoHotkey",basic:"BASIC",csharp:"C#",cpp:"C++",coffeescript:"CoffeeScript","css-extras":"CSS Extras",fsharp:"F#",glsl:"GLSL",http:"HTTP",inform7:"Inform 7",latex:"LaTeX",lolcode:"LOLCODE",matlab:"MATLAB",mel:"MEL",nasm:"NASM",nginx:"nginx",nsis:"NSIS",objectivec:"Objective-C",ocaml:"OCaml",php:"PHP","php-extras":"PHP Extras",powershell:"PowerShell",jsx:"React JSX",rest:"reST (reStructuredText)",sas:"SAS",sass:"Sass (Sass)",scss:"Sass (Scss)",sql:"SQL",typescript:"TypeScript",vhdl:"VHDL",wiki:"Wiki markup",yaml:"YAML"};Prism.hooks.add("before-highlight",function(a){var t=a.element.parentNode;if(t&&/pre/i.test(t.nodeName)){var s=e[a.language]||a.language.substring(0,1).toUpperCase()+a.language.substring(1);t.setAttribute("data-language",s)}})}}();
\ No newline at end of file
diff --git a/tests/languages/nginx/comment_feature.test b/tests/languages/nginx/comment_feature.test
new file mode 100644
index 0000000..09493ab
--- /dev/null
+++ b/tests/languages/nginx/comment_feature.test
@@ -0,0 +1,13 @@
+#
+# Foobar
+
+----------------------------------------------------
+
+[
+ ["comment", "#"],
+ ["comment", "# Foobar"]
+]
+
+----------------------------------------------------
+
+Checks for comments.
\ No newline at end of file
diff --git a/tests/languages/nginx/keyword_feature.test b/tests/languages/nginx/keyword_feature.test
new file mode 100644
index 0000000..2d55fd4
--- /dev/null
+++ b/tests/languages/nginx/keyword_feature.test
@@ -0,0 +1,705 @@
+CONTENT_
+DOCUMENT_
+GATEWAY_
+HTTP_
+HTTPS
+if_not_empty
+PATH_
+QUERY_
+REDIRECT_
+REMOTE_
+REQUEST_
+SCGI
+SCRIPT_
+SERVER_
+http
+server
+events
+location
+include
+accept_mutex
+accept_mutex_delay
+access_log
+add_after_body
+add_before_body
+add_header
+addition_types
+aio
+alias
+allow
+ancient_browser
+ancient_browser_value
+auth
+auth_basic
+auth_basic_user_file
+auth_http
+auth_http_header
+auth_http_timeout
+autoindex
+autoindex_exact_size
+autoindex_localtime
+break
+charset
+charset_map
+charset_types
+chunked_transfer_encoding
+client_body_buffer_size
+client_body_in_file_only
+client_body_in_single_buffer
+client_body_temp_path
+client_body_timeout
+client_header_buffer_size
+client_header_timeout
+client_max_body_size
+connection_pool_size
+create_full_put_path
+daemon
+dav_access
+dav_methods
+debug_connection
+debug_points
+default_type
+deny
+devpoll_changes
+devpoll_events
+directio
+directio_alignment
+disable_symlinks
+empty_gif
+env
+epoll_events
+error_log
+error_page
+expires
+fastcgi_buffer_size
+fastcgi_buffers
+fastcgi_busy_buffers_size
+fastcgi_cache
+fastcgi_cache_bypass
+fastcgi_cache_key
+fastcgi_cache_lock
+fastcgi_cache_lock_timeout
+fastcgi_cache_methods
+fastcgi_cache_min_uses
+fastcgi_cache_path
+fastcgi_cache_purge
+fastcgi_cache_use_stale
+fastcgi_cache_valid
+fastcgi_connect_timeout
+fastcgi_hide_header
+fastcgi_ignore_client_abort
+fastcgi_ignore_headers
+fastcgi_index
+fastcgi_intercept_errors
+fastcgi_keep_conn
+fastcgi_max_temp_file_size
+fastcgi_next_upstream
+fastcgi_no_cache
+fastcgi_param
+fastcgi_pass
+fastcgi_pass_header
+fastcgi_read_timeout
+fastcgi_redirect_errors
+fastcgi_send_timeout
+fastcgi_split_path_info
+fastcgi_store
+fastcgi_store_access
+fastcgi_temp_file_write_size
+fastcgi_temp_path
+flv
+geo
+geoip_city
+geoip_country
+google_perftools_profiles
+gzip
+gzip_buffers
+gzip_comp_level
+gzip_disable
+gzip_http_version
+gzip_min_length
+gzip_proxied
+gzip_static
+gzip_types
+gzip_vary
+if
+if_modified_since
+ignore_invalid_headers
+image_filter
+image_filter_buffer
+image_filter_jpeg_quality
+image_filter_sharpen
+image_filter_transparency
+imap_capabilities
+imap_client_buffer
+include
+index
+internal
+ip_hash
+keepalive
+keepalive_disable
+keepalive_requests
+keepalive_timeout
+kqueue_changes
+kqueue_events
+large_client_header_buffers
+limit_conn
+limit_conn_log_level
+limit_conn_zone
+limit_except
+limit_rate
+limit_rate_after
+limit_req
+limit_req_log_level
+limit_req_zone
+limit_zone
+lingering_close
+lingering_time
+lingering_timeout
+listen
+location
+lock_file
+log_format
+log_format_combined
+log_not_found
+log_subrequest
+map
+map_hash_bucket_size
+map_hash_max_size
+master_process
+max_ranges
+memcached_buffer_size
+memcached_connect_timeout
+memcached_next_upstream
+memcached_pass
+memcached_read_timeout
+memcached_send_timeout
+merge_slashes
+min_delete_depth
+modern_browser
+modern_browser_value
+mp4
+mp4_buffer_size
+mp4_max_buffer_size
+msie_padding
+msie_refresh
+multi_accept
+open_file_cache
+open_file_cache_errors
+open_file_cache_min_uses
+open_file_cache_valid
+open_log_file_cache
+optimize_server_names
+override_charset
+pcre_jit
+perl
+perl_modules
+perl_require
+perl_set
+pid
+pop3_auth
+pop3_capabilities
+port_in_redirect
+post_action
+postpone_output
+protocol
+proxy
+proxy_buffer
+proxy_buffer_size
+proxy_buffering
+proxy_buffers
+proxy_busy_buffers_size
+proxy_cache
+proxy_cache_bypass
+proxy_cache_key
+proxy_cache_lock
+proxy_cache_lock_timeout
+proxy_cache_methods
+proxy_cache_min_uses
+proxy_cache_path
+proxy_cache_use_stale
+proxy_cache_valid
+proxy_connect_timeout
+proxy_cookie_domain
+proxy_cookie_path
+proxy_headers_hash_bucket_size
+proxy_headers_hash_max_size
+proxy_hide_header
+proxy_http_version
+proxy_ignore_client_abort
+proxy_ignore_headers
+proxy_intercept_errors
+proxy_max_temp_file_size
+proxy_method
+proxy_next_upstream
+proxy_no_cache
+proxy_pass
+proxy_pass_error_message
+proxy_pass_header
+proxy_pass_request_body
+proxy_pass_request_headers
+proxy_read_timeout
+proxy_redirect
+proxy_redirect_errors
+proxy_send_lowat
+proxy_send_timeout
+proxy_set_body
+proxy_set_header
+proxy_ssl_session_reuse
+proxy_store
+proxy_store_access
+proxy_temp_file_write_size
+proxy_temp_path
+proxy_timeout
+proxy_upstream_fail_timeout
+proxy_upstream_max_fails
+random_index
+read_ahead
+real_ip_header
+recursive_error_pages
+request_pool_size
+reset_timedout_connection
+resolver
+resolver_timeout
+return
+rewrite
+root
+rtsig_overflow_events
+rtsig_overflow_test
+rtsig_overflow_threshold
+rtsig_signo
+satisfy
+satisfy_any
+secure_link_secret
+send_lowat
+send_timeout
+sendfile
+sendfile_max_chunk
+server
+server_name
+server_name_in_redirect
+server_names_hash_bucket_size
+server_names_hash_max_size
+server_tokens
+set
+set_real_ip_from
+smtp_auth
+smtp_capabilities
+so_keepalive
+source_charset
+split_clients
+ssi
+ssi_silent_errors
+ssi_types
+ssi_value_length
+ssl
+ssl_certificate
+ssl_certificate_key
+ssl_ciphers
+ssl_client_certificate
+ssl_crl
+ssl_dhparam
+ssl_engine
+ssl_prefer_server_ciphers
+ssl_protocols
+ssl_session_cache
+ssl_session_timeout
+ssl_verify_client
+ssl_verify_depth
+starttls
+stub_status
+sub_filter
+sub_filter_once
+sub_filter_types
+tcp_nodelay
+tcp_nopush
+timeout
+timer_resolution
+try_files
+types
+types_hash_bucket_size
+types_hash_max_size
+underscores_in_headers
+uninitialized_variable_warn
+upstream
+use
+user
+userid
+userid_domain
+userid_expires
+userid_name
+userid_p3p
+userid_path
+userid_service
+valid_referers
+variables_hash_bucket_size
+variables_hash_max_size
+worker_connections
+worker_cpu_affinity
+worker_priority
+worker_processes
+worker_rlimit_core
+worker_rlimit_nofile
+worker_rlimit_sigpending
+working_directory
+xclient
+xml_entities
+xslt_entities
+xslt_stylesheet
+xslt_types
+
+----------------------------------------------------
+
+[
+ ["keyword", "CONTENT_"],
+ ["keyword", "DOCUMENT_"],
+ ["keyword", "GATEWAY_"],
+ ["keyword", "HTTP_"],
+ ["keyword", "HTTPS"],
+ ["keyword", "if_not_empty"],
+ ["keyword", "PATH_"],
+ ["keyword", "QUERY_"],
+ ["keyword", "REDIRECT_"],
+ ["keyword", "REMOTE_"],
+ ["keyword", "REQUEST_"],
+ ["keyword", "SCGI"],
+ ["keyword", "SCRIPT_"],
+ ["keyword", "SERVER_"],
+ ["keyword", "http"],
+ ["keyword", "server"],
+ ["keyword", "events"],
+ ["keyword", "location"],
+ ["keyword", "include"],
+ ["keyword", "accept_mutex"],
+ ["keyword", "accept_mutex_delay"],
+ ["keyword", "access_log"],
+ ["keyword", "add_after_body"],
+ ["keyword", "add_before_body"],
+ ["keyword", "add_header"],
+ ["keyword", "addition_types"],
+ ["keyword", "aio"],
+ ["keyword", "alias"],
+ ["keyword", "allow"],
+ ["keyword", "ancient_browser"],
+ ["keyword", "ancient_browser_value"],
+ ["keyword", "auth"],
+ ["keyword", "auth_basic"],
+ ["keyword", "auth_basic_user_file"],
+ ["keyword", "auth_http"],
+ ["keyword", "auth_http_header"],
+ ["keyword", "auth_http_timeout"],
+ ["keyword", "autoindex"],
+ ["keyword", "autoindex_exact_size"],
+ ["keyword", "autoindex_localtime"],
+ ["keyword", "break"],
+ ["keyword", "charset"],
+ ["keyword", "charset_map"],
+ ["keyword", "charset_types"],
+ ["keyword", "chunked_transfer_encoding"],
+ ["keyword", "client_body_buffer_size"],
+ ["keyword", "client_body_in_file_only"],
+ ["keyword", "client_body_in_single_buffer"],
+ ["keyword", "client_body_temp_path"],
+ ["keyword", "client_body_timeout"],
+ ["keyword", "client_header_buffer_size"],
+ ["keyword", "client_header_timeout"],
+ ["keyword", "client_max_body_size"],
+ ["keyword", "connection_pool_size"],
+ ["keyword", "create_full_put_path"],
+ ["keyword", "daemon"],
+ ["keyword", "dav_access"],
+ ["keyword", "dav_methods"],
+ ["keyword", "debug_connection"],
+ ["keyword", "debug_points"],
+ ["keyword", "default_type"],
+ ["keyword", "deny"],
+ ["keyword", "devpoll_changes"],
+ ["keyword", "devpoll_events"],
+ ["keyword", "directio"],
+ ["keyword", "directio_alignment"],
+ ["keyword", "disable_symlinks"],
+ ["keyword", "empty_gif"],
+ ["keyword", "env"],
+ ["keyword", "epoll_events"],
+ ["keyword", "error_log"],
+ ["keyword", "error_page"],
+ ["keyword", "expires"],
+ ["keyword", "fastcgi_buffer_size"],
+ ["keyword", "fastcgi_buffers"],
+ ["keyword", "fastcgi_busy_buffers_size"],
+ ["keyword", "fastcgi_cache"],
+ ["keyword", "fastcgi_cache_bypass"],
+ ["keyword", "fastcgi_cache_key"],
+ ["keyword", "fastcgi_cache_lock"],
+ ["keyword", "fastcgi_cache_lock_timeout"],
+ ["keyword", "fastcgi_cache_methods"],
+ ["keyword", "fastcgi_cache_min_uses"],
+ ["keyword", "fastcgi_cache_path"],
+ ["keyword", "fastcgi_cache_purge"],
+ ["keyword", "fastcgi_cache_use_stale"],
+ ["keyword", "fastcgi_cache_valid"],
+ ["keyword", "fastcgi_connect_timeout"],
+ ["keyword", "fastcgi_hide_header"],
+ ["keyword", "fastcgi_ignore_client_abort"],
+ ["keyword", "fastcgi_ignore_headers"],
+ ["keyword", "fastcgi_index"],
+ ["keyword", "fastcgi_intercept_errors"],
+ ["keyword", "fastcgi_keep_conn"],
+ ["keyword", "fastcgi_max_temp_file_size"],
+ ["keyword", "fastcgi_next_upstream"],
+ ["keyword", "fastcgi_no_cache"],
+ ["keyword", "fastcgi_param"],
+ ["keyword", "fastcgi_pass"],
+ ["keyword", "fastcgi_pass_header"],
+ ["keyword", "fastcgi_read_timeout"],
+ ["keyword", "fastcgi_redirect_errors"],
+ ["keyword", "fastcgi_send_timeout"],
+ ["keyword", "fastcgi_split_path_info"],
+ ["keyword", "fastcgi_store"],
+ ["keyword", "fastcgi_store_access"],
+ ["keyword", "fastcgi_temp_file_write_size"],
+ ["keyword", "fastcgi_temp_path"],
+ ["keyword", "flv"],
+ ["keyword", "geo"],
+ ["keyword", "geoip_city"],
+ ["keyword", "geoip_country"],
+ ["keyword", "google_perftools_profiles"],
+ ["keyword", "gzip"],
+ ["keyword", "gzip_buffers"],
+ ["keyword", "gzip_comp_level"],
+ ["keyword", "gzip_disable"],
+ ["keyword", "gzip_http_version"],
+ ["keyword", "gzip_min_length"],
+ ["keyword", "gzip_proxied"],
+ ["keyword", "gzip_static"],
+ ["keyword", "gzip_types"],
+ ["keyword", "gzip_vary"],
+ ["keyword", "if"],
+ ["keyword", "if_modified_since"],
+ ["keyword", "ignore_invalid_headers"],
+ ["keyword", "image_filter"],
+ ["keyword", "image_filter_buffer"],
+ ["keyword", "image_filter_jpeg_quality"],
+ ["keyword", "image_filter_sharpen"],
+ ["keyword", "image_filter_transparency"],
+ ["keyword", "imap_capabilities"],
+ ["keyword", "imap_client_buffer"],
+ ["keyword", "include"],
+ ["keyword", "index"],
+ ["keyword", "internal"],
+ ["keyword", "ip_hash"],
+ ["keyword", "keepalive"],
+ ["keyword", "keepalive_disable"],
+ ["keyword", "keepalive_requests"],
+ ["keyword", "keepalive_timeout"],
+ ["keyword", "kqueue_changes"],
+ ["keyword", "kqueue_events"],
+ ["keyword", "large_client_header_buffers"],
+ ["keyword", "limit_conn"],
+ ["keyword", "limit_conn_log_level"],
+ ["keyword", "limit_conn_zone"],
+ ["keyword", "limit_except"],
+ ["keyword", "limit_rate"],
+ ["keyword", "limit_rate_after"],
+ ["keyword", "limit_req"],
+ ["keyword", "limit_req_log_level"],
+ ["keyword", "limit_req_zone"],
+ ["keyword", "limit_zone"],
+ ["keyword", "lingering_close"],
+ ["keyword", "lingering_time"],
+ ["keyword", "lingering_timeout"],
+ ["keyword", "listen"],
+ ["keyword", "location"],
+ ["keyword", "lock_file"],
+ ["keyword", "log_format"],
+ ["keyword", "log_format_combined"],
+ ["keyword", "log_not_found"],
+ ["keyword", "log_subrequest"],
+ ["keyword", "map"],
+ ["keyword", "map_hash_bucket_size"],
+ ["keyword", "map_hash_max_size"],
+ ["keyword", "master_process"],
+ ["keyword", "max_ranges"],
+ ["keyword", "memcached_buffer_size"],
+ ["keyword", "memcached_connect_timeout"],
+ ["keyword", "memcached_next_upstream"],
+ ["keyword", "memcached_pass"],
+ ["keyword", "memcached_read_timeout"],
+ ["keyword", "memcached_send_timeout"],
+ ["keyword", "merge_slashes"],
+ ["keyword", "min_delete_depth"],
+ ["keyword", "modern_browser"],
+ ["keyword", "modern_browser_value"],
+ ["keyword", "mp4"],
+ ["keyword", "mp4_buffer_size"],
+ ["keyword", "mp4_max_buffer_size"],
+ ["keyword", "msie_padding"],
+ ["keyword", "msie_refresh"],
+ ["keyword", "multi_accept"],
+ ["keyword", "open_file_cache"],
+ ["keyword", "open_file_cache_errors"],
+ ["keyword", "open_file_cache_min_uses"],
+ ["keyword", "open_file_cache_valid"],
+ ["keyword", "open_log_file_cache"],
+ ["keyword", "optimize_server_names"],
+ ["keyword", "override_charset"],
+ ["keyword", "pcre_jit"],
+ ["keyword", "perl"],
+ ["keyword", "perl_modules"],
+ ["keyword", "perl_require"],
+ ["keyword", "perl_set"],
+ ["keyword", "pid"],
+ ["keyword", "pop3_auth"],
+ ["keyword", "pop3_capabilities"],
+ ["keyword", "port_in_redirect"],
+ ["keyword", "post_action"],
+ ["keyword", "postpone_output"],
+ ["keyword", "protocol"],
+ ["keyword", "proxy"],
+ ["keyword", "proxy_buffer"],
+ ["keyword", "proxy_buffer_size"],
+ ["keyword", "proxy_buffering"],
+ ["keyword", "proxy_buffers"],
+ ["keyword", "proxy_busy_buffers_size"],
+ ["keyword", "proxy_cache"],
+ ["keyword", "proxy_cache_bypass"],
+ ["keyword", "proxy_cache_key"],
+ ["keyword", "proxy_cache_lock"],
+ ["keyword", "proxy_cache_lock_timeout"],
+ ["keyword", "proxy_cache_methods"],
+ ["keyword", "proxy_cache_min_uses"],
+ ["keyword", "proxy_cache_path"],
+ ["keyword", "proxy_cache_use_stale"],
+ ["keyword", "proxy_cache_valid"],
+ ["keyword", "proxy_connect_timeout"],
+ ["keyword", "proxy_cookie_domain"],
+ ["keyword", "proxy_cookie_path"],
+ ["keyword", "proxy_headers_hash_bucket_size"],
+ ["keyword", "proxy_headers_hash_max_size"],
+ ["keyword", "proxy_hide_header"],
+ ["keyword", "proxy_http_version"],
+ ["keyword", "proxy_ignore_client_abort"],
+ ["keyword", "proxy_ignore_headers"],
+ ["keyword", "proxy_intercept_errors"],
+ ["keyword", "proxy_max_temp_file_size"],
+ ["keyword", "proxy_method"],
+ ["keyword", "proxy_next_upstream"],
+ ["keyword", "proxy_no_cache"],
+ ["keyword", "proxy_pass"],
+ ["keyword", "proxy_pass_error_message"],
+ ["keyword", "proxy_pass_header"],
+ ["keyword", "proxy_pass_request_body"],
+ ["keyword", "proxy_pass_request_headers"],
+ ["keyword", "proxy_read_timeout"],
+ ["keyword", "proxy_redirect"],
+ ["keyword", "proxy_redirect_errors"],
+ ["keyword", "proxy_send_lowat"],
+ ["keyword", "proxy_send_timeout"],
+ ["keyword", "proxy_set_body"],
+ ["keyword", "proxy_set_header"],
+ ["keyword", "proxy_ssl_session_reuse"],
+ ["keyword", "proxy_store"],
+ ["keyword", "proxy_store_access"],
+ ["keyword", "proxy_temp_file_write_size"],
+ ["keyword", "proxy_temp_path"],
+ ["keyword", "proxy_timeout"],
+ ["keyword", "proxy_upstream_fail_timeout"],
+ ["keyword", "proxy_upstream_max_fails"],
+ ["keyword", "random_index"],
+ ["keyword", "read_ahead"],
+ ["keyword", "real_ip_header"],
+ ["keyword", "recursive_error_pages"],
+ ["keyword", "request_pool_size"],
+ ["keyword", "reset_timedout_connection"],
+ ["keyword", "resolver"],
+ ["keyword", "resolver_timeout"],
+ ["keyword", "return"],
+ ["keyword", "rewrite"],
+ ["keyword", "root"],
+ ["keyword", "rtsig_overflow_events"],
+ ["keyword", "rtsig_overflow_test"],
+ ["keyword", "rtsig_overflow_threshold"],
+ ["keyword", "rtsig_signo"],
+ ["keyword", "satisfy"],
+ ["keyword", "satisfy_any"],
+ ["keyword", "secure_link_secret"],
+ ["keyword", "send_lowat"],
+ ["keyword", "send_timeout"],
+ ["keyword", "sendfile"],
+ ["keyword", "sendfile_max_chunk"],
+ ["keyword", "server"],
+ ["keyword", "server_name"],
+ ["keyword", "server_name_in_redirect"],
+ ["keyword", "server_names_hash_bucket_size"],
+ ["keyword", "server_names_hash_max_size"],
+ ["keyword", "server_tokens"],
+ ["keyword", "set"],
+ ["keyword", "set_real_ip_from"],
+ ["keyword", "smtp_auth"],
+ ["keyword", "smtp_capabilities"],
+ ["keyword", "so_keepalive"],
+ ["keyword", "source_charset"],
+ ["keyword", "split_clients"],
+ ["keyword", "ssi"],
+ ["keyword", "ssi_silent_errors"],
+ ["keyword", "ssi_types"],
+ ["keyword", "ssi_value_length"],
+ ["keyword", "ssl"],
+ ["keyword", "ssl_certificate"],
+ ["keyword", "ssl_certificate_key"],
+ ["keyword", "ssl_ciphers"],
+ ["keyword", "ssl_client_certificate"],
+ ["keyword", "ssl_crl"],
+ ["keyword", "ssl_dhparam"],
+ ["keyword", "ssl_engine"],
+ ["keyword", "ssl_prefer_server_ciphers"],
+ ["keyword", "ssl_protocols"],
+ ["keyword", "ssl_session_cache"],
+ ["keyword", "ssl_session_timeout"],
+ ["keyword", "ssl_verify_client"],
+ ["keyword", "ssl_verify_depth"],
+ ["keyword", "starttls"],
+ ["keyword", "stub_status"],
+ ["keyword", "sub_filter"],
+ ["keyword", "sub_filter_once"],
+ ["keyword", "sub_filter_types"],
+ ["keyword", "tcp_nodelay"],
+ ["keyword", "tcp_nopush"],
+ ["keyword", "timeout"],
+ ["keyword", "timer_resolution"],
+ ["keyword", "try_files"],
+ ["keyword", "types"],
+ ["keyword", "types_hash_bucket_size"],
+ ["keyword", "types_hash_max_size"],
+ ["keyword", "underscores_in_headers"],
+ ["keyword", "uninitialized_variable_warn"],
+ ["keyword", "upstream"],
+ ["keyword", "use"],
+ ["keyword", "user"],
+ ["keyword", "userid"],
+ ["keyword", "userid_domain"],
+ ["keyword", "userid_expires"],
+ ["keyword", "userid_name"],
+ ["keyword", "userid_p3p"],
+ ["keyword", "userid_path"],
+ ["keyword", "userid_service"],
+ ["keyword", "valid_referers"],
+ ["keyword", "variables_hash_bucket_size"],
+ ["keyword", "variables_hash_max_size"],
+ ["keyword", "worker_connections"],
+ ["keyword", "worker_cpu_affinity"],
+ ["keyword", "worker_priority"],
+ ["keyword", "worker_processes"],
+ ["keyword", "worker_rlimit_core"],
+ ["keyword", "worker_rlimit_nofile"],
+ ["keyword", "worker_rlimit_sigpending"],
+ ["keyword", "working_directory"],
+ ["keyword", "xclient"],
+ ["keyword", "xml_entities"],
+ ["keyword", "xslt_entities"],
+ ["keyword", "xslt_stylesheet"],
+ ["keyword", "xslt_types"]
+]
+
+----------------------------------------------------
+
+Checks for keywords.
\ No newline at end of file
diff --git a/tests/languages/nginx/variable_feature.test b/tests/languages/nginx/variable_feature.test
new file mode 100644
index 0000000..29959b9
--- /dev/null
+++ b/tests/languages/nginx/variable_feature.test
@@ -0,0 +1,13 @@
+$foobar
+$foo_bar
+
+----------------------------------------------------
+
+[
+ ["variable", "$foobar"],
+ ["variable", "$foo_bar"]
+]
+
+----------------------------------------------------
+
+Checks for variables.
\ No newline at end of file