gitlab-glfm-markdown 0.0.39-x86_64-darwin → 0.0.41-x86_64-darwin

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9eb694119506621492b7659d1bd522f97566ed823af69be586e50646be82e7fa
4
- data.tar.gz: 07b289e75140bf136a4cbdbaf0d2d68ab23972afe83685827c89036859a6af23
3
+ metadata.gz: a197564d991f9aecef2bab7563b4cdb6e96650ff679a97acff8362cd30cf52f2
4
+ data.tar.gz: 4dddc287123be94a6c994177b9fe2d9cef3e221c2882f2816e0684599bcc1903
5
5
  SHA512:
6
- metadata.gz: f58b420de6e7db1c756fc37351d2320400a9862940d0597fb8eb7a7a5fc2e20d15f08fde63ac78061e8bd2974ae203d3ac7ee507974e53c824f81feb07005d44
7
- data.tar.gz: 4ed99885946862f293e63a73d8e3f95443be22214999c1e6323a6cc78dc95640b5addc02329593566062fa22b8fc5e5ca07e4984a972c1680372fd5b865e359d
6
+ metadata.gz: a3ea67cca6a1c17f0e30cdf351358dd491545e092f2dff719282860996a72e2f619355731c66c98fd414a7c811c640f5b475f29c529cd07ef1e359a96b7e06d8
7
+ data.tar.gz: 7a3ab36ba1d6331baa9dc551ece47f31d41ce50c85a917c96b1fd867310409af6f4c555f1ff001e67f396cb15517c3d4bf49a1e32b3361a133d32e7267ca36c6
data/Cargo.lock CHANGED
@@ -221,9 +221,9 @@ checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75"
221
221
 
222
222
  [[package]]
223
223
  name = "comrak"
224
- version = "0.48.0"
224
+ version = "0.49.0"
225
225
  source = "registry+https://github.com/rust-lang/crates.io-index"
226
- checksum = "48bf2260aceee247c6c5639f5751dc635211895066d782d2a28fb87f2e0d5613"
226
+ checksum = "ab87129dce2f2d7e75e753b1df0e5093b27dec8fa5970b6eb51280faacb25bd6"
227
227
  dependencies = [
228
228
  "caseless",
229
229
  "emojis",
@@ -307,7 +307,7 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
307
307
 
308
308
  [[package]]
309
309
  name = "gitlab-glfm-markdown"
310
- version = "0.0.39"
310
+ version = "0.0.41"
311
311
  dependencies = [
312
312
  "clap",
313
313
  "comrak",
@@ -399,7 +399,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
399
399
  checksum = "07033963ba89ebaf1584d767badaa2e8fcec21aedea6b8c0346d487d49c28667"
400
400
  dependencies = [
401
401
  "cfg-if",
402
- "windows-targets 0.53.2",
402
+ "windows-targets",
403
403
  ]
404
404
 
405
405
  [[package]]
@@ -574,18 +574,18 @@ dependencies = [
574
574
 
575
575
  [[package]]
576
576
  name = "rb-sys"
577
- version = "0.9.117"
577
+ version = "0.9.124"
578
578
  source = "registry+https://github.com/rust-lang/crates.io-index"
579
- checksum = "f900d1ce4629a2ebffaf5de74bd8f9c1188d4c5ed406df02f97e22f77a006f44"
579
+ checksum = "c85c4188462601e2aa1469def389c17228566f82ea72f137ed096f21591bc489"
580
580
  dependencies = [
581
581
  "rb-sys-build",
582
582
  ]
583
583
 
584
584
  [[package]]
585
585
  name = "rb-sys-build"
586
- version = "0.9.117"
586
+ version = "0.9.124"
587
587
  source = "registry+https://github.com/rust-lang/crates.io-index"
588
- checksum = "ef1e9c857028f631056bcd6d88cec390c751e343ce2223ddb26d23eb4a151d59"
588
+ checksum = "568068db4102230882e6d4ae8de6632e224ca75fe5970f6e026a04e91ed635d3"
589
589
  dependencies = [
590
590
  "bindgen",
591
591
  "lazy_static",
@@ -889,7 +889,7 @@ version = "0.59.0"
889
889
  source = "registry+https://github.com/rust-lang/crates.io-index"
890
890
  checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b"
891
891
  dependencies = [
892
- "windows-targets 0.52.6",
892
+ "windows-targets",
893
893
  ]
894
894
 
895
895
  [[package]]
@@ -898,30 +898,14 @@ version = "0.52.6"
898
898
  source = "registry+https://github.com/rust-lang/crates.io-index"
899
899
  checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973"
900
900
  dependencies = [
901
- "windows_aarch64_gnullvm 0.52.6",
902
- "windows_aarch64_msvc 0.52.6",
903
- "windows_i686_gnu 0.52.6",
904
- "windows_i686_gnullvm 0.52.6",
905
- "windows_i686_msvc 0.52.6",
906
- "windows_x86_64_gnu 0.52.6",
907
- "windows_x86_64_gnullvm 0.52.6",
908
- "windows_x86_64_msvc 0.52.6",
909
- ]
910
-
911
- [[package]]
912
- name = "windows-targets"
913
- version = "0.53.2"
914
- source = "registry+https://github.com/rust-lang/crates.io-index"
915
- checksum = "c66f69fcc9ce11da9966ddb31a40968cad001c5bedeb5c2b82ede4253ab48aef"
916
- dependencies = [
917
- "windows_aarch64_gnullvm 0.53.0",
918
- "windows_aarch64_msvc 0.53.0",
919
- "windows_i686_gnu 0.53.0",
920
- "windows_i686_gnullvm 0.53.0",
921
- "windows_i686_msvc 0.53.0",
922
- "windows_x86_64_gnu 0.53.0",
923
- "windows_x86_64_gnullvm 0.53.0",
924
- "windows_x86_64_msvc 0.53.0",
901
+ "windows_aarch64_gnullvm",
902
+ "windows_aarch64_msvc",
903
+ "windows_i686_gnu",
904
+ "windows_i686_gnullvm",
905
+ "windows_i686_msvc",
906
+ "windows_x86_64_gnu",
907
+ "windows_x86_64_gnullvm",
908
+ "windows_x86_64_msvc",
925
909
  ]
926
910
 
927
911
  [[package]]
@@ -930,96 +914,48 @@ version = "0.52.6"
930
914
  source = "registry+https://github.com/rust-lang/crates.io-index"
931
915
  checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3"
932
916
 
933
- [[package]]
934
- name = "windows_aarch64_gnullvm"
935
- version = "0.53.0"
936
- source = "registry+https://github.com/rust-lang/crates.io-index"
937
- checksum = "86b8d5f90ddd19cb4a147a5fa63ca848db3df085e25fee3cc10b39b6eebae764"
938
-
939
917
  [[package]]
940
918
  name = "windows_aarch64_msvc"
941
919
  version = "0.52.6"
942
920
  source = "registry+https://github.com/rust-lang/crates.io-index"
943
921
  checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469"
944
922
 
945
- [[package]]
946
- name = "windows_aarch64_msvc"
947
- version = "0.53.0"
948
- source = "registry+https://github.com/rust-lang/crates.io-index"
949
- checksum = "c7651a1f62a11b8cbd5e0d42526e55f2c99886c77e007179efff86c2b137e66c"
950
-
951
923
  [[package]]
952
924
  name = "windows_i686_gnu"
953
925
  version = "0.52.6"
954
926
  source = "registry+https://github.com/rust-lang/crates.io-index"
955
927
  checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b"
956
928
 
957
- [[package]]
958
- name = "windows_i686_gnu"
959
- version = "0.53.0"
960
- source = "registry+https://github.com/rust-lang/crates.io-index"
961
- checksum = "c1dc67659d35f387f5f6c479dc4e28f1d4bb90ddd1a5d3da2e5d97b42d6272c3"
962
-
963
929
  [[package]]
964
930
  name = "windows_i686_gnullvm"
965
931
  version = "0.52.6"
966
932
  source = "registry+https://github.com/rust-lang/crates.io-index"
967
933
  checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66"
968
934
 
969
- [[package]]
970
- name = "windows_i686_gnullvm"
971
- version = "0.53.0"
972
- source = "registry+https://github.com/rust-lang/crates.io-index"
973
- checksum = "9ce6ccbdedbf6d6354471319e781c0dfef054c81fbc7cf83f338a4296c0cae11"
974
-
975
935
  [[package]]
976
936
  name = "windows_i686_msvc"
977
937
  version = "0.52.6"
978
938
  source = "registry+https://github.com/rust-lang/crates.io-index"
979
939
  checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66"
980
940
 
981
- [[package]]
982
- name = "windows_i686_msvc"
983
- version = "0.53.0"
984
- source = "registry+https://github.com/rust-lang/crates.io-index"
985
- checksum = "581fee95406bb13382d2f65cd4a908ca7b1e4c2f1917f143ba16efe98a589b5d"
986
-
987
941
  [[package]]
988
942
  name = "windows_x86_64_gnu"
989
943
  version = "0.52.6"
990
944
  source = "registry+https://github.com/rust-lang/crates.io-index"
991
945
  checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78"
992
946
 
993
- [[package]]
994
- name = "windows_x86_64_gnu"
995
- version = "0.53.0"
996
- source = "registry+https://github.com/rust-lang/crates.io-index"
997
- checksum = "2e55b5ac9ea33f2fc1716d1742db15574fd6fc8dadc51caab1c16a3d3b4190ba"
998
-
999
947
  [[package]]
1000
948
  name = "windows_x86_64_gnullvm"
1001
949
  version = "0.52.6"
1002
950
  source = "registry+https://github.com/rust-lang/crates.io-index"
1003
951
  checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d"
1004
952
 
1005
- [[package]]
1006
- name = "windows_x86_64_gnullvm"
1007
- version = "0.53.0"
1008
- source = "registry+https://github.com/rust-lang/crates.io-index"
1009
- checksum = "0a6e035dd0599267ce1ee132e51c27dd29437f63325753051e71dd9e42406c57"
1010
-
1011
953
  [[package]]
1012
954
  name = "windows_x86_64_msvc"
1013
955
  version = "0.52.6"
1014
956
  source = "registry+https://github.com/rust-lang/crates.io-index"
1015
957
  checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec"
1016
958
 
1017
- [[package]]
1018
- name = "windows_x86_64_msvc"
1019
- version = "0.53.0"
1020
- source = "registry+https://github.com/rust-lang/crates.io-index"
1021
- checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486"
1022
-
1023
959
  [[package]]
1024
960
  name = "yaml-rust"
1025
961
  version = "0.4.5"
data/README.md CHANGED
@@ -4,7 +4,7 @@
4
4
  [![Latest Release](https://gitlab.com/gitlab-org/ruby/gems/gitlab-glfm-markdown/-/badges/release.svg)](https://gitlab.com/gitlab-org/ruby/gems/gitlab-glfm-markdown/-/releases)
5
5
 
6
6
  Implements GLFM (as used by GitLab) using the Rust-based Markdown parser
7
- [Comrak](https://github.com/kivikakk/comrak) (0.48.0), providing a Ruby interface.
7
+ [Comrak](https://github.com/kivikakk/comrak) (0.49.0), providing a Ruby interface.
8
8
 
9
9
  This project is still in constant flux, so interfaces and functionality can change at any time.
10
10
 
@@ -221,9 +221,9 @@ checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75"
221
221
 
222
222
  [[package]]
223
223
  name = "comrak"
224
- version = "0.48.0"
224
+ version = "0.49.0"
225
225
  source = "registry+https://github.com/rust-lang/crates.io-index"
226
- checksum = "48bf2260aceee247c6c5639f5751dc635211895066d782d2a28fb87f2e0d5613"
226
+ checksum = "ab87129dce2f2d7e75e753b1df0e5093b27dec8fa5970b6eb51280faacb25bd6"
227
227
  dependencies = [
228
228
  "caseless",
229
229
  "emojis",
@@ -307,7 +307,7 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
307
307
 
308
308
  [[package]]
309
309
  name = "gitlab-glfm-markdown"
310
- version = "0.0.39"
310
+ version = "0.0.41"
311
311
  dependencies = [
312
312
  "clap",
313
313
  "comrak",
@@ -399,7 +399,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
399
399
  checksum = "07033963ba89ebaf1584d767badaa2e8fcec21aedea6b8c0346d487d49c28667"
400
400
  dependencies = [
401
401
  "cfg-if",
402
- "windows-targets 0.53.2",
402
+ "windows-targets",
403
403
  ]
404
404
 
405
405
  [[package]]
@@ -574,18 +574,18 @@ dependencies = [
574
574
 
575
575
  [[package]]
576
576
  name = "rb-sys"
577
- version = "0.9.117"
577
+ version = "0.9.124"
578
578
  source = "registry+https://github.com/rust-lang/crates.io-index"
579
- checksum = "f900d1ce4629a2ebffaf5de74bd8f9c1188d4c5ed406df02f97e22f77a006f44"
579
+ checksum = "c85c4188462601e2aa1469def389c17228566f82ea72f137ed096f21591bc489"
580
580
  dependencies = [
581
581
  "rb-sys-build",
582
582
  ]
583
583
 
584
584
  [[package]]
585
585
  name = "rb-sys-build"
586
- version = "0.9.117"
586
+ version = "0.9.124"
587
587
  source = "registry+https://github.com/rust-lang/crates.io-index"
588
- checksum = "ef1e9c857028f631056bcd6d88cec390c751e343ce2223ddb26d23eb4a151d59"
588
+ checksum = "568068db4102230882e6d4ae8de6632e224ca75fe5970f6e026a04e91ed635d3"
589
589
  dependencies = [
590
590
  "bindgen",
591
591
  "lazy_static",
@@ -889,7 +889,7 @@ version = "0.59.0"
889
889
  source = "registry+https://github.com/rust-lang/crates.io-index"
890
890
  checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b"
891
891
  dependencies = [
892
- "windows-targets 0.52.6",
892
+ "windows-targets",
893
893
  ]
894
894
 
895
895
  [[package]]
@@ -898,30 +898,14 @@ version = "0.52.6"
898
898
  source = "registry+https://github.com/rust-lang/crates.io-index"
899
899
  checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973"
900
900
  dependencies = [
901
- "windows_aarch64_gnullvm 0.52.6",
902
- "windows_aarch64_msvc 0.52.6",
903
- "windows_i686_gnu 0.52.6",
904
- "windows_i686_gnullvm 0.52.6",
905
- "windows_i686_msvc 0.52.6",
906
- "windows_x86_64_gnu 0.52.6",
907
- "windows_x86_64_gnullvm 0.52.6",
908
- "windows_x86_64_msvc 0.52.6",
909
- ]
910
-
911
- [[package]]
912
- name = "windows-targets"
913
- version = "0.53.2"
914
- source = "registry+https://github.com/rust-lang/crates.io-index"
915
- checksum = "c66f69fcc9ce11da9966ddb31a40968cad001c5bedeb5c2b82ede4253ab48aef"
916
- dependencies = [
917
- "windows_aarch64_gnullvm 0.53.0",
918
- "windows_aarch64_msvc 0.53.0",
919
- "windows_i686_gnu 0.53.0",
920
- "windows_i686_gnullvm 0.53.0",
921
- "windows_i686_msvc 0.53.0",
922
- "windows_x86_64_gnu 0.53.0",
923
- "windows_x86_64_gnullvm 0.53.0",
924
- "windows_x86_64_msvc 0.53.0",
901
+ "windows_aarch64_gnullvm",
902
+ "windows_aarch64_msvc",
903
+ "windows_i686_gnu",
904
+ "windows_i686_gnullvm",
905
+ "windows_i686_msvc",
906
+ "windows_x86_64_gnu",
907
+ "windows_x86_64_gnullvm",
908
+ "windows_x86_64_msvc",
925
909
  ]
926
910
 
927
911
  [[package]]
@@ -930,96 +914,48 @@ version = "0.52.6"
930
914
  source = "registry+https://github.com/rust-lang/crates.io-index"
931
915
  checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3"
932
916
 
933
- [[package]]
934
- name = "windows_aarch64_gnullvm"
935
- version = "0.53.0"
936
- source = "registry+https://github.com/rust-lang/crates.io-index"
937
- checksum = "86b8d5f90ddd19cb4a147a5fa63ca848db3df085e25fee3cc10b39b6eebae764"
938
-
939
917
  [[package]]
940
918
  name = "windows_aarch64_msvc"
941
919
  version = "0.52.6"
942
920
  source = "registry+https://github.com/rust-lang/crates.io-index"
943
921
  checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469"
944
922
 
945
- [[package]]
946
- name = "windows_aarch64_msvc"
947
- version = "0.53.0"
948
- source = "registry+https://github.com/rust-lang/crates.io-index"
949
- checksum = "c7651a1f62a11b8cbd5e0d42526e55f2c99886c77e007179efff86c2b137e66c"
950
-
951
923
  [[package]]
952
924
  name = "windows_i686_gnu"
953
925
  version = "0.52.6"
954
926
  source = "registry+https://github.com/rust-lang/crates.io-index"
955
927
  checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b"
956
928
 
957
- [[package]]
958
- name = "windows_i686_gnu"
959
- version = "0.53.0"
960
- source = "registry+https://github.com/rust-lang/crates.io-index"
961
- checksum = "c1dc67659d35f387f5f6c479dc4e28f1d4bb90ddd1a5d3da2e5d97b42d6272c3"
962
-
963
929
  [[package]]
964
930
  name = "windows_i686_gnullvm"
965
931
  version = "0.52.6"
966
932
  source = "registry+https://github.com/rust-lang/crates.io-index"
967
933
  checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66"
968
934
 
969
- [[package]]
970
- name = "windows_i686_gnullvm"
971
- version = "0.53.0"
972
- source = "registry+https://github.com/rust-lang/crates.io-index"
973
- checksum = "9ce6ccbdedbf6d6354471319e781c0dfef054c81fbc7cf83f338a4296c0cae11"
974
-
975
935
  [[package]]
976
936
  name = "windows_i686_msvc"
977
937
  version = "0.52.6"
978
938
  source = "registry+https://github.com/rust-lang/crates.io-index"
979
939
  checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66"
980
940
 
981
- [[package]]
982
- name = "windows_i686_msvc"
983
- version = "0.53.0"
984
- source = "registry+https://github.com/rust-lang/crates.io-index"
985
- checksum = "581fee95406bb13382d2f65cd4a908ca7b1e4c2f1917f143ba16efe98a589b5d"
986
-
987
941
  [[package]]
988
942
  name = "windows_x86_64_gnu"
989
943
  version = "0.52.6"
990
944
  source = "registry+https://github.com/rust-lang/crates.io-index"
991
945
  checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78"
992
946
 
993
- [[package]]
994
- name = "windows_x86_64_gnu"
995
- version = "0.53.0"
996
- source = "registry+https://github.com/rust-lang/crates.io-index"
997
- checksum = "2e55b5ac9ea33f2fc1716d1742db15574fd6fc8dadc51caab1c16a3d3b4190ba"
998
-
999
947
  [[package]]
1000
948
  name = "windows_x86_64_gnullvm"
1001
949
  version = "0.52.6"
1002
950
  source = "registry+https://github.com/rust-lang/crates.io-index"
1003
951
  checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d"
1004
952
 
1005
- [[package]]
1006
- name = "windows_x86_64_gnullvm"
1007
- version = "0.53.0"
1008
- source = "registry+https://github.com/rust-lang/crates.io-index"
1009
- checksum = "0a6e035dd0599267ce1ee132e51c27dd29437f63325753051e71dd9e42406c57"
1010
-
1011
953
  [[package]]
1012
954
  name = "windows_x86_64_msvc"
1013
955
  version = "0.52.6"
1014
956
  source = "registry+https://github.com/rust-lang/crates.io-index"
1015
957
  checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec"
1016
958
 
1017
- [[package]]
1018
- name = "windows_x86_64_msvc"
1019
- version = "0.53.0"
1020
- source = "registry+https://github.com/rust-lang/crates.io-index"
1021
- checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486"
1022
-
1023
959
  [[package]]
1024
960
  name = "yaml-rust"
1025
961
  version = "0.4.5"
@@ -1,6 +1,6 @@
1
1
  [package]
2
2
  name = "gitlab-glfm-markdown"
3
- version = "0.0.39"
3
+ version = "0.0.41"
4
4
  edition = "2021"
5
5
  authors = ["digitalmoksha <bwalker@gitlab.com>", "Asherah Connor <aconnor@gitlab.com>"]
6
6
  description = "GitLab Flavored Markdown parser and formatter. 100% CommonMark-compatible. Experimental."
@@ -15,9 +15,9 @@ required-features = ["cli"]
15
15
 
16
16
  [dependencies]
17
17
  clap = { version = "=4.4.18", optional = true, features = ["derive", "string"] }
18
- comrak = { version = "0.48.0", default-features = false, features = ["shortcodes"] }
18
+ comrak = { version = "0.49.0", default-features = false, features = ["shortcodes"] }
19
19
  magnus = "0.8.2"
20
- rb-sys = { version = "0.9.117", default-features = false, features = ["stable-api-compiled-fallback"] }
20
+ rb-sys = { version = "0.9.124", default-features = false, features = ["stable-api-compiled-fallback"] }
21
21
  regex = "1.11.1"
22
22
  lazy_static = "1.5.0"
23
23
  serde_magnus = "0.10.0"
@@ -2,8 +2,10 @@ use std::fmt::{self, Write};
2
2
  use std::sync::LazyLock;
3
3
 
4
4
  use comrak::html::{collect_text, format_node_default, render_sourcepos, ChildRendering, Context};
5
- use comrak::nodes::{AstNode, ListType, NodeHeading, NodeLink, NodeList, NodeValue};
6
- use comrak::{create_formatter, html, node_matches};
5
+ use comrak::nodes::{
6
+ ListType, NodeHeading, NodeLink, NodeList, NodeTaskItem, NodeValue, TableAlignment,
7
+ };
8
+ use comrak::{create_formatter, html, node_matches, Node};
7
9
  use regex::Regex;
8
10
 
9
11
  use crate::glfm::RenderOptions;
@@ -11,6 +13,7 @@ use crate::glfm::RenderOptions;
11
13
  static PLACEHOLDER_REGEX: LazyLock<Regex> =
12
14
  LazyLock::new(|| Regex::new(r"%\{(?:\w{1,30})}").unwrap());
13
15
 
16
+ #[derive(Default)]
14
17
  pub struct RenderUserData {
15
18
  pub default_html: bool,
16
19
  pub inapplicable_tasks: bool,
@@ -55,8 +58,11 @@ create_formatter!(CustomFormatter<RenderUserData>, {
55
58
  NodeValue::List(ref nl) => |context, node, entering| {
56
59
  return render_list(context, node, entering, nl);
57
60
  },
58
- NodeValue::TaskItem(symbol) => |context, node, entering| {
59
- return render_task_item(context, node, entering, symbol);
61
+ NodeValue::TaskItem(ref nti) => |context, node, entering| {
62
+ return render_task_item(context, node, entering, nti);
63
+ },
64
+ NodeValue::TableCell => |context, node, entering| {
65
+ return render_table_cell(context, node, entering);
60
66
  },
61
67
  NodeValue::Escaped => |context, node, entering| {
62
68
  return render_escaped(context, node, entering);
@@ -66,9 +72,9 @@ create_formatter!(CustomFormatter<RenderUserData>, {
66
72
  },
67
73
  });
68
74
 
69
- fn render_text<'a>(
75
+ fn render_text(
70
76
  context: &mut Context<RenderUserData>,
71
- node: &'a AstNode<'a>,
77
+ node: Node<'_>,
72
78
  entering: bool,
73
79
  literal: &str,
74
80
  ) -> Result<ChildRendering, fmt::Error> {
@@ -99,9 +105,9 @@ fn render_text<'a>(
99
105
  Ok(ChildRendering::HTML)
100
106
  }
101
107
 
102
- fn render_link<'a>(
108
+ fn render_link(
103
109
  context: &mut Context<RenderUserData>,
104
- node: &'a AstNode<'a>,
110
+ node: Node<'_>,
105
111
  entering: bool,
106
112
  nl: &NodeLink,
107
113
  ) -> Result<ChildRendering, fmt::Error> {
@@ -148,9 +154,9 @@ fn render_link<'a>(
148
154
  Ok(ChildRendering::HTML)
149
155
  }
150
156
 
151
- fn render_image<'a>(
157
+ fn render_image(
152
158
  context: &mut Context<RenderUserData>,
153
- node: &'a AstNode<'a>,
159
+ node: Node<'_>,
154
160
  entering: bool,
155
161
  nl: &NodeLink,
156
162
  ) -> Result<ChildRendering, fmt::Error> {
@@ -202,9 +208,9 @@ fn render_image<'a>(
202
208
 
203
209
  // Overridden to use class `task-list` instead of `contains-task-list`
204
210
  // to align with GitLab class usage
205
- fn render_list<'a>(
211
+ fn render_list(
206
212
  context: &mut Context<RenderUserData>,
207
- node: &'a AstNode<'a>,
213
+ node: Node<'_>,
208
214
  entering: bool,
209
215
  nl: &NodeList,
210
216
  ) -> Result<ChildRendering, fmt::Error> {
@@ -239,87 +245,51 @@ fn render_list<'a>(
239
245
  Ok(ChildRendering::HTML)
240
246
  }
241
247
 
242
- // Overridden to detect inapplicable task list items
243
- fn render_task_item<'a>(
248
+ // Overridden to:
249
+ // 1. Detect inapplicable task list items; and,
250
+ // 2. Output checkbox sourcepos.
251
+ fn render_task_item(
244
252
  context: &mut Context<RenderUserData>,
245
- node: &'a AstNode<'a>,
253
+ node: Node<'_>,
246
254
  entering: bool,
247
- symbol: Option<char>,
255
+ nti: &NodeTaskItem,
248
256
  ) -> Result<ChildRendering, fmt::Error> {
249
- if !context.user.inapplicable_tasks {
250
- return html::format_node_default(context, node, entering);
251
- }
252
-
253
- let Some(symbol) = symbol else {
254
- return html::format_node_default(context, node, entering);
255
- };
256
-
257
- if symbol == 'x' || symbol == 'X' {
258
- return html::format_node_default(context, node, entering);
259
- }
260
-
261
- // We only proceed past this point if:
262
- //
263
- // * inapplicable_tasks is enabled; and,
264
- // * the symbol is present (the tasklist didn't contain a ' '), and isn't 'x' or 'X'.
265
- //
266
- // There are three possibilities remaining:
267
- //
268
- // * the symbol is '~': we write out an inapplicable task item.
269
- // * the symbol is a different Unicode whitespace: we write out an incomplete task item,
270
- // per Comrak.
271
- // * the symbol is something else: we write out the source Markdown that would've been entered,
272
- // to act like a non-match.
273
- //
274
- // TODO: have Comrak accept a list of acceptable tasklist symbols instead. :)
275
-
276
257
  let write_li = node
277
258
  .parent()
278
259
  .map(|p| node_matches!(p, NodeValue::List(_)))
279
260
  .unwrap_or_default();
280
261
 
281
- if entering {
282
- if symbol == '~' {
283
- context.cr()?;
284
- if write_li {
285
- context.write_str("<li")?;
286
- context.write_str(" class=\"inapplicable")?;
287
-
288
- if context.options.render.tasklist_classes {
289
- context.write_str(" task-list-item")?;
290
- }
291
- context.write_str("\"")?;
292
- html::render_sourcepos(context, node)?;
293
- context.write_str(">")?;
294
- }
295
- context.write_str("<input type=\"checkbox\"")?;
296
- if !write_li {
297
- html::render_sourcepos(context, node)?;
298
- }
299
- if context.options.render.tasklist_classes {
300
- context.write_str(" class=\"task-list-item-checkbox\"")?;
301
- }
262
+ if !entering {
263
+ if write_li {
264
+ context.write_str("</li>\n")?;
265
+ }
266
+ return Ok(ChildRendering::HTML);
267
+ }
302
268
 
303
- context.write_str(" data-inapplicable disabled=\"\"> ")?;
304
- } else if symbol.is_whitespace() {
305
- context.cr()?;
306
- if write_li {
307
- context.write_str("<li")?;
308
- if context.options.render.tasklist_classes {
309
- context.write_str(" class=\"task-list-item\"")?;
310
- }
311
- render_sourcepos(context, node)?;
312
- context.write_str(">")?;
313
- }
314
- context.write_str("<input type=\"checkbox\"")?;
315
- if !write_li {
316
- render_sourcepos(context, node)?;
317
- }
318
- if context.options.render.tasklist_classes {
319
- context.write_str(" class=\"task-list-item-checkbox\"")?;
320
- }
321
- context.write_str(" disabled=\"\" /> ")?;
322
- } else {
269
+ match nti.symbol {
270
+ Some('~') => {
271
+ render_task_item_with(
272
+ context,
273
+ node,
274
+ nti,
275
+ if context.user.inapplicable_tasks {
276
+ TaskItemState::Inapplicable
277
+ } else {
278
+ TaskItemState::Checked
279
+ },
280
+ write_li,
281
+ )?;
282
+ }
283
+ None => {
284
+ render_task_item_with(context, node, nti, TaskItemState::Unchecked, write_li)?;
285
+ }
286
+ Some(ws) if ws.is_whitespace() => {
287
+ render_task_item_with(context, node, nti, TaskItemState::Unchecked, write_li)?;
288
+ }
289
+ Some('x' | 'X') => {
290
+ render_task_item_with(context, node, nti, TaskItemState::Checked, write_li)?;
291
+ }
292
+ Some(symbol) => {
323
293
  context.cr()?;
324
294
  if write_li {
325
295
  context.write_str("<li")?;
@@ -333,16 +303,144 @@ fn render_task_item<'a>(
333
303
  context.escape(&symbol.to_string())?;
334
304
  context.write_str("] ")?;
335
305
  }
336
- } else if write_li {
337
- context.write_str("</li>\n")?;
338
306
  }
339
307
 
340
308
  Ok(ChildRendering::HTML)
341
309
  }
342
310
 
343
- fn render_escaped<'a>(
311
+ #[derive(PartialEq)]
312
+ enum TaskItemState {
313
+ Checked,
314
+ Unchecked,
315
+ Inapplicable,
316
+ }
317
+
318
+ fn render_task_item_with(
319
+ context: &mut Context<RenderUserData>,
320
+ node: Node<'_>,
321
+ nti: &NodeTaskItem,
322
+ state: TaskItemState,
323
+ write_li: bool,
324
+ ) -> fmt::Result {
325
+ context.cr()?;
326
+ if write_li {
327
+ context.write_str("<li")?;
328
+ if context.options.render.tasklist_classes {
329
+ context.write_str(" class=\"")?;
330
+ if state == TaskItemState::Inapplicable {
331
+ context.write_str("inapplicable ")?;
332
+ }
333
+ context.write_str("task-list-item\"")?;
334
+ }
335
+ render_sourcepos(context, node)?;
336
+ context.write_str(">")?;
337
+ }
338
+
339
+ context.write_str("<input type=\"checkbox\"")?;
340
+ if !write_li {
341
+ html::render_sourcepos(context, node)?;
342
+ }
343
+ if context.options.render.sourcepos {
344
+ write!(
345
+ context,
346
+ " data-checkbox-sourcepos=\"{:?}\"",
347
+ nti.symbol_sourcepos
348
+ )?;
349
+ }
350
+
351
+ if context.options.render.tasklist_classes {
352
+ context.write_str(" class=\"task-list-item-checkbox\"")?;
353
+ }
354
+
355
+ match state {
356
+ TaskItemState::Checked => {
357
+ context.write_str(" checked=\"\"")?;
358
+ }
359
+ TaskItemState::Unchecked => {}
360
+ TaskItemState::Inapplicable => {
361
+ context.write_str(" data-inapplicable")?;
362
+ }
363
+ }
364
+ context.write_str(" disabled=\"\" /> ")?;
365
+
366
+ Ok(())
367
+ }
368
+
369
+ fn render_table_cell<T>(
370
+ context: &mut Context<T>,
371
+ node: Node<'_>,
372
+ entering: bool,
373
+ ) -> Result<ChildRendering, fmt::Error> {
374
+ let Some(row_node) = node.parent() else {
375
+ panic!("rendered a table cell without a containing table row");
376
+ };
377
+ let row = &row_node.data().value;
378
+ let in_header = match *row {
379
+ NodeValue::TableRow(header) => header,
380
+ _ => panic!("rendered a table cell contained by something other than a table row"),
381
+ };
382
+
383
+ let Some(table_node) = row_node.parent() else {
384
+ panic!("rendered a table cell without a containing table");
385
+ };
386
+ let table = &table_node.data().value;
387
+ let alignments = match table {
388
+ NodeValue::Table(nt) => &nt.alignments,
389
+ _ => {
390
+ panic!("rendered a table cell in a table row contained by something other than a table")
391
+ }
392
+ };
393
+
394
+ if entering {
395
+ context.cr()?;
396
+ if in_header {
397
+ context.write_str("<th")?;
398
+ render_sourcepos(context, node)?;
399
+ } else {
400
+ context.write_str("<td")?;
401
+ render_sourcepos(context, node)?;
402
+ }
403
+
404
+ let mut start = row_node.first_child().unwrap(); // guaranteed to exist because `node' itself does!
405
+ let mut i = 0;
406
+ while !start.same_node(node) {
407
+ i += 1;
408
+ start = start.next_sibling().unwrap();
409
+ }
410
+
411
+ match alignments[i] {
412
+ TableAlignment::Left => {
413
+ context.write_str(" align=\"left\"")?;
414
+ }
415
+ TableAlignment::Right => {
416
+ context.write_str(" align=\"right\"")?;
417
+ }
418
+ TableAlignment::Center => {
419
+ context.write_str(" align=\"center\"")?;
420
+ }
421
+ TableAlignment::None => (),
422
+ }
423
+
424
+ if context.options.parse.tasklist_in_table
425
+ && context.options.render.tasklist_classes
426
+ && contains_only_task_item(node)
427
+ {
428
+ context.write_str(" class=\"task-table-item\"")?;
429
+ }
430
+
431
+ context.write_str(">")?;
432
+ } else if in_header {
433
+ context.write_str("</th>")?;
434
+ } else {
435
+ context.write_str("</td>")?;
436
+ }
437
+
438
+ Ok(ChildRendering::HTML)
439
+ }
440
+
441
+ fn render_escaped(
344
442
  context: &mut Context<RenderUserData>,
345
- node: &'a AstNode<'a>,
443
+ node: Node<'_>,
346
444
  entering: bool,
347
445
  ) -> Result<ChildRendering, fmt::Error> {
348
446
  if !context.options.render.escaped_char_spans {
@@ -353,7 +451,7 @@ fn render_escaped<'a>(
353
451
  .user
354
452
  .only_escape_chars
355
453
  .as_ref()
356
- .map_or(true, |only_escape_chars| {
454
+ .is_none_or(|only_escape_chars| {
357
455
  with_node_text_content(node, false, |content| {
358
456
  content.chars().count() == 1
359
457
  && only_escape_chars.contains(&content.chars().next().unwrap())
@@ -372,9 +470,9 @@ fn render_escaped<'a>(
372
470
  Ok(ChildRendering::HTML)
373
471
  }
374
472
 
375
- fn render_heading<'a>(
473
+ fn render_heading(
376
474
  context: &mut Context<RenderUserData>,
377
- node: &'a AstNode<'a>,
475
+ node: Node<'_>,
378
476
  entering: bool,
379
477
  nh: &NodeHeading,
380
478
  ) -> Result<ChildRendering, fmt::Error> {
@@ -415,7 +513,7 @@ fn render_heading<'a>(
415
513
 
416
514
  /// If the given node has a single text child, apply a function to the text content
417
515
  /// of that node. Otherwise, return the given default value.
418
- fn with_node_text_content<'a, U, F>(node: &'a AstNode<'a>, default: U, f: F) -> U
516
+ fn with_node_text_content<U, F>(node: Node<'_>, default: U, f: F) -> U
419
517
  where
420
518
  F: FnOnce(&str) -> U,
421
519
  {
@@ -433,3 +531,16 @@ where
433
531
  };
434
532
  f(text)
435
533
  }
534
+
535
+ fn contains_only_task_item(node: Node<'_>) -> bool {
536
+ let Some(first) = node.first_child() else {
537
+ return false;
538
+ };
539
+ if !matches!(first.data().value, NodeValue::TaskItem(..)) {
540
+ return false;
541
+ }
542
+ if first.next_sibling().is_some() {
543
+ return false;
544
+ }
545
+ true
546
+ }
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module GLFMMarkdown
4
- VERSION = '0.0.39'
4
+ VERSION = '0.0.41'
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gitlab-glfm-markdown
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.39
4
+ version: 0.0.41
5
5
  platform: x86_64-darwin
6
6
  authors:
7
7
  - Brett Walker
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2025-11-14 00:00:00.000000000 Z
12
+ date: 2026-01-13 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rb_sys
@@ -17,14 +17,14 @@ dependencies:
17
17
  requirements:
18
18
  - - "~>"
19
19
  - !ruby/object:Gem::Version
20
- version: 0.9.109
20
+ version: 0.9.124
21
21
  type: :runtime
22
22
  prerelease: false
23
23
  version_requirements: !ruby/object:Gem::Requirement
24
24
  requirements:
25
25
  - - "~>"
26
26
  - !ruby/object:Gem::Version
27
- version: 0.9.109
27
+ version: 0.9.124
28
28
  - !ruby/object:Gem::Dependency
29
29
  name: rake
30
30
  requirement: !ruby/object:Gem::Requirement
@@ -45,14 +45,14 @@ dependencies:
45
45
  requirements:
46
46
  - - "~>"
47
47
  - !ruby/object:Gem::Version
48
- version: '1.2'
48
+ version: '1.3'
49
49
  type: :development
50
50
  prerelease: false
51
51
  version_requirements: !ruby/object:Gem::Requirement
52
52
  requirements:
53
53
  - - "~>"
54
54
  - !ruby/object:Gem::Version
55
- version: '1.2'
55
+ version: '1.3'
56
56
  description: Markdown processing for GitLab Flavored Markdown
57
57
  email:
58
58
  - bwalker@gitlab.com
@@ -76,6 +76,7 @@ files:
76
76
  - lib/gitlab_glfm_markdown/3.2/gitlab_glfm_markdown.bundle
77
77
  - lib/gitlab_glfm_markdown/3.3/gitlab_glfm_markdown.bundle
78
78
  - lib/gitlab_glfm_markdown/3.4/gitlab_glfm_markdown.bundle
79
+ - lib/gitlab_glfm_markdown/4.0/gitlab_glfm_markdown.bundle
79
80
  - lib/gitlab_glfm_markdown/loader.rb
80
81
  - lib/gitlab_glfm_markdown/version.rb
81
82
  homepage: https://gitlab.com/gitlab-org/ruby/gems/gitlab-glfm-markdown
@@ -96,7 +97,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
96
97
  version: '3.1'
97
98
  - - "<"
98
99
  - !ruby/object:Gem::Version
99
- version: 3.5.dev
100
+ version: 4.1.dev
100
101
  required_rubygems_version: !ruby/object:Gem::Requirement
101
102
  requirements:
102
103
  - - ">="