mirror of
https://github.com/nsnail/spectre.console.git
synced 2025-04-16 00:42:51 +08:00
Compare commits
765 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
a46321c06b | ||
![]() |
29ab313bb9 | ||
![]() |
92daeb739d | ||
![]() |
43e9669395 | ||
![]() |
ab8384acf6 | ||
![]() |
b2689be3ed | ||
![]() |
835143d95f | ||
![]() |
8f2a859087 | ||
![]() |
2be8e8da4e | ||
![]() |
2a8810affd | ||
![]() |
e1d21e7e61 | ||
![]() |
c7c3ebdf57 | ||
![]() |
b67af32423 | ||
![]() |
10773a5625 | ||
![]() |
4802751357 | ||
![]() |
4515d89705 | ||
![]() |
be45494d6e | ||
![]() |
69689d2ba1 | ||
![]() |
aa9e5c48c6 | ||
![]() |
8d06daf355 | ||
![]() |
cecfdc386c | ||
![]() |
375a708c43 | ||
![]() |
574ead6d46 | ||
![]() |
a87277e859 | ||
![]() |
fdc03f2081 | ||
![]() |
3eb620a44e | ||
![]() |
bc88da8056 | ||
![]() |
00b9aecb4f | ||
![]() |
444dbed259 | ||
![]() |
a32dc8030b | ||
![]() |
75547b2436 | ||
![]() |
22d1cbe01f | ||
![]() |
7f8ed509bb | ||
![]() |
c70a8b8fc5 | ||
![]() |
b470af11f7 | ||
![]() |
23b160a3f5 | ||
![]() |
1345a6347a | ||
![]() |
78f3f80b17 | ||
![]() |
a55b80220d | ||
![]() |
f8a4b2271d | ||
![]() |
dba7ad0875 | ||
![]() |
322ed2efbb | ||
![]() |
156d254208 | ||
![]() |
3437130bf0 | ||
![]() |
32384f7b8d | ||
![]() |
32361d3f15 | ||
![]() |
b9d2d2df6d | ||
![]() |
8e44a83737 | ||
![]() |
fd69ad0b01 | ||
![]() |
753894de94 | ||
![]() |
dc2cb40b79 | ||
![]() |
511f798f0f | ||
![]() |
2081c0fd9a | ||
![]() |
96512f353f | ||
![]() |
56feea11a1 | ||
![]() |
45c24055fa | ||
![]() |
d56139756c | ||
![]() |
7af1eedca7 | ||
![]() |
6116af3844 | ||
![]() |
2cc6c457ad | ||
![]() |
f02b46107e | ||
![]() |
42fd801876 | ||
![]() |
bb72b44d60 | ||
![]() |
d79e6adc5f | ||
![]() |
64b9ef582d | ||
![]() |
a19c84e25a | ||
![]() |
b61fff042b | ||
![]() |
ca441dbe7a | ||
![]() |
f6bcf67cbe | ||
![]() |
5c87d7fa04 | ||
![]() |
0e2ed511a5 | ||
![]() |
7b13148773 | ||
![]() |
e5a6459c52 | ||
![]() |
68b28b57f2 | ||
![]() |
43b5ac99f9 | ||
![]() |
b1b50a21f7 | ||
![]() |
5d4b2c88e5 | ||
![]() |
3acc90e47c | ||
![]() |
88515b7d7f | ||
![]() |
c5e11626b5 | ||
![]() |
2ead177404 | ||
![]() |
71f762f646 | ||
![]() |
95bff47b85 | ||
![]() |
de04619f88 | ||
![]() |
ecdfdd4b85 | ||
![]() |
a893a9601e | ||
![]() |
d52d14e848 | ||
![]() |
a62e79992b | ||
![]() |
4f22f5b7c3 | ||
![]() |
ff7282ecb8 | ||
![]() |
eb38f76a6a | ||
![]() |
20a2f727f7 | ||
![]() |
fc0b553a4a | ||
![]() |
1a3249cdae | ||
![]() |
43f9ae92ad | ||
![]() |
e66d3aab2e | ||
![]() |
d921ac6f02 | ||
![]() |
5acd83a3ef | ||
![]() |
397b742bec | ||
![]() |
d30b08201d | ||
![]() |
8da05bcc17 | ||
![]() |
badcd642ec | ||
![]() |
fde9ee04cf | ||
![]() |
b6e0b2389a | ||
![]() |
3f5e8aabf5 | ||
![]() |
ead874e6b2 | ||
![]() |
e13410861d | ||
![]() |
bf3b91a535 | ||
![]() |
72704529c5 | ||
![]() |
b21e07ea94 | ||
![]() |
703d653ec5 | ||
![]() |
71631b248a | ||
![]() |
63c22575ea | ||
![]() |
9cc888e5ad | ||
![]() |
d5b4621233 | ||
![]() |
cee97821d6 | ||
![]() |
55c763a5c2 | ||
![]() |
d03c10623c | ||
![]() |
5a52c1f277 | ||
![]() |
544e6a92df | ||
![]() |
a94bc15746 | ||
![]() |
e7ce6a69b7 | ||
![]() |
7cf7e84dd8 | ||
![]() |
6f1f29967d | ||
![]() |
006da0f9ea | ||
![]() |
c62f79eded | ||
![]() |
1d19079913 | ||
![]() |
44300c871f | ||
![]() |
989c0b9904 | ||
![]() |
cb52eb63ce | ||
![]() |
7397169a27 | ||
![]() |
ffdb47d77f | ||
![]() |
383bee0e3e | ||
![]() |
4d6541dd14 | ||
![]() |
b1e0896a0d | ||
![]() |
e07ccd9f66 | ||
![]() |
250b1f4c9c | ||
![]() |
023c77ff09 | ||
![]() |
dc402220f2 | ||
![]() |
c448d0d5f6 | ||
![]() |
3da367f29f | ||
![]() |
ead7115cbe | ||
![]() |
1fd028942f | ||
![]() |
4219bbbf61 | ||
![]() |
29a43686d4 | ||
![]() |
63b940cf0e | ||
![]() |
bbf58ee814 | ||
![]() |
e2a674815d | ||
![]() |
343b98944d | ||
![]() |
2bbb7c1ab6 | ||
![]() |
5296e56b1c | ||
![]() |
943c045fab | ||
![]() |
2af3f7faeb | ||
![]() |
ed9e198d60 | ||
![]() |
3bee7212b7 | ||
![]() |
c82d8c4523 | ||
![]() |
bef21e8a21 | ||
![]() |
037e109699 | ||
![]() |
f7befacd79 | ||
![]() |
cec5fb4595 | ||
![]() |
9c86391fb6 | ||
![]() |
a3dcb31729 | ||
![]() |
1002c6fe27 | ||
![]() |
c64797d681 | ||
![]() |
131b37fff8 | ||
![]() |
813a53cdfa | ||
![]() |
2af901a814 | ||
![]() |
83afa97017 | ||
![]() |
e0ded712e8 | ||
![]() |
d484e832f5 | ||
![]() |
71a5d83067 | ||
![]() |
35ce60b596 | ||
![]() |
0ec70a44db | ||
![]() |
1ee2653cf8 | ||
![]() |
4c0178cf9a | ||
![]() |
296bc61837 | ||
![]() |
766ccb1f1b | ||
![]() |
f7314dc2e8 | ||
![]() |
f453890d13 | ||
![]() |
2c8f459806 | ||
![]() |
018f4ebd17 | ||
![]() |
404b052a5f | ||
![]() |
dac2097321 | ||
![]() |
6acf9b8c63 | ||
![]() |
3ec0fee795 | ||
![]() |
5843a4545e | ||
![]() |
d64d3ec770 | ||
![]() |
4dcbd30285 | ||
![]() |
1334319dd1 | ||
![]() |
714cf179cb | ||
![]() |
70da3f40ff | ||
![]() |
5075732564 | ||
![]() |
10467a2912 | ||
![]() |
a7ab1b690e | ||
![]() |
142942b8a2 | ||
![]() |
0bab835293 | ||
![]() |
a6af9a6842 | ||
![]() |
d3f4f5f208 | ||
![]() |
cbbdb3369c | ||
![]() |
6740f0b02b | ||
![]() |
f7f99ec899 | ||
![]() |
955fe07bac | ||
![]() |
819b948e78 | ||
![]() |
baa8220a52 | ||
![]() |
9cd7b24e65 | ||
![]() |
04610cf492 | ||
![]() |
f4183e0462 | ||
![]() |
29846ba505 | ||
![]() |
92318ce1fb | ||
![]() |
720db951f3 | ||
![]() |
e042fe15e4 | ||
![]() |
62b30d6072 | ||
![]() |
beca0b2419 | ||
![]() |
de847b90e4 | ||
![]() |
7b9553dd22 | ||
![]() |
f223f6061c | ||
![]() |
eba2a8cc76 | ||
![]() |
bc6ba26840 | ||
![]() |
54be64ec84 | ||
![]() |
3e6e0990c5 | ||
![]() |
4a8a4ab048 | ||
![]() |
b793482ebb | ||
![]() |
f895bb175d | ||
![]() |
4258cbfb85 | ||
![]() |
83982347f6 | ||
![]() |
879dd9fbb1 | ||
![]() |
c1e9c1a99f | ||
![]() |
a9b97fa4dc | ||
![]() |
55c3f3b7a8 | ||
![]() |
02ff3fc910 | ||
![]() |
c3ec6a7363 | ||
![]() |
9ce3b99cd6 | ||
![]() |
a70cc90797 | ||
![]() |
7dce4af552 | ||
![]() |
02f9d26473 | ||
![]() |
995ef10b8b | ||
![]() |
4ea64ccb9c | ||
![]() |
a755cc5d9c | ||
![]() |
2a493cfee9 | ||
![]() |
9df6ed213c | ||
![]() |
6a4d8c8f30 | ||
![]() |
5f1121e8e1 | ||
![]() |
d7babcc6e4 | ||
![]() |
f085da76c1 | ||
![]() |
8fa53f8fb1 | ||
![]() |
f6a7c96413 | ||
![]() |
a91a3c12ad | ||
![]() |
82de4a55c4 | ||
![]() |
db095217b7 | ||
![]() |
7b23456d3e | ||
![]() |
cbfcc37a46 | ||
![]() |
999c59909b | ||
![]() |
fd8d271a10 | ||
![]() |
8b5836f4e4 | ||
![]() |
5581ad2f05 | ||
![]() |
d339442df8 | ||
![]() |
422012c994 | ||
![]() |
4f0ec87522 | ||
![]() |
eb02c3d534 | ||
![]() |
088db165ed | ||
![]() |
1082ac1efc | ||
![]() |
a60910c15f | ||
![]() |
73ab977f26 | ||
![]() |
79913ab238 | ||
![]() |
9a7ac7b5b2 | ||
![]() |
9cbfda9e4a | ||
![]() |
bb013dcc52 | ||
![]() |
af9f5ea97d | ||
![]() |
e96a821ead | ||
![]() |
506253bc34 | ||
![]() |
90c2d988ab | ||
![]() |
2bd1383cbe | ||
![]() |
00a9ba325e | ||
![]() |
540bc1307c | ||
![]() |
a6618f762c | ||
![]() |
638149f44b | ||
![]() |
0d72b94f9c | ||
![]() |
0d19ccd8a6 | ||
![]() |
78d841e3dc | ||
![]() |
d94dc2fcb2 | ||
![]() |
9d985f0f0a | ||
![]() |
3a7b8aa1d2 | ||
![]() |
dc93edef15 | ||
![]() |
b4cf7a76d3 | ||
![]() |
45a051150f | ||
![]() |
47ef9a685e | ||
![]() |
8ca602b986 | ||
![]() |
a11ae6a93d | ||
![]() |
b13ff8ebcc | ||
![]() |
90e6a1aa21 | ||
![]() |
f3a82073d9 | ||
![]() |
ff8fd9ed2a | ||
![]() |
1eeb32c704 | ||
![]() |
c32decfa55 | ||
![]() |
564c7b8f4e | ||
![]() |
5b2b4375a4 | ||
![]() |
70bbc24911 | ||
![]() |
36ca22ffac | ||
![]() |
b600832e00 | ||
![]() |
da1c471c18 | ||
![]() |
b6b963c03c | ||
![]() |
7e1fb43f21 | ||
![]() |
47fde1875b | ||
![]() |
eb85f5860e | ||
![]() |
25a61bea91 | ||
![]() |
bad6672d76 | ||
![]() |
f614032c82 | ||
![]() |
585f010b26 | ||
![]() |
90b917c38c | ||
![]() |
edbe9d6ebc | ||
![]() |
90de1847d8 | ||
![]() |
38d9386e00 | ||
![]() |
7998ece6b6 | ||
![]() |
1d8154f9b0 | ||
![]() |
1f2629e2e1 | ||
![]() |
a6364e066b | ||
![]() |
fbe1d0b6f2 | ||
![]() |
eb4a7d3bf4 | ||
![]() |
5e41a2f505 | ||
![]() |
921d595269 | ||
![]() |
899dd20b65 | ||
![]() |
8ae3d258e4 | ||
![]() |
974aa1afda | ||
![]() |
66fc949e2a | ||
![]() |
d6cdd1fbda | ||
![]() |
bec3315d91 | ||
![]() |
d465d93a9b | ||
![]() |
782a99d726 | ||
![]() |
b6be693007 | ||
![]() |
f9a85e017a | ||
![]() |
36e5350968 | ||
![]() |
3ac63d2670 | ||
![]() |
c2da268129 | ||
![]() |
74a2e10ff0 | ||
![]() |
e8eb5b85b9 | ||
![]() |
78958aae27 | ||
![]() |
a0e20f299c | ||
![]() |
ff4215f431 | ||
![]() |
f221c1f25c | ||
![]() |
0b988ff65c | ||
![]() |
9a6d8d92b4 | ||
![]() |
52c1d9122b | ||
![]() |
eb6a9d8d04 | ||
![]() |
ec1188b837 | ||
![]() |
1dbaf50935 | ||
![]() |
523adc6c49 | ||
![]() |
bba5f0c5dc | ||
![]() |
19ff48f4b8 | ||
![]() |
8fcd2e59d6 | ||
![]() |
8ce40bac3c | ||
![]() |
8e762e4618 | ||
![]() |
37f661a963 | ||
![]() |
55633b59fa | ||
![]() |
3f561e0902 | ||
![]() |
461348f2fb | ||
![]() |
fd4b96944e | ||
![]() |
2e5d18fa78 | ||
![]() |
168f35202d | ||
![]() |
225305f90e | ||
![]() |
8fed3bc575 | ||
![]() |
19eb273813 | ||
![]() |
48df9cf68b | ||
![]() |
2f6b4f53c4 | ||
![]() |
21ac952307 | ||
![]() |
e86f9d3c5a | ||
![]() |
9c9eb04f91 | ||
![]() |
ba4b7b97f8 | ||
![]() |
b738187b28 | ||
![]() |
b3ef7d4fa6 | ||
![]() |
c5c1852fc3 | ||
![]() |
045d0922c8 | ||
![]() |
949f35defd | ||
![]() |
f5a2735501 | ||
![]() |
d02c9e552e | ||
![]() |
a4ae36738b | ||
![]() |
35d2750b68 | ||
![]() |
4d2d927caa | ||
![]() |
174d285035 | ||
![]() |
e8e92e7f44 | ||
![]() |
3718502eee | ||
![]() |
39cfc7a62f | ||
![]() |
2e90ef28e4 | ||
![]() |
2a3763cdc7 | ||
![]() |
e0395dfa2b | ||
![]() |
ca2e6ce0ad | ||
![]() |
fa15389158 | ||
![]() |
a5716a35e2 | ||
![]() |
644fb76d61 | ||
![]() |
e3dfe23b59 | ||
![]() |
ad23855b0a | ||
![]() |
64f444114a | ||
![]() |
b058c54f3c | ||
![]() |
8cfe06e77a | ||
![]() |
48d49d6e18 | ||
![]() |
49e8a980a7 | ||
![]() |
d34012cad0 | ||
![]() |
c3510f3036 | ||
![]() |
786b7670da | ||
![]() |
ffd24ec451 | ||
![]() |
e081593012 | ||
![]() |
bf95564ebb | ||
![]() |
3c5b98123b | ||
![]() |
7276e11ecc | ||
![]() |
d306ad82d1 | ||
![]() |
d96817dc9c | ||
![]() |
e169df6303 | ||
![]() |
57731c0d55 | ||
![]() |
170901f584 | ||
![]() |
c2b25eea8a | ||
![]() |
223642b797 | ||
![]() |
32d7ea15bd | ||
![]() |
fa5a1e88ec | ||
![]() |
d532e1011f | ||
![]() |
5f97f2300c | ||
![]() |
884cb8ddd4 | ||
![]() |
314e50b531 | ||
![]() |
d9f06413d0 | ||
![]() |
6e2ca8449e | ||
![]() |
58eff30787 | ||
![]() |
aa59f6cd55 | ||
![]() |
2011cb2eff | ||
![]() |
865552c3f2 | ||
![]() |
fa553fd72e | ||
![]() |
a186fd94ac | ||
![]() |
6b5b31957c | ||
![]() |
b92827ce3d | ||
![]() |
c9b178ac96 | ||
![]() |
721d73e9eb | ||
![]() |
8b058d6342 | ||
![]() |
d1048260cc | ||
![]() |
bdcc01ea68 | ||
![]() |
4f293d887d | ||
![]() |
d015a4966f | ||
![]() |
5cbe9d40b0 | ||
![]() |
5faa61fa64 | ||
![]() |
087f216bcf | ||
![]() |
ebd7bb5949 | ||
![]() |
0bf97cb666 | ||
![]() |
ebb1076dd0 | ||
![]() |
21f731ebd5 | ||
![]() |
397860e42e | ||
![]() |
adb600c430 | ||
![]() |
ab83e41051 | ||
![]() |
0d2a75aeee | ||
![]() |
bfdaef95d6 | ||
![]() |
cb8dc97847 | ||
![]() |
450d87f5d3 | ||
![]() |
46abadaccb | ||
![]() |
69fdae70c0 | ||
![]() |
91a0be86a3 | ||
![]() |
ab09a30bc7 | ||
![]() |
a2ed88e2eb | ||
![]() |
3dea412785 | ||
![]() |
5d68020abb | ||
![]() |
315a52f3e9 | ||
![]() |
c147929f16 | ||
![]() |
6549436356 | ||
![]() |
1dfc6bdadc | ||
![]() |
2ba06577ef | ||
![]() |
ea5b7338ad | ||
![]() |
4d88a6ab69 | ||
![]() |
1dd1945297 | ||
![]() |
d1d94cdebe | ||
![]() |
e48ae9600a | ||
![]() |
d63255aa5f | ||
![]() |
9a68b27b31 | ||
![]() |
2a9fbb1ee9 | ||
![]() |
b568098d5e | ||
![]() |
cba02070f9 | ||
![]() |
01f707c78d | ||
![]() |
8d67c0a6b4 | ||
![]() |
3463dde543 | ||
![]() |
91f910326c | ||
![]() |
79af013bf2 | ||
![]() |
04efd1719c | ||
![]() |
f5a9c0ca26 | ||
![]() |
23564612c1 | ||
![]() |
f2b8afffb3 | ||
![]() |
3e2eea730b | ||
![]() |
bc9f610258 | ||
![]() |
ae96606ab7 | ||
![]() |
41ccc0b464 | ||
![]() |
3545e0f6b5 | ||
![]() |
2fe2bb3c32 | ||
![]() |
1fc6f22ea9 | ||
![]() |
6a5c507936 | ||
![]() |
efa3d3b130 | ||
![]() |
6007fcaafc | ||
![]() |
13ac38ed04 | ||
![]() |
ca036f6543 | ||
![]() |
36ec3d1fd3 | ||
![]() |
fe5096dceb | ||
![]() |
39b59c8d4a | ||
![]() |
8cf7794852 | ||
![]() |
4edc647fdd | ||
![]() |
be45a0ff4e | ||
![]() |
256fcdd27f | ||
![]() |
dafbfe63ba | ||
![]() |
a2ab522516 | ||
![]() |
8778ab1739 | ||
![]() |
693e1fa170 | ||
![]() |
4b37a4708f | ||
![]() |
a690ce4955 | ||
![]() |
759b16aed9 | ||
![]() |
254880e93a | ||
![]() |
6f16081f42 | ||
![]() |
6121203fee | ||
![]() |
9204671b27 | ||
![]() |
c765bbd0dd | ||
![]() |
6bceac8a5e | ||
![]() |
1ed7e65fcb | ||
![]() |
20650f1e7e | ||
![]() |
2ba6da3514 | ||
![]() |
8830779875 | ||
![]() |
9c46c21e27 | ||
![]() |
c643ec735d | ||
![]() |
b17eabaa1f | ||
![]() |
7f6f2437b1 | ||
![]() |
c2bab0ebf8 | ||
![]() |
9502aaf2b9 | ||
![]() |
57a8e6ccc1 | ||
![]() |
8c099a0038 | ||
![]() |
08b65cfa47 | ||
![]() |
2540f48622 | ||
![]() |
e4dda283bb | ||
![]() |
da9c6ee4c2 | ||
![]() |
855127f32a | ||
![]() |
fa731070d8 | ||
![]() |
ef08c5bf2b | ||
![]() |
1c769c6610 | ||
![]() |
1cd335e785 | ||
![]() |
29e6e34f83 | ||
![]() |
bff3438a5a | ||
![]() |
c64884854f | ||
![]() |
3a42c0a119 | ||
![]() |
525b414ff8 | ||
![]() |
ed0fb29be4 | ||
![]() |
04d0e663d5 | ||
![]() |
17ee8990f4 | ||
![]() |
a1050fc676 | ||
![]() |
9312663bde | ||
![]() |
102e2dc38d | ||
![]() |
28e9c14de4 | ||
![]() |
fd217ffc83 | ||
![]() |
95ec04df40 | ||
![]() |
705cf745ea | ||
![]() |
b64e016e8c | ||
![]() |
58400fe74e | ||
![]() |
e20f6284f9 | ||
![]() |
953008b5e3 | ||
![]() |
ad49b6aa67 | ||
![]() |
31a5e17a45 | ||
![]() |
f06dc7e7d8 | ||
![]() |
a23bec4082 | ||
![]() |
913a7b1e37 | ||
![]() |
63bae278a9 | ||
![]() |
1a747696a8 | ||
![]() |
994540d97f | ||
![]() |
dee3c01629 | ||
![]() |
a3e11b24e5 | ||
![]() |
35568ab823 | ||
![]() |
07db28bb6f | ||
![]() |
d87d8e4422 | ||
![]() |
a977fdadff | ||
![]() |
8261b25e5c | ||
![]() |
0e0f4b4220 | ||
![]() |
3a593857c8 | ||
![]() |
11e192e750 | ||
![]() |
8901450283 | ||
![]() |
0796bad598 | ||
![]() |
5b553a4106 | ||
![]() |
1bb0b9ccc6 | ||
![]() |
9ad5f2daeb | ||
![]() |
1f211d3e1f | ||
![]() |
87e6b42409 | ||
![]() |
1aa958ced3 | ||
![]() |
4bfb24bfcb | ||
![]() |
b136d0299b | ||
![]() |
179e243214 | ||
![]() |
c6210f75ca | ||
![]() |
b81739567b | ||
![]() |
5cf41725a5 | ||
![]() |
f561d71e4e | ||
![]() |
e71db7f78c | ||
![]() |
79742ce9e3 | ||
![]() |
241423dd16 | ||
![]() |
4e2251fd62 | ||
![]() |
0ae419326d | ||
![]() |
0bbf9b81a9 | ||
![]() |
041aea2ae5 | ||
![]() |
f417e297cd | ||
![]() |
5045b8b959 | ||
![]() |
7dccb310f3 | ||
![]() |
1cf30f62fc | ||
![]() |
e280b82679 | ||
![]() |
6932c95731 | ||
![]() |
ee305702e8 | ||
![]() |
63abcc92ba | ||
![]() |
acf01e056f | ||
![]() |
501db5d287 | ||
![]() |
cbed41e637 | ||
![]() |
3c504155bc | ||
![]() |
ae32785f21 | ||
![]() |
c61e386440 | ||
![]() |
b7cd7dd53e | ||
![]() |
3e1251b86a | ||
![]() |
01fdbac51e | ||
![]() |
b0b988a1e7 | ||
![]() |
2a9fa223de | ||
![]() |
4f6eca4fcb | ||
![]() |
a5125d640c | ||
![]() |
a59e0dcb21 | ||
![]() |
bde61cc6ff | ||
![]() |
5c33b87a9c | ||
![]() |
aaf77c3b25 | ||
![]() |
d70ad661fc | ||
![]() |
0d209d8f18 | ||
![]() |
380c6aca45 | ||
![]() |
b1da5e7ba8 | ||
![]() |
be3350a411 | ||
![]() |
a1d11e9d0c | ||
![]() |
93d1971f48 | ||
![]() |
bca1c889d1 | ||
![]() |
9915a0d6a8 | ||
![]() |
f34fc43d00 | ||
![]() |
e7f497050c | ||
![]() |
3e5e22d6c2 | ||
![]() |
10daf727e9 | ||
![]() |
03334f693d | ||
![]() |
c9c0ad733f | ||
![]() |
041bd016a2 | ||
![]() |
037a215a78 | ||
![]() |
9afc1ea721 | ||
![]() |
b52056ee49 | ||
![]() |
3941fd81ab | ||
![]() |
5a1b8a1710 | ||
![]() |
1410cba6c5 | ||
![]() |
70fc14e9cd | ||
![]() |
0b4359a52a | ||
![]() |
cb2924a609 | ||
![]() |
5c119ee0c3 | ||
![]() |
b9d182b6e3 | ||
![]() |
bfffef630f | ||
![]() |
a2f507e58f | ||
![]() |
d1d06d6a6b | ||
![]() |
52718c499c | ||
![]() |
7ef1ac483a | ||
![]() |
c0875c912a | ||
![]() |
3f2ca49071 | ||
![]() |
0a0380ae0a | ||
![]() |
ae92c606bb | ||
![]() |
68e92f3365 | ||
![]() |
39a8588dc3 | ||
![]() |
3c3afe7439 | ||
![]() |
971f9032ba | ||
![]() |
5149557560 | ||
![]() |
e0947708c9 | ||
![]() |
b1db8a9403 | ||
![]() |
a2f8652575 | ||
![]() |
672faa131f | ||
![]() |
e429f6434b | ||
![]() |
93ec7401c8 | ||
![]() |
697273917e | ||
![]() |
2943535973 | ||
![]() |
cd0d182f12 | ||
![]() |
b197f278ed | ||
![]() |
3847a8949f | ||
![]() |
eeb3f967b6 | ||
![]() |
090b30f731 | ||
![]() |
df291ef84e | ||
![]() |
7d6104ace4 | ||
![]() |
314456ca17 | ||
![]() |
b7f654cd7f | ||
![]() |
fea8a36e8a | ||
![]() |
0632b38477 | ||
![]() |
a7b7d4e556 | ||
![]() |
11d331e31d | ||
![]() |
ce670a7ca9 | ||
![]() |
101e244059 | ||
![]() |
504746c5dc | ||
![]() |
1601ef24b3 | ||
![]() |
b46d0fa4f6 | ||
![]() |
4f06687104 | ||
![]() |
003e15686f | ||
![]() |
3e9796849b | ||
![]() |
3cc19520b0 | ||
![]() |
87bde3e5a2 | ||
![]() |
e6e9a4d950 | ||
![]() |
29ce14e1e8 | ||
![]() |
ceb3572d6a | ||
![]() |
13c56eca01 | ||
![]() |
a477884d36 | ||
![]() |
ae6d2c63a3 | ||
![]() |
e946289bd9 | ||
![]() |
bcaaa6b2d3 | ||
![]() |
d3588a4b06 | ||
![]() |
7471e9d38c | ||
![]() |
9f8ca6d648 | ||
![]() |
88edfe68ec | ||
![]() |
5d32764a64 | ||
![]() |
4f6c9c62c7 | ||
![]() |
f2677213a4 | ||
![]() |
bdaf00a556 | ||
![]() |
7de4b6c7b9 | ||
![]() |
0bc801e3eb | ||
![]() |
88a82cdad0 | ||
![]() |
0cecb555d5 | ||
![]() |
52e3ee17b0 | ||
![]() |
caf7661e66 | ||
![]() |
65f0a085cc | ||
![]() |
a123806cd8 | ||
![]() |
173645cdd2 | ||
![]() |
7fd2efaeb5 | ||
![]() |
47fd646d21 | ||
![]() |
a06859dcb5 | ||
![]() |
7d3a67e6ae | ||
![]() |
f4497b1278 | ||
![]() |
a16daade6c | ||
![]() |
ab73d16583 | ||
![]() |
f2566f2ca4 | ||
![]() |
358b0225b4 | ||
![]() |
68aaf8a2fa | ||
![]() |
1b2f2dab82 | ||
![]() |
270658b0bb | ||
![]() |
21c210dc8a | ||
![]() |
c546835198 | ||
![]() |
3a432b11c8 | ||
![]() |
3210afb698 | ||
![]() |
f1912b1d44 | ||
![]() |
decb887b0a | ||
![]() |
31f117aed0 | ||
![]() |
c111c7d463 | ||
![]() |
695327ec72 | ||
![]() |
6df90442b7 | ||
![]() |
7182d01a23 | ||
![]() |
8a01b93aca | ||
![]() |
effdecb1d4 | ||
![]() |
4cfe55cc27 | ||
![]() |
5b33f80213 | ||
![]() |
d7bbaf4a85 | ||
![]() |
0119364728 | ||
![]() |
1d74fb909c | ||
![]() |
5d132220ba | ||
![]() |
a273f74758 | ||
![]() |
717931f11c | ||
![]() |
bcfc495843 | ||
![]() |
9aa36c4cf0 | ||
![]() |
22d4af4482 | ||
![]() |
f4d1796e40 | ||
![]() |
2dd0eb9f74 | ||
![]() |
fa85216554 | ||
![]() |
d475e3b30a | ||
![]() |
9637066927 | ||
![]() |
0b4321115a | ||
![]() |
5cd9ece31a | ||
![]() |
b0341862cf | ||
![]() |
2e7b3d520a | ||
![]() |
646f51a628 | ||
![]() |
a0bd481255 | ||
![]() |
6d197c5140 | ||
![]() |
108e56c229 | ||
![]() |
66994cd904 | ||
![]() |
f9bd936254 | ||
![]() |
a068fc68c3 | ||
![]() |
aa34c145b9 |
@ -2,7 +2,7 @@ root = true
|
||||
|
||||
[*]
|
||||
charset = utf-8
|
||||
end_of_line = CRLF
|
||||
end_of_line = LF
|
||||
indent_style = space
|
||||
indent_size = 4
|
||||
insert_final_newline = false
|
||||
@ -26,10 +26,10 @@ indent_size = 2
|
||||
[*.md]
|
||||
trim_trailing_whitespace = false
|
||||
|
||||
[*.sh]
|
||||
end_of_line = lf
|
||||
|
||||
[*.cs]
|
||||
# Prefer file scoped namespace declarations
|
||||
csharp_style_namespace_declarations = file_scoped:warning
|
||||
|
||||
# Sort using and Import directives with System.* appearing first
|
||||
dotnet_sort_system_directives_first = true
|
||||
dotnet_separate_import_directive_groups = false
|
||||
|
5
.git-blame-ignore-revs
Normal file
5
.git-blame-ignore-revs
Normal file
@ -0,0 +1,5 @@
|
||||
# Use file scoped namespace declarations
|
||||
7b2da0a4f63bf3ceab99d2c88535e74155f2b99c
|
||||
|
||||
# fix line-endings
|
||||
e2ad4b1ea5555e701cda4fd400bb6592e318e1ff
|
4
.gitattributes
vendored
Normal file
4
.gitattributes
vendored
Normal file
@ -0,0 +1,4 @@
|
||||
* text=auto
|
||||
|
||||
*.cs text eol=lf
|
||||
*.md text eol=lf
|
31
.github/ISSUE_TEMPLATE/bug_report.md
vendored
Normal file
31
.github/ISSUE_TEMPLATE/bug_report.md
vendored
Normal file
@ -0,0 +1,31 @@
|
||||
---
|
||||
name: Bug report
|
||||
about: Create a report to help us improve
|
||||
title: ''
|
||||
labels: ["bug", "needs triage"]
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
**Information**
|
||||
- OS: [eg Windows/Linux/MacOS]
|
||||
- Version: [e.g. 0.33.0]
|
||||
- Terminal: [e.g Windows Terminal]
|
||||
|
||||
**Describe the bug**
|
||||
A clear and concise description of what the bug is.
|
||||
|
||||
**To Reproduce**
|
||||
Steps to reproduce the behavior.
|
||||
|
||||
**Expected behavior**
|
||||
A clear and concise description of what you expected to happen.
|
||||
|
||||
**Screenshots**
|
||||
If applicable, add screenshots to help explain your problem.
|
||||
|
||||
**Additional context**
|
||||
Add any other context about the problem here.
|
||||
|
||||
---
|
||||
Please upvote :+1: this issue if you are interested in it.
|
23
.github/ISSUE_TEMPLATE/feature_request.md
vendored
Normal file
23
.github/ISSUE_TEMPLATE/feature_request.md
vendored
Normal file
@ -0,0 +1,23 @@
|
||||
---
|
||||
name: Feature request
|
||||
about: Suggest an idea for this project
|
||||
title: ''
|
||||
labels: ["feature", "needs triage"]
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
**Is your feature request related to a problem? Please describe.**
|
||||
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
|
||||
|
||||
**Describe the solution you'd like**
|
||||
A clear and concise description of what you want to happen.
|
||||
|
||||
**Describe alternatives you've considered**
|
||||
A clear and concise description of any alternative solutions or features you've considered.
|
||||
|
||||
**Additional context**
|
||||
Add any other context or screenshots about the feature request here.
|
||||
|
||||
---
|
||||
Please upvote :+1: this issue if you are interested in it.
|
1
.github/funding.yml
vendored
Normal file
1
.github/funding.yml
vendored
Normal file
@ -0,0 +1 @@
|
||||
github: patriksvensson
|
22
.github/pull_request_template.md
vendored
Normal file
22
.github/pull_request_template.md
vendored
Normal file
@ -0,0 +1,22 @@
|
||||
<!--
|
||||
Do NOT open a PR without discussing the changes on an open issue, first.
|
||||
|
||||
Add the issue number here. e.g. #123
|
||||
-->
|
||||
fixes #
|
||||
|
||||
<!-- formalities. These are not optional. -->
|
||||
|
||||
- [ ] I have read the [Contribution Guidelines](https://github.com/spectreconsole/spectre.console/blob/main/CONTRIBUTING.md)
|
||||
- [ ] I have commented on the issue above and discussed the intended changes
|
||||
- [ ] A maintainer has signed off on the changes and the issue was assigned to me
|
||||
- [ ] All newly added code is adequately covered by tests
|
||||
- [ ] All existing tests are still running without errors
|
||||
- [ ] The documentation was modified to reflect the changes _OR_ no documentation changes are required.
|
||||
|
||||
## Changes
|
||||
|
||||
<!-- describe the changes you made. -->
|
||||
|
||||
---
|
||||
Please upvote :+1: this pull request if you are interested in it.
|
20
.github/renovate.json
vendored
Normal file
20
.github/renovate.json
vendored
Normal file
@ -0,0 +1,20 @@
|
||||
{
|
||||
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
|
||||
"extends": [
|
||||
"config:base"
|
||||
],
|
||||
"dependencyDashboard": false,
|
||||
"commitMessagePrefix": "chore:",
|
||||
"labels": ["dependencies"],
|
||||
"npm": {
|
||||
"ignorePaths": [
|
||||
"**/node_modules/**",
|
||||
"**/bower_components/**",
|
||||
"docs/**"
|
||||
]
|
||||
},
|
||||
"ignorePaths": [
|
||||
"resources/scripts/**",
|
||||
"docs/**"
|
||||
]
|
||||
}
|
18
.github/workflows/backlog.yaml
vendored
Normal file
18
.github/workflows/backlog.yaml
vendored
Normal file
@ -0,0 +1,18 @@
|
||||
# yaml-language-server: $schema=https://json.schemastore.org/github-workflow.json
|
||||
name: Add issues/PRs to backlog automatically
|
||||
|
||||
on:
|
||||
issues:
|
||||
types:
|
||||
- opened
|
||||
- transferred
|
||||
|
||||
jobs:
|
||||
add-to-project:
|
||||
name: Add issue to backlog
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/add-to-project@main
|
||||
with:
|
||||
project-url: https://github.com/orgs/spectreconsole/projects/1
|
||||
github-token: ${{ secrets.PROJECT_TOKEN }}
|
46
.github/workflows/ci.yaml
vendored
46
.github/workflows/ci.yaml
vendored
@ -1,44 +1,44 @@
|
||||
name: Continuous Integration
|
||||
# yaml-language-server: $schema=https://json.schemastore.org/github-workflow.json
|
||||
name: Pull Request
|
||||
on: pull_request
|
||||
|
||||
env:
|
||||
# Set the DOTNET_SKIP_FIRST_TIME_EXPERIENCE environment variable to stop wasting time caching packages
|
||||
DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true
|
||||
# Disable sending usage data to Microsoft
|
||||
DOTNET_CLI_TELEMETRY_OPTOUT: true
|
||||
|
||||
jobs:
|
||||
|
||||
###################################################
|
||||
# BUILD
|
||||
###################################################
|
||||
|
||||
build:
|
||||
name: Build
|
||||
if: "!contains(github.event.head_commit.message, 'skip-ci')"
|
||||
strategy:
|
||||
matrix:
|
||||
kind: ['linux', 'windows', 'macOS']
|
||||
include:
|
||||
- kind: linux
|
||||
os: ubuntu-latest
|
||||
- kind: windows
|
||||
os: windows-latest
|
||||
- kind: macOS
|
||||
os: macos-latest
|
||||
runs-on: ${{ matrix.os }}
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v2
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: 'Get Git tags'
|
||||
run: git fetch --tags
|
||||
shell: bash
|
||||
|
||||
- name: Setup dotnet
|
||||
uses: actions/setup-dotnet@v1
|
||||
- name: Setup .NET SDK
|
||||
uses: actions/setup-dotnet@v4
|
||||
with:
|
||||
dotnet-version: 3.1.301
|
||||
dotnet-version: |
|
||||
8.0.x
|
||||
9.0.x
|
||||
|
||||
- name: Build
|
||||
shell: bash
|
||||
run: |
|
||||
dotnet tool restore
|
||||
dotnet cake
|
||||
dotnet cake
|
||||
|
||||
- name: Upload Verify Test Results
|
||||
if: failure()
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: verify-test-results
|
||||
path: |
|
||||
**/*.received.*
|
105
.github/workflows/publish.yaml
vendored
105
.github/workflows/publish.yaml
vendored
@ -1,3 +1,4 @@
|
||||
# yaml-language-server: $schema=https://json.schemastore.org/github-workflow.json
|
||||
name: Publish
|
||||
|
||||
on:
|
||||
@ -8,75 +9,31 @@ on:
|
||||
- main
|
||||
|
||||
env:
|
||||
# Set the DOTNET_SKIP_FIRST_TIME_EXPERIENCE environment variable to stop wasting time caching packages
|
||||
DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true
|
||||
# Disable sending usage data to Microsoft
|
||||
DOTNET_CLI_TELEMETRY_OPTOUT: true
|
||||
|
||||
jobs:
|
||||
|
||||
###################################################
|
||||
# BUILD
|
||||
###################################################
|
||||
|
||||
build:
|
||||
name: Build
|
||||
if: "!contains(github.event.head_commit.message, 'skip-ci')"
|
||||
strategy:
|
||||
matrix:
|
||||
kind: ['linux', 'windows', 'macOS']
|
||||
include:
|
||||
- kind: linux
|
||||
os: ubuntu-latest
|
||||
- kind: windows
|
||||
os: windows-latest
|
||||
- kind: macOS
|
||||
os: macos-latest
|
||||
runs-on: ${{ matrix.os }}
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: 'Get Git tags'
|
||||
run: git fetch --tags
|
||||
shell: bash
|
||||
|
||||
- name: Setup dotnet
|
||||
uses: actions/setup-dotnet@v1
|
||||
with:
|
||||
dotnet-version: 3.1.301
|
||||
|
||||
- name: Build
|
||||
shell: bash
|
||||
run: |
|
||||
dotnet tool restore
|
||||
dotnet cake
|
||||
|
||||
###################################################
|
||||
# PUBLISH
|
||||
###################################################
|
||||
|
||||
publish:
|
||||
name: Publish
|
||||
needs: [build]
|
||||
if: "!contains(github.event.head_commit.message, 'skip-ci')"
|
||||
build:
|
||||
name: Publish NuGet Packages
|
||||
if: "!contains(github.event.head_commit.message, 'skip-ci') || startsWith(github.ref, 'refs/tags/')"
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v2
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: 'Get Git tags'
|
||||
run: git fetch --tags
|
||||
shell: bash
|
||||
|
||||
- name: Setup dotnet
|
||||
uses: actions/setup-dotnet@v1
|
||||
- name: Setup .NET SDK
|
||||
uses: actions/setup-dotnet@v4
|
||||
with:
|
||||
dotnet-version: 3.1.301
|
||||
dotnet-version: |
|
||||
8.0.x
|
||||
9.0.x
|
||||
|
||||
- name: Publish
|
||||
shell: bash
|
||||
@ -84,4 +41,44 @@ jobs:
|
||||
dotnet tool restore
|
||||
dotnet cake --target="publish" \
|
||||
--nuget-key="${{secrets.NUGET_API_KEY}}" \
|
||||
--github-key="${{secrets.GITHUB_TOKEN}}"
|
||||
--github-key="${{secrets.GITHUB_TOKEN}}"
|
||||
|
||||
###################################################
|
||||
# DOCS
|
||||
###################################################
|
||||
|
||||
documentation:
|
||||
name: Publish Documentation
|
||||
needs: [build]
|
||||
runs-on: windows-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Setup .NET SDK
|
||||
uses: actions/setup-dotnet@v4
|
||||
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: '16'
|
||||
|
||||
- name: Cache dependencies
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: ~/.npm
|
||||
key: npm-${{ hashFiles('package-lock.json') }}
|
||||
restore-keys: npm-
|
||||
|
||||
- name: Publish Documentation
|
||||
shell: bash
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
NETLIFY_ACCESS_TOKEN: ${{ secrets.NETLIFY_ACCESS_TOKEN }}
|
||||
NETLIFY_SITE_ID: ${{ secrets.NETLIFY_SITE_ID }}
|
||||
run: |
|
||||
cd docs
|
||||
dotnet tool restore
|
||||
dotnet run --configuration Release -- deploy
|
24
.github/workflows/top-issues-dashboard.yml
vendored
Normal file
24
.github/workflows/top-issues-dashboard.yml
vendored
Normal file
@ -0,0 +1,24 @@
|
||||
name: Top issues action.
|
||||
on:
|
||||
schedule:
|
||||
- cron: '0 0 */1 * *'
|
||||
|
||||
jobs:
|
||||
ShowAndLabelTopIssues:
|
||||
name: Display and label top issues.
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Top Issues action
|
||||
uses: rickstaa/top-issues-action@v1.3.101
|
||||
env:
|
||||
github_token: ${{ secrets.GITHUB_TOKEN }}
|
||||
with:
|
||||
top_list_size: 10
|
||||
label: true
|
||||
dashboard: true
|
||||
dashboard_show_total_reactions: true
|
||||
top_issues: true
|
||||
top_bugs: true
|
||||
top_features: true
|
||||
feature_label: feature
|
||||
top_pull_requests: true
|
7
.gitignore
vendored
7
.gitignore
vendored
@ -5,6 +5,8 @@
|
||||
[Pp]ackages/
|
||||
/.artifacts/
|
||||
/[Tt]ools/
|
||||
.idea
|
||||
.DS_Store
|
||||
|
||||
# Cakeup
|
||||
cakeup-x86_64-latest.exe
|
||||
@ -77,7 +79,6 @@ x64/
|
||||
_ReSharper*
|
||||
|
||||
# NCrunch
|
||||
*.ncrunch*
|
||||
.*crunch*.local.xml
|
||||
_NCrunch_*
|
||||
|
||||
@ -86,3 +87,7 @@ packages
|
||||
|
||||
# Windows
|
||||
Thumbs.db
|
||||
|
||||
*.received.*
|
||||
|
||||
node_modules
|
@ -2,45 +2,131 @@
|
||||
|
||||
## Our Pledge
|
||||
|
||||
In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation.
|
||||
We as members, contributors, and leaders pledge to make participation in our
|
||||
community a harassment-free experience for everyone, regardless of age, body
|
||||
size, visible or invisible disability, ethnicity, sex characteristics, gender
|
||||
identity and expression, level of experience, education, socio-economic status,
|
||||
nationality, personal appearance, race, caste, color, religion, or sexual
|
||||
identity and orientation.
|
||||
|
||||
We pledge to act and interact in ways that contribute to an open, welcoming,
|
||||
diverse, inclusive, and healthy community.
|
||||
|
||||
## Our Standards
|
||||
|
||||
Examples of behavior that contributes to creating a positive environment include:
|
||||
Examples of behavior that contributes to a positive environment for our
|
||||
community include:
|
||||
|
||||
* Using welcoming and inclusive language
|
||||
* Being respectful of differing viewpoints and experiences
|
||||
* Gracefully accepting constructive criticism
|
||||
* Focusing on what is best for the community
|
||||
* Showing empathy towards other community members
|
||||
* Demonstrating empathy and kindness toward other people
|
||||
* Being respectful of differing opinions, viewpoints, and experiences
|
||||
* Giving and gracefully accepting constructive feedback
|
||||
* Accepting responsibility and apologizing to those affected by our mistakes,
|
||||
and learning from the experience
|
||||
* Focusing on what is best not just for us as individuals, but for the overall
|
||||
community
|
||||
|
||||
Examples of unacceptable behavior by participants include:
|
||||
Examples of unacceptable behavior include:
|
||||
|
||||
* The use of sexualized language or imagery and unwelcome sexual attention or advances
|
||||
* Trolling, insulting/derogatory comments, and personal or political attacks
|
||||
* The use of sexualized language or imagery, and sexual attention or advances of
|
||||
any kind
|
||||
* Trolling, insulting or derogatory comments, and personal or political attacks
|
||||
* Public or private harassment
|
||||
* Publishing others' private information, such as a physical or electronic address, without explicit permission
|
||||
* Other conduct which could reasonably be considered inappropriate in a professional setting
|
||||
* Publishing others' private information, such as a physical or email address,
|
||||
without their explicit permission
|
||||
* Other conduct which could reasonably be considered inappropriate in a
|
||||
professional setting
|
||||
|
||||
## Our Responsibilities
|
||||
## Enforcement Responsibilities
|
||||
|
||||
Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior.
|
||||
Community leaders are responsible for clarifying and enforcing our standards of
|
||||
acceptable behavior and will take appropriate and fair corrective action in
|
||||
response to any behavior that they deem inappropriate, threatening, offensive,
|
||||
or harmful.
|
||||
|
||||
Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful.
|
||||
Community leaders have the right and responsibility to remove, edit, or reject
|
||||
comments, commits, code, wiki edits, issues, and other contributions that are
|
||||
not aligned to this Code of Conduct, and will communicate reasons for moderation
|
||||
decisions when appropriate.
|
||||
|
||||
## Scope
|
||||
|
||||
This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers.
|
||||
This Code of Conduct applies within all community spaces, and also applies when
|
||||
an individual is officially representing the community in public spaces.
|
||||
Examples of representing our community include using an official e-mail address,
|
||||
posting via an official social media account, or acting as an appointed
|
||||
representative at an online or offline event.
|
||||
|
||||
## Enforcement
|
||||
|
||||
Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at hello@spectresystems.se. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.
|
||||
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
||||
reported to the community leaders responsible for enforcement at
|
||||
conduct@dotnetfoundation.org.
|
||||
All complaints will be reviewed and investigated promptly and fairly.
|
||||
|
||||
Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership.
|
||||
All community leaders are obligated to respect the privacy and security of the
|
||||
reporter of any incident.
|
||||
|
||||
## Enforcement Guidelines
|
||||
|
||||
Community leaders will follow these Community Impact Guidelines in determining
|
||||
the consequences for any action they deem in violation of this Code of Conduct:
|
||||
|
||||
### 1. Correction
|
||||
|
||||
**Community Impact**: Use of inappropriate language or other behavior deemed
|
||||
unprofessional or unwelcome in the community.
|
||||
|
||||
**Consequence**: A private, written warning from community leaders, providing
|
||||
clarity around the nature of the violation and an explanation of why the
|
||||
behavior was inappropriate. A public apology may be requested.
|
||||
|
||||
### 2. Warning
|
||||
|
||||
**Community Impact**: A violation through a single incident or series of
|
||||
actions.
|
||||
|
||||
**Consequence**: A warning with consequences for continued behavior. No
|
||||
interaction with the people involved, including unsolicited interaction with
|
||||
those enforcing the Code of Conduct, for a specified period of time. This
|
||||
includes avoiding interactions in community spaces as well as external channels
|
||||
like social media. Violating these terms may lead to a temporary or permanent
|
||||
ban.
|
||||
|
||||
### 3. Temporary Ban
|
||||
|
||||
**Community Impact**: A serious violation of community standards, including
|
||||
sustained inappropriate behavior.
|
||||
|
||||
**Consequence**: A temporary ban from any sort of interaction or public
|
||||
communication with the community for a specified period of time. No public or
|
||||
private interaction with the people involved, including unsolicited interaction
|
||||
with those enforcing the Code of Conduct, is allowed during this period.
|
||||
Violating these terms may lead to a permanent ban.
|
||||
|
||||
### 4. Permanent Ban
|
||||
|
||||
**Community Impact**: Demonstrating a pattern of violation of community
|
||||
standards, including sustained inappropriate behavior, harassment of an
|
||||
individual, or aggression toward or disparagement of classes of individuals.
|
||||
|
||||
**Consequence**: A permanent ban from any sort of public interaction within the
|
||||
community.
|
||||
|
||||
## Attribution
|
||||
|
||||
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version]
|
||||
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
|
||||
version 2.1, available at
|
||||
[https://www.contributor-covenant.org/version/2/1/code_of_conduct.html][v2.1].
|
||||
|
||||
[homepage]: http://contributor-covenant.org
|
||||
[version]: http://contributor-covenant.org/version/1/4/
|
||||
Community Impact Guidelines were inspired by
|
||||
[Mozilla's code of conduct enforcement ladder][Mozilla CoC].
|
||||
|
||||
For answers to common questions about this code of conduct, see the FAQ at
|
||||
[https://www.contributor-covenant.org/faq][FAQ]. Translations are available at
|
||||
[https://www.contributor-covenant.org/translations][translations].
|
||||
|
||||
[homepage]: https://www.contributor-covenant.org
|
||||
[v2.1]: https://www.contributor-covenant.org/version/2/1/code_of_conduct.html
|
||||
[Mozilla CoC]: https://github.com/mozilla/diversity
|
||||
[FAQ]: https://www.contributor-covenant.org/faq
|
||||
[translations]: https://www.contributor-covenant.org/translations
|
161
CONTRIBUTING.md
Normal file
161
CONTRIBUTING.md
Normal file
@ -0,0 +1,161 @@
|
||||
# Contribution Guidelines
|
||||
|
||||
* [Prerequisites](#prerequisites)
|
||||
* [Definition of trivial contributions](#definition-of-trivial-contributions)
|
||||
* [Code](#code)
|
||||
* [Code style](#code-style)
|
||||
* [Dependencies](#dependencies)
|
||||
* [Unit tests](#unit-tests)
|
||||
* [Contributing process](#contributing-process)
|
||||
* [Get buyoff or find open community issues or features](#get-buyoff-or-find-open-community-issues-or-features)
|
||||
* [Set up your environment](#Set-up-your-environment)
|
||||
* [Prepare commits](#prepare-commits)
|
||||
* [Submit pull request](#Submit-pull-request)
|
||||
* [Respond to feedback on pull request](#respond-to-feedback-on-pull-request)
|
||||
* [Other general information](#other-general-information)
|
||||
* [Acknowledgement](#acknowledgement)
|
||||
|
||||
## Prerequisites
|
||||
|
||||
By contributing to Spectre.Console, you assert that:
|
||||
|
||||
* The contribution is your own original work.
|
||||
* You have the right to assign the copyright for the work (it is not owned by your employer, or
|
||||
you have been given copyright assignment in writing).
|
||||
* You [license](https://github.com/spectreconsole/spectre.console/blob/main/LICENSE) the contribution under the terms applied to the rest of the Spectre.Console project.
|
||||
* You agree to follow the [code of conduct](https://github.com/spectreconsole/spectre.console/blob/main/CODE_OF_CONDUCT.md).
|
||||
|
||||
## Definition of trivial contributions
|
||||
It's hard to define what is a trivial contribution. Sometimes even a 1 character change can be considered significant.
|
||||
Unfortunately because it can be subjective, the decision on what is trivial comes from the maintainers of the project
|
||||
and not from folks contributing to the project.
|
||||
|
||||
What is generally considered trivial:
|
||||
|
||||
* Fixing a typo.
|
||||
* Documentation changes.
|
||||
|
||||
## Code
|
||||
### Code style
|
||||
|
||||
Normal .NET coding guidelines apply.
|
||||
See the [Framework Design Guidelines](https://learn.microsoft.com/en-us/dotnet/standard/design-guidelines/) for more information.
|
||||
|
||||
### Dependencies
|
||||
|
||||
The assembly `Spectre.Console` should have no dependencies except the .NET BCL library.
|
||||
|
||||
### Unit tests
|
||||
|
||||
Make sure to run all unit tests before creating a pull request.
|
||||
Any new code should also have reasonable unit test coverage.
|
||||
|
||||
## Contributing process
|
||||
### Get buyoff or find open community issues or features
|
||||
|
||||
* Through GitHub, or through the [GitHub discussions](https://github.com/spectreconsole/spectre.console/discussions) (preferred),
|
||||
you talk about a feature you would like to see (or a bug), and why it should be in Spectre.Console.
|
||||
* If approved through the GitHub discussions, ensure an accompanying GitHub issue is created with
|
||||
information and a link back to the discussion.
|
||||
* Once you get a nod from someone in the Spectre.Console Team, you can start on the feature.
|
||||
* Alternatively, if a feature is on the issues list with the
|
||||
[good first issue](https://github.com/spectreconsole/spectre.console/labels/good%20first%20issue) label,
|
||||
it is open for a community member (contributor) to patch. You should comment that you are signing up for it on
|
||||
the issue so someone else doesn't also sign up for the work.
|
||||
|
||||
### Set up your environment
|
||||
|
||||
* You create, or update, a fork of `spectreconsole/spectre.console` under your GitHub account.
|
||||
* From there you create a branch named specific to the feature.
|
||||
* In the branch you do work specific to the feature.
|
||||
* Please also observe the following:
|
||||
* No reformatting
|
||||
* No changing files that are not specific to the feature.
|
||||
* More covered below in the **Prepare commits** section.
|
||||
* Test your changes and please help us out by updating and implementing some automated tests.
|
||||
It is recommended that all contributors spend some time looking over the tests in the source code.
|
||||
You can't go wrong emulating one of the existing tests and then changing it specific to the behavior you are testing.
|
||||
* Please do not update your branch from the main branch unless we ask you to. See the responding to feedback section below.
|
||||
|
||||
### Prepare commits
|
||||
This section serves to help you understand what makes a good commit.
|
||||
|
||||
A commit should observe the following:
|
||||
|
||||
* A commit is a small logical unit that represents a change.
|
||||
* Should include new or changed tests relevant to the changes you are making.
|
||||
* No unnecessary whitespace. Check for whitespace with `git diff --check` and `git diff --cached --check` before commit.
|
||||
* You can stage parts of a file for commit.
|
||||
|
||||
### Submit pull request
|
||||
Prerequisites:
|
||||
|
||||
* You are making commits in a feature branch.
|
||||
* All code should compile without errors or warnings.
|
||||
* All tests should be passing.
|
||||
|
||||
Submitting PR:
|
||||
|
||||
* Once you feel it is ready, submit the pull request to the `spectreconsole/spectre.console` repository against the `main` branch
|
||||
unless specifically requested to submit it against another branch.
|
||||
* In the case of a larger change that is going to require more discussion,
|
||||
please submit a PR sooner. Waiting until you are ready may mean more changes than you are
|
||||
interested in if the changes are taking things in a direction the maintainers do not want to go.
|
||||
* In the pull request, outline what you did and point to specific conversations (as in URLs)
|
||||
and issues that you are resolving. This is a tremendous help for us in evaluation and acceptance.
|
||||
* Once the pull request is in, please do not delete the branch or close the pull request
|
||||
(unless something is wrong with it).
|
||||
* One of the Spectre.Console team members, or one of the maintainers, will evaluate it within a
|
||||
reasonable time period (which is to say usually within 1-3 weeks). Some things get evaluated
|
||||
faster or fast tracked. We are human and we have active lives outside of open source so don't
|
||||
fret if you haven't seen any activity on your pull request within a month or two.
|
||||
We don't have a Service Level Agreement (SLA) for pull requests.
|
||||
Just know that we will evaluate your pull request.
|
||||
|
||||
### Respond to feedback on pull request
|
||||
|
||||
We may have feedback for you to fix or change some things. We generally like to see that pushed against
|
||||
the same topic branch (it will automatically update the Pull Request). You can also fix/squash/rebase
|
||||
commits and push the same topic branch with `--force` (it's generally acceptable to do this on topic
|
||||
branches not in the main repository, it is generally unacceptable and should be avoided at all costs
|
||||
against the main repository).
|
||||
|
||||
If we have comments or questions when we do evaluate it and receive no response, it will probably
|
||||
lessen the chance of getting accepted. Eventually, this means it will be closed if it is not accepted.
|
||||
Please know this doesn't mean we don't value your contribution, just that things go stale. If in the
|
||||
future you want to pick it back up, feel free to address our concerns/questions/feedback and reopen
|
||||
the issue/open a new PR (referencing old one).
|
||||
|
||||
Sometimes we may need you to rebase your commit against the latest code before we can review it further.
|
||||
If this happens, you can do the following:
|
||||
|
||||
* `git fetch upstream` (upstream remote would be `spectreconsole/spectre.console`)
|
||||
* `git checkout main`
|
||||
* `git rebase upstream/main`
|
||||
* `git checkout your-branch`
|
||||
* `git rebase main`
|
||||
* Fix any merge conflicts
|
||||
* `git push origin your-branch` (origin would be your GitHub repo or `your-github-username/spectre.console` in this case).
|
||||
You may need to `git push origin your-branch --force` to get the commits pushed.
|
||||
This is generally acceptable with topic branches not in the mainstream repository.
|
||||
|
||||
The only reasons a pull request should be closed and resubmitted are as follows:
|
||||
|
||||
* When the pull request is targeting the wrong branch (this doesn't happen as often).
|
||||
* When there are updates made to the original by someone other than the original contributor.
|
||||
Then the old branch is closed with a note on the newer branch this supersedes #github_number.
|
||||
|
||||
## Other general information
|
||||
If you reformat code or hit core functionality without an approval from a person on the Spectre.Console Team,
|
||||
it's likely that no matter how awesome it looks afterwards, it will probably not get accepted.
|
||||
Reformatting code makes it harder for us to evaluate exactly what was changed.
|
||||
|
||||
If you do these things, it will be make evaluation and acceptance easy.
|
||||
Now if you stray outside of the guidelines we have above, it doesn't mean we are going to ignore
|
||||
your pull request. It will just make things harder for us.
|
||||
Harder for us roughly translates to a longer SLA for your pull request.
|
||||
|
||||
## Acknowledgement
|
||||
|
||||
This contribution guide was taken from the [Chocolatey project](https://chocolatey.org/)
|
||||
with permission and was edited to follow Spectre.Console's conventions and processes.
|
@ -1,6 +1,6 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2020 Spectre Systems AB
|
||||
Copyright (c) 2020 Patrik Svensson, Phil Scott, Nils Andresen
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
|
6
NuGet.Config
Normal file
6
NuGet.Config
Normal file
@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<configuration>
|
||||
<packageSources>
|
||||
<add key="nuget.org" value="https://api.nuget.org/v3/index.json" protocolVersion="3" />
|
||||
</packageSources>
|
||||
</configuration>
|
60
README.fa.md
Normal file
60
README.fa.md
Normal file
@ -0,0 +1,60 @@
|
||||
# `Spectre.Console`
|
||||
|
||||
_[](https://www.nuget.org/packages/spectre.console)_
|
||||
|
||||
<div dir="rtl">
|
||||
|
||||
یک کتابخانه .NET. که ایجاد Console Applicationهای زیبا و cross platform را آسانتر میکند.
|
||||
از کتابخانه عالی [Rich](https://github.com/willmcgugan/rich) برای پایتون، بسیار الهام گرفته شده است.
|
||||
|
||||
## فهرست
|
||||
|
||||
1. [امکانات](#features)
|
||||
2. [نصب](#installing)
|
||||
3. [مستندات](#documentation)
|
||||
4. [مثالها](#examples)
|
||||
5. [مجوز](#license)
|
||||
|
||||
<h2 id="features">امکانات</h2>
|
||||
|
||||
* با در نظر گرفتن تست واحد نوشته شده است.
|
||||
* جداول، چارچوبها، پنلها و یک زبان نشانه گذاری که از [rich](https://github.com/willmcgugan/rich) الهام گرفته شده است را پشتیبانی میکند.
|
||||
* از رایج ترین پارامترهای SRG در هنگام فرم دهی متن مانند پررنگ، کم نور، اریب، زیرخط، خط زدن و چشمک زدن پشتیبانی میکند.
|
||||
* پشتیبانی از رنگهای 28/8/4/3-بیت در ترمینال.
|
||||
این کتابخانه توانایی ترمینال فعلی را تشخیص داده و در صورت لزوم رنگها را کاهش میدهد.
|
||||
|
||||
|
||||

|
||||
|
||||
<h2 id="installing">نصب</h2>
|
||||
|
||||
سریع ترین راه برای شروع `Spectre.Console` نصب از طریق NuGet Package میباشد.
|
||||
|
||||
<pre dir="ltr">
|
||||
dotnet add package Spectre.Console
|
||||
</pre>
|
||||
|
||||
<h2 id="documentation">مستندات</h2>
|
||||
|
||||
مستندات `Spectre.Console` را در اینجا میتوایند پیدا کنید:
|
||||
|
||||
<div dir="ltr">
|
||||
https://spectreconsole.net/
|
||||
</div>
|
||||
|
||||
<h2 id="examples">مثالها</h2>
|
||||
|
||||
To see `Spectre.Console` in action, please see the
|
||||
[examples repository](https://github.com/spectreconsole/examples).
|
||||
|
||||
<h2 id="license">مجوز</h2>
|
||||
|
||||
<div dir="ltr">
|
||||
Copyright © Patrik Svensson, Phil Scott, Nils Andresen, Cédric Luthi, Frank Ray
|
||||
</div>
|
||||
|
||||
همانطور که Spectre.Console تحت مجوز MIT ارائه شده است؛ برای کسب اطلاعات بیشتر به مجوز مراجعه کنید.
|
||||
|
||||
* برای SixLabors.ImageSharp، مشاهده کنید: https://github.com/SixLabors/ImageSharp/blob/master/LICENSE
|
||||
|
||||
</div>
|
414
README.jp.md
Normal file
414
README.jp.md
Normal file
@ -0,0 +1,414 @@
|
||||
# `Spectre.Console`
|
||||
|
||||
_[](https://www.nuget.org/packages/spectre.console)_
|
||||
|
||||
綺麗なコンソールアプリケーションを簡単に作成するための.NETライブラリです。
|
||||
Python用の素晴らしい[Rich ライブラリ](https://github.com/willmcgugan/rich)に強く影響を受けています。
|
||||
|
||||
## 目次
|
||||
|
||||
1. [特徴](#特徴)
|
||||
2. [例](#例)
|
||||
3. [使用方法](#使用方法)
|
||||
3.1. [Static APIの利用](#static-apiの利用)
|
||||
3.2. [コンソールの作成](#コンソールの作成)
|
||||
4. [例の実行](#例の実行)
|
||||
5. [クイックスタート](#クイックスタート)
|
||||
6. [マークアップ](#マークアップ)
|
||||
7. [絵文字](#絵文字)
|
||||
8. [テーブル](#テーブル)
|
||||
9. [例外](#例外)
|
||||
|
||||
## 特徴
|
||||
|
||||
* ユニットテストを意識して書いています。
|
||||
* table、grid、panel、マークアップ言語に影響を受けた [rich](https://github.com/willmcgugan/rich) に対応しています。
|
||||
* 太字、薄字、斜字、下線、斜線、点滅などの一般的なSGR parameters に対応しています。
|
||||
* ターミナルで 3/4/8/24ビットカラーに対応しています。
|
||||
ライブラリは現在のターミナルの性能を検知し、必要なカラーにダウングレードします
|
||||
|
||||
## 例
|
||||
|
||||

|
||||
|
||||
## 使用方法
|
||||
|
||||
`Spectre.Console` APIはステートフルで、スレッドセーフではありません。
|
||||
異なるスレッドからコンソールに書く必要がある場合、通常の`System.Console` APIを使用するときと同様、適切な注意を払ってください。
|
||||
|
||||
現在の端末がANSIエスケープシーケンスに対応していない場合、
|
||||
`Spectre.Console`は、`System.Console` APIの利用に切り替わります。
|
||||
|
||||
_メモ: このライブラリは現在開発中で、APIは1.0のリリースまでの間に変更されたり、
|
||||
削除されたりする可能性があります。_
|
||||
|
||||
### Static APIの利用
|
||||
|
||||
|
||||
`System.Console` APIでするように、テキストを出力したいだけの時にはstatic APIが最適ですが、綺麗です。
|
||||
|
||||
```csharp
|
||||
AnsiConsole.Foreground = Color.CornflowerBlue;
|
||||
AnsiConsole.Decoration = Decoration.Underline | Decoration.Bold;
|
||||
AnsiConsole.WriteLine("Hello World!");
|
||||
|
||||
AnsiConsole.Reset();
|
||||
AnsiConsole.MarkupLine("[bold yellow on red]{0}[/] [underline]world[/]!", "Goodbye");
|
||||
```
|
||||
|
||||
もし、デフォルトの`IAnsiConsole`への参照を取得したい場合、
|
||||
`AnsiConsole.Console`経由でアクセスできます。
|
||||
|
||||
### コンソールの作成
|
||||
|
||||
単体テスト中にコードの実行環境を制御したい場合など、
|
||||
特定の機能をもつコンソールを明示的に作成すると便利なことがあります。
|
||||
|
||||
単体テストの一部としてコードで `AnsiConsole`を使わないことを推奨します。
|
||||
|
||||
```csharp
|
||||
IAnsiConsole console = AnsiConsole.Create(
|
||||
new AnsiConsoleSettings()
|
||||
{
|
||||
Ansi = AnsiSupport.Yes,
|
||||
ColorSystem = ColorSystemSupport.TrueColor,
|
||||
Out = new StringWriter(),
|
||||
});
|
||||
```
|
||||
|
||||
_メモ: 主導でコンソールを作成しているときに特定のカラーシステムを指定できたとしても、
|
||||
ユーザーのターミナルでは使えないかもしれないことを覚えておいてください。
|
||||
テスト用にIAnsiConsoleを作成していない限り、
|
||||
常に`ColorSystemSupport.Detect` と `AnsiSupport.Detect`を使用してください。_
|
||||
|
||||
## 例の実行
|
||||
|
||||
Spectre.Consoleでできることを見るために、
|
||||
[dotnet-example](https://github.com/patriksvensson/dotnet-example)グローバルツールをインストールします。
|
||||
|
||||
|
||||
```
|
||||
> dotnet tool restore
|
||||
```
|
||||
|
||||
このリポジトリで提供している例が一覧表示されます
|
||||
|
||||
```
|
||||
> dotnet example
|
||||
|
||||
╭────────────┬───────────────────────────────────────┬──────────────────────────────────────────────────────╮
|
||||
│ Name │ Path │ Description │
|
||||
├────────────┼───────────────────────────────────────┼──────────────────────────────────────────────────────┤
|
||||
│ Borders │ examples/Borders/Borders.csproj │ Demonstrates the different kind of borders. │
|
||||
│ Calendars │ examples/Calendars/Calendars.csproj │ Demonstrates how to render calendars. │
|
||||
│ Colors │ examples/Colors/Colors.csproj │ Demonstrates how to use colors in the console. │
|
||||
│ Columns │ examples/Columns/Columns.csproj │ Demonstrates how to render data into columns. │
|
||||
│ Emojis │ examples/Emojis/Emojis.csproj │ Demonstrates how to render emojis. │
|
||||
│ Exceptions │ examples/Exceptions/Exceptions.csproj │ Demonstrates how to render formatted exceptions. │
|
||||
│ Grids │ examples/Grids/Grids.csproj │ Demonstrates how to render grids in a console. │
|
||||
│ Info │ examples/Info/Info.csproj │ Displays the capabilities of the current console. │
|
||||
│ Links │ examples/Links/Links.csproj │ Demonstrates how to render links in a console. │
|
||||
│ Panels │ examples/Panels/Panels.csproj │ Demonstrates how to render items in panels. │
|
||||
│ Rules │ examples/Rules/Rules.csproj │ Demonstrates how to render horizontal rules (lines). │
|
||||
│ Tables │ examples/Tables/Tables.csproj │ Demonstrates how to render tables in a console. │
|
||||
│ Trees │ examples/Trees/Trees.csproj │ Demonstrates how to render trees in a console. │
|
||||
╰────────────┴───────────────────────────────────────┴──────────────────────────────────────────────────────╯
|
||||
```
|
||||
|
||||
そして、例を実行します
|
||||
|
||||
```
|
||||
> dotnet example tables
|
||||
┌──────────┬──────────┬────────┐
|
||||
│ Foo │ Bar │ Baz │
|
||||
├──────────┼──────────┼────────┤
|
||||
│ Hello │ World! │ │
|
||||
│ Bonjour │ le │ monde! │
|
||||
│ Hej │ Världen! │ │
|
||||
└──────────┴──────────┴────────┘
|
||||
```
|
||||
|
||||
## クイックスタート
|
||||
pectre.Consoleの利用を開始する最初の方法は、Nugetパッケージをインストールすることです。
|
||||
|
||||
```shell
|
||||
> dotnet add package Spectre.Console
|
||||
```
|
||||
|
||||
その後、`Spectre.Console`名前空間を参照する必要があります。一度参照したら、提供されている全ての機能を使用できます。
|
||||
|
||||
```csharp
|
||||
using Spectre.Console
|
||||
|
||||
public static class Program
|
||||
{
|
||||
public static void Main(string[] args)
|
||||
{
|
||||
AnsiConsole.Markup("[underline red]Hello[/] World!");
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## マークアップ
|
||||
`Markup`クラスは、コンソールにリッチなテキストを出力することができます。
|
||||
|
||||
### 文法
|
||||
|
||||
コンソールマークアップはbbcodeに影響を受けた文法を利用します。角括弧でスタイルを書いたら(スタイルを参照)、例えば、`[bold red]`
|
||||
は、`[/]`で閉じるまでスタイルが適用されます。
|
||||
|
||||
```csharp
|
||||
AnsiConsole.Render(new Markup("[bold yellow]Hello[/] [red]World![/]"));
|
||||
```
|
||||
|
||||
`Markup` クラスは`IRenderable`を実装しており、table、grid、Panelを使用できることを意味します。
|
||||
`IRenderable`のレンダリングに対応している多くのクラスは、リッチテキストの描画を上書きます。
|
||||
|
||||
```csharp
|
||||
var table = new Table();
|
||||
table.AddColumn(new TableColumn(new Markup("[yellow]Foo[/]")));
|
||||
table.AddColumn(new TableColumn("[blue]Bar[/]"));
|
||||
```
|
||||
|
||||
### 便利なメソッド
|
||||
|
||||
`AnsiConsole`には、新しい`Markup`インスタンスをインスタンス化することなく、コンソールにマークアップテキストを書き込める便利なメソッドがあります。
|
||||
|
||||
```csharp
|
||||
AnsiConsole.Markup("[underline green]Hello[/] ");
|
||||
AnsiConsole.MarkupLine("[bold]World[/]");
|
||||
```
|
||||
|
||||
### エスケープ文字列
|
||||
|
||||
`[`を出力するために、 `[[`を利用し、`]`を出力するために`]]`を利用します。
|
||||
|
||||
```csharp
|
||||
AnsiConsole.Markup("[[Hello]] "); // [Hello]
|
||||
AnsiConsole.Markup("[red][[World]][/]"); // [World]
|
||||
```
|
||||
|
||||
`SafeMarkup`拡張メソッドを使用することもできます。
|
||||
|
||||
```csharp
|
||||
AnsiConsole.Markup("[red]{0}[/]", "Hello [World]".SafeMarkup());
|
||||
```
|
||||
|
||||
### カラー
|
||||
|
||||
`new Style(foreground: Color.Maroon)`のようなコード、または、`AnsiConsole.Markup("[maroon on blue]Hello[/]")`のようなマークアップテキストで色を使用できます。
|
||||
|
||||
### 背景色の設定
|
||||
|
||||
カラー指定の際に、`on`を付けることで、マークアップで背景色を設定できます。
|
||||
|
||||
```
|
||||
[bold yellow on blue]Hello[/]
|
||||
[default on blue]World[/]
|
||||
```
|
||||
|
||||
### 絵文字の描画
|
||||
|
||||
マークアップの一部として絵文字を出力するために、emojiショートコードが使用できます。
|
||||
|
||||
```csharp
|
||||
AnsiConsole.MarkupLine("Hello :globe_showing_europe_africa:!");
|
||||
```
|
||||
|
||||
emojiのスタイルについては、付録の[Emoji](./appendix/emojis) を参照してください。
|
||||
|
||||
### カラー
|
||||
|
||||
上の例では、全ての色は名前で参照されています。
|
||||
しかし、16進数やRGB表現をマークダウンで色指定に使用できます。
|
||||
|
||||
```csharp
|
||||
AnsiConsole.Markup("[red]Foo[/] ");
|
||||
AnsiConsole.Markup("[#ff0000]Bar[/] ");
|
||||
AnsiConsole.Markup("[rgb(255,0,0)]Baz[/] ");
|
||||
```
|
||||
|
||||
## 絵文字
|
||||
|
||||
どのような絵文字が使用できるかは、使用しているOSやターミナルに依存し、どのように表示されるかは保証されません。絵文字の幅計算は正確ではないため、表、パネル、グリッドで使用する場合は表示がずれるかもしれません。
|
||||
|
||||
完全な互換性を確保するために、Unicode 13.0 より以前の`Emoji_Presentation`カテゴリにあるものだけを使用することを検討してください。
|
||||
公式の絵文字一覧
|
||||
https://www.unicode.org/Public/UCD/latest/ucd/emoji/emoji-data.txt
|
||||
|
||||
|
||||
```csharp
|
||||
// Markup
|
||||
AnsiConsole.MarkupLine("Hello :globe_showing_europe_africa:!");
|
||||
|
||||
// Constant
|
||||
var hello = "Hello " + Emoji.Known.GlobeShowingEuropeAfrica;
|
||||
```
|
||||
|
||||
テキスト内の絵文字を置き換えることができます。
|
||||
|
||||
```csharp
|
||||
var phrase = "Mmmm :birthday_cake:";
|
||||
var rendered
|
||||
```
|
||||
|
||||
既存の絵文字を別のものにしたり、完全に新しい物を追加したいことがあります。このために、`Emoji.Remap`メソッドを使用できます。
|
||||
この方法は、マークアップ文字と`Emoji.Replace`の両方で動作します。
|
||||
|
||||
```csharp
|
||||
// Remap the emoji
|
||||
Emoji.Remap("globe_showing_europe_africa", "😄");
|
||||
|
||||
// Render markup
|
||||
AnsiConsole.MarkupLine("Hello :globe_showing_europe_africa:!");
|
||||
|
||||
// Replace emojis in string
|
||||
var phrase = "Hello :globe_showing_europe_africa:!";
|
||||
var rendered = Emoji.Replace(phrase);
|
||||
```
|
||||
|
||||
## テーブル
|
||||
|
||||
テーブルはターミナルで表データを表示するのに完璧な方法です。
|
||||
`Spectre.Console` は、テーブルの描画にとても優れていて、全てのカラムは中に合わせて調整してくれます。
|
||||
`IRenderable`を実装しているものは、列ヘッダやセル、別のテーブルとして使用できます。
|
||||
|
||||
### 使い方
|
||||
|
||||
テーブルを描画するために、`Table`インスタンスを作成し、必要な数の列を追加し、行を追加します。
|
||||
テーブルをコンソールの`Render`メソッドに渡して終わりです。
|
||||
|
||||
```csharp
|
||||
// テーブルの作成
|
||||
var table = new Table();
|
||||
|
||||
// 列の追加
|
||||
table.AddColumn("Foo");
|
||||
table.AddColumn(new TableColumn("Bar").Centered());
|
||||
|
||||
// 行の追加
|
||||
table.AddRow("Baz", "[green]Qux[/]");
|
||||
table.AddRow(new Markup("[blue]Corgi[/]"), new Panel("Waldo"));
|
||||
|
||||
// コンソールにテーブルの描画
|
||||
AnsiConsole.Render(table);
|
||||
```
|
||||
|
||||
これは次のように出力を描画します。
|
||||
|
||||

|
||||
|
||||
### 罫線
|
||||
|
||||
|
||||
```csharp
|
||||
// 罫線を設定します
|
||||
table.SetBorder(Border.None);
|
||||
table.SetBorder(Border.Ascii);
|
||||
table.SetBorder(Border.Square);
|
||||
table.SetBorder(Border.Rounded);
|
||||
```
|
||||
|
||||
### 拡大 / 縮小
|
||||
|
||||
```csharp
|
||||
// テーブル幅を最大に設定します
|
||||
table.Expand();
|
||||
|
||||
// テーブル幅を最小に設定します
|
||||
table.Collapse();
|
||||
```
|
||||
|
||||
### ヘッダーを隠す
|
||||
|
||||
```csharp
|
||||
// 全ての列のヘッダーを隠します
|
||||
table.HideHeaders();
|
||||
```
|
||||
|
||||
### テーブル幅の設定
|
||||
|
||||
```csharp
|
||||
// テーブル幅50セルに設定します
|
||||
table.SetWidth(50);
|
||||
```
|
||||
|
||||
### 整列(アライメント)
|
||||
|
||||
```csharp
|
||||
// 整列を明示的に設定する
|
||||
column.SetAlignment(Justify.Right);
|
||||
```
|
||||
|
||||
### パディング
|
||||
|
||||
```csharp
|
||||
// 左と右のパディングを設定する
|
||||
column.SetPadding(left: 3, right: 5);
|
||||
|
||||
// 個別にパディングを設定する
|
||||
column.PadLeft(3);
|
||||
column.PadRight(5);
|
||||
```
|
||||
|
||||
### 列改行の無効化
|
||||
|
||||
```csharp
|
||||
// 列改行の無効化
|
||||
column.NoWrap();
|
||||
```
|
||||
|
||||
### 列幅の設定
|
||||
|
||||
```csharp
|
||||
// 列幅の設定(これはまだ柔軟な拡張メソッドがありません)
|
||||
column.Width = 15;
|
||||
```
|
||||
|
||||
## 例外
|
||||
例外はターミナルで見たときに読みやすいとは限りません。
|
||||
`WriteException`メソッドを使用することで、例外をもう少し読みやすくすることができます。
|
||||
|
||||
```csharp
|
||||
AnsiConsole.WriteException(ex);
|
||||
```
|
||||
|
||||

|
||||
### 例外の省略表示
|
||||
|
||||
例外の特定部分を短くして、さらに読みやすくしたり、パスをクリック可能なハイパーリンクにすることもできます。
|
||||
ハイパーリンクがクリックできるかはターミナル次第です。
|
||||
|
||||
|
||||
```csharp
|
||||
AnsiConsole.WriteException(ex,
|
||||
ExceptionFormats.ShortenPaths | ExceptionFormats.ShortenTypes |
|
||||
ExceptionFormats.ShortenMethods | ExceptionFormats.ShowLinks);
|
||||
```
|
||||
|
||||

|
||||
|
||||
### 例外出力のカスタマイズ
|
||||
|
||||
例外の特定部分を短縮するだけでなく、デフォルトのスタイルを上書きすることもできます。
|
||||
|
||||
```csharp
|
||||
AnsiConsole.WriteException(ex, new ExceptionSettings
|
||||
{
|
||||
Format = ExceptionFormats.ShortenEverything | ExceptionFormats.ShowLinks,
|
||||
Style = new ExceptionStyle
|
||||
{
|
||||
Exception = Style.WithForeground(Color.Grey),
|
||||
Message = Style.WithForeground(Color.White),
|
||||
NonEmphasized = Style.WithForeground(Color.Cornsilk1),
|
||||
Parenthesis = Style.WithForeground(Color.Cornsilk1),
|
||||
Method = Style.WithForeground(Color.Red),
|
||||
ParameterName = Style.WithForeground(Color.Cornsilk1),
|
||||
ParameterType = Style.WithForeground(Color.Red),
|
||||
Path = Style.WithForeground(Color.Red),
|
||||
LineNumber = Style.WithForeground(Color.Cornsilk1),
|
||||
}
|
||||
});
|
||||
```
|
||||
|
||||

|
382
README.md
382
README.md
@ -1,362 +1,90 @@
|
||||
# `Spectre.Console`
|
||||
|
||||
_[](https://www.nuget.org/packages/spectre.console)_
|
||||
_[](https://www.nuget.org/packages/spectre.console)_ _[](https://www.nuget.org/packages/spectre.console.cli)_ [](https://app.netlify.com/sites/spectreconsole/deploys)
|
||||
|
||||
A .NET Standard 2.0 library that makes it easier to create beautiful console applications.
|
||||
It is heavily inspired by the excellent [Rich library](https://github.com/willmcgugan/rich)
|
||||
for Python.
|
||||
A .NET library that makes it easier to create beautiful, cross platform, console applications.
|
||||
It is heavily inspired by the excellent Python library, [Rich](https://github.com/willmcgugan/rich). Detailed instructions for using `Spectre.Console` are located on the project website, https://spectreconsole.net
|
||||
|
||||
## Table of Contents
|
||||
|
||||
1. [Features](#features)
|
||||
2. [Example](#example)
|
||||
3. [Usage](#usage)
|
||||
3.1. [Using the static API](#using-the-static-api)
|
||||
3.2. [Creating a console](#creating-a-console)
|
||||
4. [Available styles](#available-styles)
|
||||
5. [Predefined colors](#predefined-colors)
|
||||
1. [Installing](#installing)
|
||||
1. [Documentation](#documentation)
|
||||
1. [Examples](#examples)
|
||||
1. [Sponsors](#sponsors)
|
||||
1. [Code of Conduct](#code-of-conduct)
|
||||
1. [.NET Foundation](#net-foundation)
|
||||
1. [License](#license)
|
||||
|
||||
## Features
|
||||
|
||||
* Written with unit testing in mind.
|
||||
* Supports tables, grids, panels, and a [Rich](https://github.com/willmcgugan/rich) inspired markup language.
|
||||
* Supports the most common SRG parameters when it comes to text
|
||||
styling such as bold, dim, italic, underline, strikethrough,
|
||||
and blinking text.
|
||||
* Supports 3/4/8/24-bit colors in the terminal.
|
||||
The library will detect the capabilities of the current terminal
|
||||
and downgrade colors as needed.
|
||||
* Written with unit testing in mind.
|
||||
|
||||
## Example
|
||||

|
||||
|
||||

|
||||
## Important Notices
|
||||
|
||||
## Usage
|
||||
> [!IMPORTANT]\
|
||||
> We use the [Top Issues Dashboard](https://github.com/spectreconsole/spectre.console/issues/1517) for tracking community demand. Please upvote :+1: the issues and pull requests you are interested in.
|
||||
|
||||
The `Spectre.Console` API is stateful and is not thread-safe.
|
||||
If you need to write to the console from different threads, make sure that
|
||||
you take appropriate precautions, just like when you use the
|
||||
regular `System.Console` API.
|
||||
## Installing
|
||||
|
||||
If the current terminal does not support ANSI escape sequences,
|
||||
`Spectre.Console` will fallback to using the `System.Console` API.
|
||||
|
||||
_NOTE: This library is currently under development and API's
|
||||
might change or get removed at any point up until a 1.0 release._
|
||||
|
||||
### Using the static API
|
||||
|
||||
The static API is perfect when you just want to output text
|
||||
like you usually do with the `System.Console` API, but prettier.
|
||||
The fastest way of getting started using `Spectre.Console` is to install the NuGet package.
|
||||
|
||||
```csharp
|
||||
AnsiConsole.Foreground = Color.CornflowerBlue;
|
||||
AnsiConsole.Decoration = Decoration.Underline | Decoration.Bold;
|
||||
AnsiConsole.WriteLine("Hello World!");
|
||||
|
||||
AnsiConsole.Reset();
|
||||
AnsiConsole.MarkupLine("[bold yellow on red]{0}[/] [underline]world[/]!", "Goodbye");
|
||||
dotnet add package Spectre.Console
|
||||
```
|
||||
|
||||
If you want to get a reference to the default `IAnsiConsole`,
|
||||
you can access it via `AnsiConsole.Console`.
|
||||
## Documentation
|
||||
|
||||
### Creating a console
|
||||
The documentation for `Spectre.Console` can be found at
|
||||
https://spectreconsole.net
|
||||
|
||||
Sometimes it's useful to explicitly create a console with specific
|
||||
capabilities, such as during unit testing when you want control
|
||||
over the environment your code runs in.
|
||||
## Examples
|
||||
|
||||
It's recommended to not use `AnsiConsole` in code that run as
|
||||
part of a unit test.
|
||||
To see `Spectre.Console` in action, please see the
|
||||
[examples repository](https://github.com/spectreconsole/examples).
|
||||
|
||||
```csharp
|
||||
IAnsiConsole console = AnsiConsole.Create(
|
||||
new AnsiConsoleSettings()
|
||||
{
|
||||
Ansi = AnsiSupport.Yes,
|
||||
ColorSystem = ColorSystemSupport.TrueColor,
|
||||
Out = new StringWriter(),
|
||||
});
|
||||
```
|
||||
## Sponsors
|
||||
|
||||
_NOTE: Even if you can specify a specific color system to use
|
||||
when manually creating a console, remember that the user's terminal
|
||||
might not be able to use it, so unless you're creating an IAnsiConsole
|
||||
for testing, always use `ColorSystemSupport.Detect` and `AnsiSupport.Detect`._
|
||||
The following people are [sponsoring](https://github.com/sponsors/patriksvensson)
|
||||
`Spectre.Console` to show their support and to ensure the longevity of the project.
|
||||
|
||||
## Available styles
|
||||
* [Rodney Littles II](https://github.com/RLittlesII)
|
||||
* [Martin Björkström](https://github.com/bjorkstromm)
|
||||
* [Dave Glick](https://github.com/daveaglick)
|
||||
* [Kim Gunnarsson](https://github.com/kimgunnarsson)
|
||||
* [Andrew McClenaghan](https://github.com/andymac4182)
|
||||
* [C. Augusto Proiete](https://github.com/augustoproiete)
|
||||
* [Viktor Elofsson](https://github.com/vktr)
|
||||
* [Steven Knox](https://github.com/stevenknox)
|
||||
* [David Pendray](https://github.com/dpen2000)
|
||||
* [Elmah.io](https://github.com/elmahio)
|
||||
* [Tom Kerkhove](https://github.com/tomkerkhove)
|
||||
|
||||
_NOTE: Not all styles are supported in every terminal._
|
||||
We really appreciate it.
|
||||
**Thank you very much!**
|
||||
|
||||
Name | Description
|
||||
--- | ---
|
||||
`bold` | Bold text
|
||||
`dim` | Dim or faint text
|
||||
`italic` | Italic text
|
||||
`underline` | Underlined text
|
||||
`invert` | Swaps the foreground and background colors
|
||||
`conceal` | Hides the text
|
||||
`slowblink` | Makes text blink slowly
|
||||
`rapidblink` | Makes text blink
|
||||
`strikethrough` | Shows text with a horizontal line through the center
|
||||
## Code of Conduct
|
||||
|
||||
## Predefined colors
|
||||
This project has adopted the code of conduct defined by the Contributor Covenant to clarify expected behavior in our community.
|
||||
For more information see the [.NET Foundation Code of Conduct](https://dotnetfoundation.org/code-of-conduct).
|
||||
|
||||
Number | Name | RGB | Hex | System.ConsoleColor
|
||||
--- | --- | --- | --- | ---
|
||||
`0` | `black` | `0,0,0` | `#000000` | `Black`
|
||||
`1` | `maroon` | `128,0,0` | `#800000` | `DarkRed`
|
||||
`2` | `green` | `0,128,0` | `#008000` | `DarkGreen`
|
||||
`3` | `olive` | `128,128,0` | `#808000` | `DarkYellow`
|
||||
`4` | `navy` | `0,0,128` | `#000080` | `DarkBlue`
|
||||
`5` | `purple` | `128,0,128` | `#800080` | `DarkMagenta`
|
||||
`6` | `teal` | `0,128,128` | `#008080` | `DarkCyan`
|
||||
`7` | `silver` | `192,192,192` | `#c0c0c0` | `Gray`
|
||||
`8` | `grey` | `128,128,128` | `#808080` | `DarkGray`
|
||||
`9` | `red` | `255,0,0` | `#ff0000` | `Red`
|
||||
`10` | `lime` | `0,255,0` | `#00ff00` | `Green`
|
||||
`11` | `yellow` | `255,255,0` | `#ffff00` | `Yellow`
|
||||
`12` | `blue` | `0,0,255` | `#0000ff` | `Blue`
|
||||
`13` | `fuchsia` | `255,0,255` | `#ff00ff` | `Magenta`
|
||||
`14` | `aqua` | `0,255,255` | `#00ffff` | `Cyan`
|
||||
`15` | `white` | `255,255,255` | `#ffffff` | `White`
|
||||
`16` | `grey0` | `0,0,0` | `#000000`
|
||||
`17` | `navyblue` | `0,0,95` | `#00005f`
|
||||
`18` | `darkblue` | `0,0,135` | `#000087`
|
||||
`19` | `blue3` | `0,0,175` | `#0000af`
|
||||
`20` | `blue3_1` | `0,0,215` | `#0000d7`
|
||||
`21` | `blue1` | `0,0,255` | `#0000ff`
|
||||
`22` | `darkgreen` | `0,95,0` | `#005f00`
|
||||
`23` | `deepskyblue4` | `0,95,95` | `#005f5f`
|
||||
`24` | `deepskyblue4_1` | `0,95,135` | `#005f87`
|
||||
`25` | `deepskyblue4_2` | `0,95,175` | `#005faf`
|
||||
`26` | `dodgerblue3` | `0,95,215` | `#005fd7`
|
||||
`27` | `dodgerblue2` | `0,95,255` | `#005fff`
|
||||
`28` | `green4` | `0,135,0` | `#008700`
|
||||
`29` | `springgreen4` | `0,135,95` | `#00875f`
|
||||
`30` | `turquoise4` | `0,135,135` | `#008787`
|
||||
`31` | `deepskyblue3` | `0,135,175` | `#0087af`
|
||||
`32` | `deepskyblue3_1` | `0,135,215` | `#0087d7`
|
||||
`33` | `dodgerblue1` | `0,135,255` | `#0087ff`
|
||||
`34` | `green3` | `0,175,0` | `#00af00`
|
||||
`35` | `springgreen3` | `0,175,95` | `#00af5f`
|
||||
`36` | `darkcyan` | `0,175,135` | `#00af87`
|
||||
`37` | `lightseagreen` | `0,175,175` | `#00afaf`
|
||||
`38` | `deepskyblue2` | `0,175,215` | `#00afd7`
|
||||
`39` | `deepskyblue1` | `0,175,255` | `#00afff`
|
||||
`40` | `green3_1` | `0,215,0` | `#00d700`
|
||||
`41` | `springgreen3_1` | `0,215,95` | `#00d75f`
|
||||
`42` | `springgreen2` | `0,215,135` | `#00d787`
|
||||
`43` | `cyan3` | `0,215,175` | `#00d7af`
|
||||
`44` | `darkturquoise` | `0,215,215` | `#00d7d7`
|
||||
`45` | `turquoise2` | `0,215,255` | `#00d7ff`
|
||||
`46` | `green1` | `0,255,0` | `#00ff00`
|
||||
`47` | `springgreen2_1` | `0,255,95` | `#00ff5f`
|
||||
`48` | `springgreen1` | `0,255,135` | `#00ff87`
|
||||
`49` | `mediumspringgreen` | `0,255,175` | `#00ffaf`
|
||||
`50` | `cyan2` | `0,255,215` | `#00ffd7`
|
||||
`51` | `cyan1` | `0,255,255` | `#00ffff`
|
||||
`52` | `darkred` | `95,0,0` | `#5f0000`
|
||||
`53` | `deeppink4` | `95,0,95` | `#5f005f`
|
||||
`54` | `purple4` | `95,0,135` | `#5f0087`
|
||||
`55` | `purple4_1` | `95,0,175` | `#5f00af`
|
||||
`56` | `purple3` | `95,0,215` | `#5f00d7`
|
||||
`57` | `blueviolet` | `95,0,255` | `#5f00ff`
|
||||
`58` | `orange4` | `95,95,0` | `#5f5f00`
|
||||
`59` | `grey37` | `95,95,95` | `#5f5f5f`
|
||||
`60` | `mediumpurple4` | `95,95,135` | `#5f5f87`
|
||||
`61` | `slateblue3` | `95,95,175` | `#5f5faf`
|
||||
`62` | `slateblue3_1` | `95,95,215` | `#5f5fd7`
|
||||
`63` | `royalblue1` | `95,95,255` | `#5f5fff`
|
||||
`64` | `chartreuse4` | `95,135,0` | `#5f8700`
|
||||
`65` | `darkseagreen4` | `95,135,95` | `#5f875f`
|
||||
`66` | `paleturquoise4` | `95,135,135` | `#5f8787`
|
||||
`67` | `steelblue` | `95,135,175` | `#5f87af`
|
||||
`68` | `steelblue3` | `95,135,215` | `#5f87d7`
|
||||
`69` | `cornflowerblue` | `95,135,255` | `#5f87ff`
|
||||
`70` | `chartreuse3` | `95,175,0` | `#5faf00`
|
||||
`71` | `darkseagreen4_1` | `95,175,95` | `#5faf5f`
|
||||
`72` | `cadetblue` | `95,175,135` | `#5faf87`
|
||||
`73` | `cadetblue_1` | `95,175,175` | `#5fafaf`
|
||||
`74` | `skyblue3` | `95,175,215` | `#5fafd7`
|
||||
`75` | `steelblue1` | `95,175,255` | `#5fafff`
|
||||
`76` | `chartreuse3_1` | `95,215,0` | `#5fd700`
|
||||
`77` | `palegreen3` | `95,215,95` | `#5fd75f`
|
||||
`78` | `seagreen3` | `95,215,135` | `#5fd787`
|
||||
`79` | `aquamarine3` | `95,215,175` | `#5fd7af`
|
||||
`80` | `mediumturquoise` | `95,215,215` | `#5fd7d7`
|
||||
`81` | `steelblue1_1` | `95,215,255` | `#5fd7ff`
|
||||
`82` | `chartreuse2` | `95,255,0` | `#5fff00`
|
||||
`83` | `seagreen2` | `95,255,95` | `#5fff5f`
|
||||
`84` | `seagreen1` | `95,255,135` | `#5fff87`
|
||||
`85` | `seagreen1_1` | `95,255,175` | `#5fffaf`
|
||||
`86` | `aquamarine1` | `95,255,215` | `#5fffd7`
|
||||
`87` | `darkslategray2` | `95,255,255` | `#5fffff`
|
||||
`88` | `darkred_1` | `135,0,0` | `#870000`
|
||||
`89` | `deeppink4_1` | `135,0,95` | `#87005f`
|
||||
`90` | `darkmagenta` | `135,0,135` | `#870087`
|
||||
`91` | `darkmagenta_1` | `135,0,175` | `#8700af`
|
||||
`92` | `darkviolet` | `135,0,215` | `#8700d7`
|
||||
`93` | `purple_1` | `135,0,255` | `#8700ff`
|
||||
`94` | `orange4_1` | `135,95,0` | `#875f00`
|
||||
`95` | `lightpink4` | `135,95,95` | `#875f5f`
|
||||
`96` | `plum4` | `135,95,135` | `#875f87`
|
||||
`97` | `mediumpurple3` | `135,95,175` | `#875faf`
|
||||
`98` | `mediumpurple3_1` | `135,95,215` | `#875fd7`
|
||||
`99` | `slateblue1` | `135,95,255` | `#875fff`
|
||||
`100` | `yellow4` | `135,135,0` | `#878700`
|
||||
`101` | `wheat4` | `135,135,95` | `#87875f`
|
||||
`102` | `grey53` | `135,135,135` | `#878787`
|
||||
`103` | `lightslategrey` | `135,135,175` | `#8787af`
|
||||
`104` | `mediumpurple` | `135,135,215` | `#8787d7`
|
||||
`105` | `lightslateblue` | `135,135,255` | `#8787ff`
|
||||
`106` | `yellow4_1` | `135,175,0` | `#87af00`
|
||||
`107` | `darkolivegreen3` | `135,175,95` | `#87af5f`
|
||||
`108` | `darkseagreen` | `135,175,135` | `#87af87`
|
||||
`109` | `lightskyblue3` | `135,175,175` | `#87afaf`
|
||||
`110` | `lightskyblue3_1` | `135,175,215` | `#87afd7`
|
||||
`111` | `skyblue2` | `135,175,255` | `#87afff`
|
||||
`112` | `chartreuse2_1` | `135,215,0` | `#87d700`
|
||||
`113` | `darkolivegreen3_1` | `135,215,95` | `#87d75f`
|
||||
`114` | `palegreen3_1` | `135,215,135` | `#87d787`
|
||||
`115` | `darkseagreen3` | `135,215,175` | `#87d7af`
|
||||
`116` | `darkslategray3` | `135,215,215` | `#87d7d7`
|
||||
`117` | `skyblue1` | `135,215,255` | `#87d7ff`
|
||||
`118` | `chartreuse1` | `135,255,0` | `#87ff00`
|
||||
`119` | `lightgreen` | `135,255,95` | `#87ff5f`
|
||||
`120` | `lightgreen_1` | `135,255,135` | `#87ff87`
|
||||
`121` | `palegreen1` | `135,255,175` | `#87ffaf`
|
||||
`122` | `aquamarine1_1` | `135,255,215` | `#87ffd7`
|
||||
`123` | `darkslategray1` | `135,255,255` | `#87ffff`
|
||||
`124` | `red3` | `175,0,0` | `#af0000`
|
||||
`125` | `deeppink4_2` | `175,0,95` | `#af005f`
|
||||
`126` | `mediumvioletred` | `175,0,135` | `#af0087`
|
||||
`127` | `magenta3` | `175,0,175` | `#af00af`
|
||||
`128` | `darkviolet_1` | `175,0,215` | `#af00d7`
|
||||
`129` | `purple_2` | `175,0,255` | `#af00ff`
|
||||
`130` | `darkorange3` | `175,95,0` | `#af5f00`
|
||||
`131` | `indianred` | `175,95,95` | `#af5f5f`
|
||||
`132` | `hotpink3` | `175,95,135` | `#af5f87`
|
||||
`133` | `mediumorchid3` | `175,95,175` | `#af5faf`
|
||||
`134` | `mediumorchid` | `175,95,215` | `#af5fd7`
|
||||
`135` | `mediumpurple2` | `175,95,255` | `#af5fff`
|
||||
`136` | `darkgoldenrod` | `175,135,0` | `#af8700`
|
||||
`137` | `lightsalmon3` | `175,135,95` | `#af875f`
|
||||
`138` | `rosybrown` | `175,135,135` | `#af8787`
|
||||
`139` | `grey63` | `175,135,175` | `#af87af`
|
||||
`140` | `mediumpurple2_1` | `175,135,215` | `#af87d7`
|
||||
`141` | `mediumpurple1` | `175,135,255` | `#af87ff`
|
||||
`142` | `gold3` | `175,175,0` | `#afaf00`
|
||||
`143` | `darkkhaki` | `175,175,95` | `#afaf5f`
|
||||
`144` | `navajowhite3` | `175,175,135` | `#afaf87`
|
||||
`145` | `grey69` | `175,175,175` | `#afafaf`
|
||||
`146` | `lightsteelblue3` | `175,175,215` | `#afafd7`
|
||||
`147` | `lightsteelblue` | `175,175,255` | `#afafff`
|
||||
`148` | `yellow3` | `175,215,0` | `#afd700`
|
||||
`149` | `darkolivegreen3_2` | `175,215,95` | `#afd75f`
|
||||
`150` | `darkseagreen3_1` | `175,215,135` | `#afd787`
|
||||
`151` | `darkseagreen2` | `175,215,175` | `#afd7af`
|
||||
`152` | `lightcyan3` | `175,215,215` | `#afd7d7`
|
||||
`153` | `lightskyblue1` | `175,215,255` | `#afd7ff`
|
||||
`154` | `greenyellow` | `175,255,0` | `#afff00`
|
||||
`155` | `darkolivegreen2` | `175,255,95` | `#afff5f`
|
||||
`156` | `palegreen1_1` | `175,255,135` | `#afff87`
|
||||
`157` | `darkseagreen2_1` | `175,255,175` | `#afffaf`
|
||||
`158` | `darkseagreen1` | `175,255,215` | `#afffd7`
|
||||
`159` | `paleturquoise1` | `175,255,255` | `#afffff`
|
||||
`160` | `red3_1` | `215,0,0` | `#d70000`
|
||||
`161` | `deeppink3` | `215,0,95` | `#d7005f`
|
||||
`162` | `deeppink3_1` | `215,0,135` | `#d70087`
|
||||
`163` | `magenta3_1` | `215,0,175` | `#d700af`
|
||||
`164` | `magenta3_2` | `215,0,215` | `#d700d7`
|
||||
`165` | `magenta2` | `215,0,255` | `#d700ff`
|
||||
`166` | `darkorange3_1` | `215,95,0` | `#d75f00`
|
||||
`167` | `indianred_1` | `215,95,95` | `#d75f5f`
|
||||
`168` | `hotpink3_1` | `215,95,135` | `#d75f87`
|
||||
`169` | `hotpink2` | `215,95,175` | `#d75faf`
|
||||
`170` | `orchid` | `215,95,215` | `#d75fd7`
|
||||
`171` | `mediumorchid1` | `215,95,255` | `#d75fff`
|
||||
`172` | `orange3` | `215,135,0` | `#d78700`
|
||||
`173` | `lightsalmon3_1` | `215,135,95` | `#d7875f`
|
||||
`174` | `lightpink3` | `215,135,135` | `#d78787`
|
||||
`175` | `pink3` | `215,135,175` | `#d787af`
|
||||
`176` | `plum3` | `215,135,215` | `#d787d7`
|
||||
`177` | `violet` | `215,135,255` | `#d787ff`
|
||||
`178` | `gold3_1` | `215,175,0` | `#d7af00`
|
||||
`179` | `lightgoldenrod3` | `215,175,95` | `#d7af5f`
|
||||
`180` | `tan` | `215,175,135` | `#d7af87`
|
||||
`181` | `mistyrose3` | `215,175,175` | `#d7afaf`
|
||||
`182` | `thistle3` | `215,175,215` | `#d7afd7`
|
||||
`183` | `plum2` | `215,175,255` | `#d7afff`
|
||||
`184` | `yellow3_1` | `215,215,0` | `#d7d700`
|
||||
`185` | `khaki3` | `215,215,95` | `#d7d75f`
|
||||
`186` | `lightgoldenrod2` | `215,215,135` | `#d7d787`
|
||||
`187` | `lightyellow3` | `215,215,175` | `#d7d7af`
|
||||
`188` | `grey84` | `215,215,215` | `#d7d7d7`
|
||||
`189` | `lightsteelblue1` | `215,215,255` | `#d7d7ff`
|
||||
`190` | `yellow2` | `215,255,0` | `#d7ff00`
|
||||
`191` | `darkolivegreen1` | `215,255,95` | `#d7ff5f`
|
||||
`192` | `darkolivegreen1_1` | `215,255,135` | `#d7ff87`
|
||||
`193` | `darkseagreen1_1` | `215,255,175` | `#d7ffaf`
|
||||
`194` | `honeydew2` | `215,255,215` | `#d7ffd7`
|
||||
`195` | `lightcyan1` | `215,255,255` | `#d7ffff`
|
||||
`196` | `red1` | `255,0,0` | `#ff0000`
|
||||
`197` | `deeppink2` | `255,0,95` | `#ff005f`
|
||||
`198` | `deeppink1` | `255,0,135` | `#ff0087`
|
||||
`199` | `deeppink1_1` | `255,0,175` | `#ff00af`
|
||||
`200` | `magenta2_1` | `255,0,215` | `#ff00d7`
|
||||
`201` | `magenta1` | `255,0,255` | `#ff00ff`
|
||||
`202` | `orangered1` | `255,95,0` | `#ff5f00`
|
||||
`203` | `indianred1` | `255,95,95` | `#ff5f5f`
|
||||
`204` | `indianred1_1` | `255,95,135` | `#ff5f87`
|
||||
`205` | `hotpink` | `255,95,175` | `#ff5faf`
|
||||
`206` | `hotpink_1` | `255,95,215` | `#ff5fd7`
|
||||
`207` | `mediumorchid1_1` | `255,95,255` | `#ff5fff`
|
||||
`208` | `darkorange` | `255,135,0` | `#ff8700`
|
||||
`209` | `salmon1` | `255,135,95` | `#ff875f`
|
||||
`210` | `lightcoral` | `255,135,135` | `#ff8787`
|
||||
`211` | `palevioletred1` | `255,135,175` | `#ff87af`
|
||||
`212` | `orchid2` | `255,135,215` | `#ff87d7`
|
||||
`213` | `orchid1` | `255,135,255` | `#ff87ff`
|
||||
`214` | `orange1` | `255,175,0` | `#ffaf00`
|
||||
`215` | `sandybrown` | `255,175,95` | `#ffaf5f`
|
||||
`216` | `lightsalmon1` | `255,175,135` | `#ffaf87`
|
||||
`217` | `lightpink1` | `255,175,175` | `#ffafaf`
|
||||
`218` | `pink1` | `255,175,215` | `#ffafd7`
|
||||
`219` | `plum1` | `255,175,255` | `#ffafff`
|
||||
`220` | `gold1` | `255,215,0` | `#ffd700`
|
||||
`221` | `lightgoldenrod2_1` | `255,215,95` | `#ffd75f`
|
||||
`222` | `lightgoldenrod2_2` | `255,215,135` | `#ffd787`
|
||||
`223` | `navajowhite1` | `255,215,175` | `#ffd7af`
|
||||
`224` | `mistyrose1` | `255,215,215` | `#ffd7d7`
|
||||
`225` | `thistle1` | `255,215,255` | `#ffd7ff`
|
||||
`226` | `yellow1` | `255,255,0` | `#ffff00`
|
||||
`227` | `lightgoldenrod1` | `255,255,95` | `#ffff5f`
|
||||
`228` | `khaki1` | `255,255,135` | `#ffff87`
|
||||
`229` | `wheat1` | `255,255,175` | `#ffffaf`
|
||||
`230` | `cornsilk1` | `255,255,215` | `#ffffd7`
|
||||
`231` | `grey100` | `255,255,255` | `#ffffff`
|
||||
`232` | `grey3` | `8,8,8` | `#080808`
|
||||
`233` | `grey7` | `18,18,18` | `#121212`
|
||||
`234` | `grey11` | `28,28,28` | `#1c1c1c`
|
||||
`235` | `grey15` | `38,38,38` | `#262626`
|
||||
`236` | `grey19` | `48,48,48` | `#303030`
|
||||
`237` | `grey23` | `58,58,58` | `#3a3a3a`
|
||||
`238` | `grey27` | `68,68,68` | `#444444`
|
||||
`239` | `grey30` | `78,78,78` | `#4e4e4e`
|
||||
`240` | `grey35` | `88,88,88` | `#585858`
|
||||
`241` | `grey39` | `98,98,98` | `#626262`
|
||||
`242` | `grey42` | `108,108,108` | `#6c6c6c`
|
||||
`243` | `grey46` | `118,118,118` | `#767676`
|
||||
`244` | `grey50` | `128,128,128` | `#808080`
|
||||
`245` | `grey54` | `138,138,138` | `#8a8a8a`
|
||||
`246` | `grey58` | `148,148,148` | `#949494`
|
||||
`247` | `grey62` | `158,158,158` | `#9e9e9e`
|
||||
`248` | `grey66` | `168,168,168` | `#a8a8a8`
|
||||
`249` | `grey70` | `178,178,178` | `#b2b2b2`
|
||||
`250` | `grey74` | `188,188,188` | `#bcbcbc`
|
||||
`251` | `grey78` | `198,198,198` | `#c6c6c6`
|
||||
`252` | `grey82` | `208,208,208` | `#d0d0d0`
|
||||
`253` | `grey85` | `218,218,218` | `#dadada`
|
||||
`254` | `grey89` | `228,228,228` | `#e4e4e4`
|
||||
`255` | `grey93` | `238,238,238` | `#eeeeee`
|
||||
## .NET Foundation
|
||||
|
||||
This project is supported by the [.NET Foundation](https://dotnetfoundation.org).
|
||||
|
||||
## License
|
||||
|
||||
Copyright © Patrik Svensson, Phil Scott, Nils Andresen, Cédric Luthi, Frank Ray
|
||||
|
||||
`Spectre.Console` is provided as-is under the MIT license. For more information see LICENSE.
|
||||
|
||||
* SixLabors.ImageSharp, a library which `Spectre.Console` relies upon, is licensed under Apache 2.0 when distributed as part of `Spectre.Console`. The Six Labors Split License covers all other usage, see: https://github.com/SixLabors/ImageSharp/blob/master/LICENSE
|
||||
|
74
README.pt-BR.md
Normal file
74
README.pt-BR.md
Normal file
@ -0,0 +1,74 @@
|
||||
# `Spectre.Console`
|
||||
|
||||
_[](https://www.nuget.org/packages/spectre.console)_
|
||||
|
||||
Uma biblioteca .NET que torna mais fácil criar aplicativos de console bonitos e multiplataforma.
|
||||
É fortemente inspirada na excelente [biblioteca Rich](https://github.com/willmcgugan/rich)
|
||||
para Python.
|
||||
|
||||
## Índice de Conteúdo
|
||||
|
||||
1. [Funcionalidades](#funcionalidades)
|
||||
2. [Instalação](#instalação)
|
||||
3. [Documentação](#documentação)
|
||||
4. [Exemplos](#exemplos)
|
||||
5. [Patrocinadores](#patrocinadores)
|
||||
5. [Licença](#licença)
|
||||
|
||||
## Funcionalidades
|
||||
|
||||
* Desenvolvida com testes unitários em mente.
|
||||
* Suporta tabelas, grades, painéis, e uma linguagem de marcação inspirada em [rich](https://github.com/willmcgugan/rich).
|
||||
* Suporta os parâmetros SRG mais comuns quando se trata de estilo de texto,
|
||||
como negrito, esmaecido, itálico, sublinhado, tachado
|
||||
e texto piscando.
|
||||
* Suporta cores de 3/4/8/24 bits no terminal.
|
||||
A biblioteca detectará os recursos do terminal atual
|
||||
e reduz as cores conforme necessário.
|
||||
|
||||

|
||||
|
||||
## Instalação
|
||||
|
||||
A maneira mais rápida de começar a usar o `Spectre.Console` é instalar o pacote NuGet.
|
||||
|
||||
```csharp
|
||||
dotnet add package Spectre.Console
|
||||
```
|
||||
|
||||
## Documentação
|
||||
|
||||
A documentação do `Spectre.Console` pode ser encontrada em
|
||||
https://spectreconsole.net/
|
||||
|
||||
## Exemplos
|
||||
|
||||
To see `Spectre.Console` in action, please see the
|
||||
[examples repository](https://github.com/spectreconsole/examples).
|
||||
|
||||
## Patrocinadores
|
||||
|
||||
As seguintes pessoas estão [patrocinando](https://github.com/sponsors/patriksvensson)
|
||||
o Spectre.Console para mostrar o seu apoio e garantir a longevidade do projeto.
|
||||
|
||||
* [Rodney Littles II](https://github.com/RLittlesII)
|
||||
* [Martin Björkström](https://github.com/bjorkstromm)
|
||||
* [Dave Glick](https://github.com/daveaglick)
|
||||
* [Kim Gunanrsson](https://github.com/kimgunnarsson)
|
||||
* [Andrew McClenaghan](https://github.com/andymac4182)
|
||||
* [C. Augusto Proiete](https://github.com/augustoproiete)
|
||||
* [Viktor Elofsson](https://github.com/vktr)
|
||||
* [Steven Knox](https://github.com/stevenknox)
|
||||
* [David Pendray](https://github.com/dpen2000)
|
||||
* [Elmah.io](https://github.com/elmahio)
|
||||
|
||||
Eu estou muito agradecido.
|
||||
**Muito obrigado!**
|
||||
|
||||
## Licença
|
||||
|
||||
Copyright © Patrik Svensson, Phil Scott, Nils Andresen, Cédric Luthi, Frank Ray
|
||||
|
||||
Spectre.Console é fornecido no estado em que se encontra sob a licença do MIT. Para obter mais informações, consulte o arquivo [LICENSE](LICENSE.md).
|
||||
|
||||
* Para SixLabors.ImageSharp, consulte https://github.com/SixLabors/ImageSharp/blob/master/LICENSE
|
69
README.zh.md
Normal file
69
README.zh.md
Normal file
@ -0,0 +1,69 @@
|
||||
# `Spectre.Console`
|
||||
|
||||
_[](https://www.nuget.org/packages/spectre.console)_
|
||||
|
||||
`Spectre.Console`是一个 .NET 的库,可以更轻松地创建美观的跨平台控制台应用程序。
|
||||
|
||||
深受 [Rich](https://github.com/willmcgugan/rich) 这个Python优秀库的启发。
|
||||
|
||||
## 目录
|
||||
|
||||
1. [功能](#功能)
|
||||
2. [安装](#安装)
|
||||
3. [文档](#文档)
|
||||
4. [例子](#例子)
|
||||
5. [Sponsors](#Sponsors)
|
||||
6. [开源许可](#开源许可)
|
||||
|
||||
## 功能
|
||||
|
||||
* 编写时考虑到了单元测试。
|
||||
* 支持 tables、grid、panel 和 [rich](https://github.com/willmcgugan/rich) 所支持的标记语言。
|
||||
* 支持大部分的 SRG 参数,包括粗体、暗淡字、斜体、下划线、删除线和闪烁文本。
|
||||
* 支持终端显示 3/4/8/24 位色。自动检测终端类型,自适应颜色范围。
|
||||
|
||||

|
||||
|
||||
## 安装
|
||||
|
||||
最快的安装方式,就是用NuGet包管理直接安装`Spectre.Console`。
|
||||
|
||||
```csharp
|
||||
dotnet add package Spectre.Console
|
||||
```
|
||||
|
||||
## 文档
|
||||
|
||||
`Spectre.Console`的文档可以在这里查看
|
||||
https://spectreconsole.net/
|
||||
|
||||
## 例子
|
||||
|
||||
To see `Spectre.Console` in action, please see the
|
||||
[examples repository](https://github.com/spectreconsole/examples).
|
||||
|
||||
## Sponsors
|
||||
|
||||
下面这些用户正在[sponsor](https://github.com/sponsors/patriksvensson)上支持着Spectre.Console,确保这个项目的持续维护。
|
||||
|
||||
* [Rodney Littles II](https://github.com/RLittlesII)
|
||||
* [Martin Björkström](https://github.com/bjorkstromm)
|
||||
* [Dave Glick](https://github.com/daveaglick)
|
||||
* [Kim Gunanrsson](https://github.com/kimgunnarsson)
|
||||
* [Andrew McClenaghan](https://github.com/andymac4182)
|
||||
* [C. Augusto Proiete](https://github.com/augustoproiete)
|
||||
* [Viktor Elofsson](https://github.com/vktr)
|
||||
* [Steven Knox](https://github.com/stevenknox)
|
||||
* [David Pendray](https://github.com/dpen2000)
|
||||
* [Elmah.io](https://github.com/elmahio)
|
||||
|
||||
我对此表示十分感激
|
||||
**非常感谢各位!**
|
||||
|
||||
## 开源许可
|
||||
|
||||
版权所有 © Patrik Svensson, Phil Scott, Nils Andresen, Cédric Luthi, Frank Ray
|
||||
|
||||
Spectre.Console 基于 MIT 协议提供。查看 LICENSE 文件了解更多信息。
|
||||
|
||||
* SixLabors.ImageSharp 的协议请查看 https://github.com/SixLabors/ImageSharp/blob/master/LICENSE
|
89
build.cake
89
build.cake
@ -4,13 +4,33 @@ var configuration = Argument("configuration", "Release");
|
||||
////////////////////////////////////////////////////////////////
|
||||
// Tasks
|
||||
|
||||
Task("Clean")
|
||||
.Does(context =>
|
||||
{
|
||||
context.CleanDirectory("./.artifacts");
|
||||
});
|
||||
|
||||
Task("Build")
|
||||
.IsDependentOn("Clean")
|
||||
.Does(context =>
|
||||
{
|
||||
DotNetCoreBuild("./src/Spectre.Console.sln", new DotNetCoreBuildSettings {
|
||||
Information("Compiling generator...");
|
||||
DotNetBuild("./resources/scripts/Generator/Generator.sln", new DotNetBuildSettings {
|
||||
Configuration = configuration,
|
||||
Verbosity = DotNetVerbosity.Minimal,
|
||||
NoLogo = true,
|
||||
NoIncremental = context.HasArgument("rebuild"),
|
||||
MSBuildSettings = new DotNetCoreMSBuildSettings()
|
||||
MSBuildSettings = new DotNetMSBuildSettings()
|
||||
.TreatAllWarningsAs(MSBuildTreatAllWarningsAs.Error)
|
||||
});
|
||||
|
||||
Information("\nCompiling Spectre.Console...");
|
||||
DotNetBuild("./src/Spectre.Console.sln", new DotNetBuildSettings {
|
||||
Configuration = configuration,
|
||||
Verbosity = DotNetVerbosity.Minimal,
|
||||
NoLogo = true,
|
||||
NoIncremental = context.HasArgument("rebuild"),
|
||||
MSBuildSettings = new DotNetMSBuildSettings()
|
||||
.TreatAllWarningsAs(MSBuildTreatAllWarningsAs.Error)
|
||||
});
|
||||
});
|
||||
@ -19,64 +39,41 @@ Task("Test")
|
||||
.IsDependentOn("Build")
|
||||
.Does(context =>
|
||||
{
|
||||
DotNetCoreTest("./src/Spectre.Console.Tests/Spectre.Console.Tests.csproj", new DotNetCoreTestSettings {
|
||||
DotNetTest("./src/Tests/Spectre.Console.Tests/Spectre.Console.Tests.csproj", new DotNetTestSettings {
|
||||
Configuration = configuration,
|
||||
Verbosity = DotNetVerbosity.Minimal,
|
||||
NoLogo = true,
|
||||
NoRestore = true,
|
||||
NoBuild = true,
|
||||
});
|
||||
|
||||
DotNetTest("./src/Tests/Spectre.Console.Cli.Tests/Spectre.Console.Cli.Tests.csproj", new DotNetTestSettings {
|
||||
Configuration = configuration,
|
||||
Verbosity = DotNetVerbosity.Minimal,
|
||||
NoLogo = true,
|
||||
NoRestore = true,
|
||||
NoBuild = true,
|
||||
});
|
||||
});
|
||||
|
||||
Task("Package")
|
||||
.IsDependentOn("Test")
|
||||
//.IsDependentOn("Test")
|
||||
.Does(context =>
|
||||
{
|
||||
context.CleanDirectory("./.artifacts");
|
||||
|
||||
context.DotNetCorePack($"./src/Spectre.Console.sln", new DotNetCorePackSettings {
|
||||
context.DotNetPack($"./src/Spectre.Console.sln", new DotNetPackSettings {
|
||||
Configuration = configuration,
|
||||
NoRestore = true,
|
||||
NoBuild = true,
|
||||
Verbosity = DotNetVerbosity.Minimal,
|
||||
NoLogo = true,
|
||||
NoRestore = false,
|
||||
NoBuild = false,
|
||||
OutputDirectory = "./.artifacts",
|
||||
MSBuildSettings = new DotNetCoreMSBuildSettings()
|
||||
MSBuildSettings = new DotNetMSBuildSettings()
|
||||
.TreatAllWarningsAs(MSBuildTreatAllWarningsAs.Error)
|
||||
.WithProperty("SymbolPackageFormat", "snupkg")
|
||||
});
|
||||
});
|
||||
|
||||
Task("Publish-GitHub")
|
||||
.WithCriteria(ctx => BuildSystem.IsRunningOnGitHubActions, "Not running on GitHub Actions")
|
||||
.IsDependentOn("Package")
|
||||
.Does(context =>
|
||||
{
|
||||
var apiKey = Argument<string>("github-key", null);
|
||||
if(string.IsNullOrWhiteSpace(apiKey)) {
|
||||
throw new CakeException("No GitHub API key was provided.");
|
||||
}
|
||||
|
||||
// Publish to GitHub Packages
|
||||
var exitCode = 0;
|
||||
foreach(var file in context.GetFiles("./.artifacts/*.nupkg"))
|
||||
{
|
||||
context.Information("Publishing {0}...", file.GetFilename().FullPath);
|
||||
exitCode += StartProcess("dotnet",
|
||||
new ProcessSettings {
|
||||
Arguments = new ProcessArgumentBuilder()
|
||||
.Append("gpr")
|
||||
.Append("push")
|
||||
.AppendQuoted(file.FullPath)
|
||||
.AppendSwitchSecret("-k", " ", apiKey)
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
if(exitCode != 0)
|
||||
{
|
||||
throw new CakeException("Could not push GitHub packages.");
|
||||
}
|
||||
});
|
||||
|
||||
Task("Publish-NuGet")
|
||||
.WithCriteria(ctx => BuildSystem.IsRunningOnGitHubActions, "Not running on GitHub Actions")
|
||||
//.WithCriteria(ctx => BuildSystem.IsRunningOnGitHubActions, "Not running on GitHub Actions")
|
||||
.IsDependentOn("Package")
|
||||
.Does(context =>
|
||||
{
|
||||
@ -89,10 +86,11 @@ Task("Publish-NuGet")
|
||||
foreach(var file in context.GetFiles("./.artifacts/*.nupkg"))
|
||||
{
|
||||
context.Information("Publishing {0}...", file.GetFilename().FullPath);
|
||||
DotNetCoreNuGetPush(file.FullPath, new DotNetCoreNuGetPushSettings
|
||||
DotNetNuGetPush(file.FullPath, new DotNetNuGetPushSettings
|
||||
{
|
||||
Source = "https://api.nuget.org/v3/index.json",
|
||||
ApiKey = apiKey,
|
||||
SkipDuplicate = true
|
||||
});
|
||||
}
|
||||
});
|
||||
@ -101,7 +99,6 @@ Task("Publish-NuGet")
|
||||
// Targets
|
||||
|
||||
Task("Publish")
|
||||
.IsDependentOn("Publish-GitHub")
|
||||
.IsDependentOn("Publish-NuGet");
|
||||
|
||||
Task("Default")
|
||||
|
40
docs/.gitignore
vendored
Normal file
40
docs/.gitignore
vendored
Normal file
@ -0,0 +1,40 @@
|
||||
[Bb]in/
|
||||
[Bb]uild/
|
||||
[Oo]bj/
|
||||
[Dd]ebug/
|
||||
[Rr]elease/
|
||||
[Pp]ackages/
|
||||
[Tt]ools/
|
||||
![Tt]ools/packages.config
|
||||
[Oo]utput/
|
||||
[Cc]ache/
|
||||
![Ii]nput/
|
||||
nuget.exe
|
||||
*.com
|
||||
*.class
|
||||
*.exe
|
||||
*.o
|
||||
*.so
|
||||
*.user
|
||||
Thumbs.db
|
||||
_ReSharper*
|
||||
*ReSharper.user
|
||||
*dotCover
|
||||
.JustCode
|
||||
*.suo
|
||||
.svn
|
||||
ipch
|
||||
*.ilk
|
||||
*.sdf
|
||||
*.opensdf
|
||||
*.pdb
|
||||
/*.~vsd
|
||||
*UpgradeWizard*
|
||||
.vs/*
|
||||
TestResult.xml
|
||||
/debug.log
|
||||
/packages.xml
|
||||
*.ncrunch*
|
||||
.*crunch*.local.xml
|
||||
/_NCrunch_Statiq.Framework
|
||||
*.pfx
|
61
docs/Docs.csproj
Normal file
61
docs/Docs.csproj
Normal file
@ -0,0 +1,61 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk.Web">
|
||||
|
||||
<PropertyGroup>
|
||||
<OutputType>Exe</OutputType>
|
||||
<TargetFramework>net8.0</TargetFramework>
|
||||
<RunWorkingDirectory>$(MSBuildProjectDirectory)</RunWorkingDirectory>
|
||||
<DefaultItemExcludes>$(DefaultItemExcludes);output\**;.gitignore</DefaultItemExcludes>
|
||||
<NoWarn>MVC1000</NoWarn>
|
||||
<MinVerSkip>true</MinVerSkip>
|
||||
<!--
|
||||
Disable NuGetAudit for now, there is an in progress PR with Statiq regarding these packages,
|
||||
but since since this is just a generator we are safe to ignore this for now.
|
||||
-->
|
||||
<NuGetAudit>false</NuGetAudit>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Compile Remove="input\**" />
|
||||
<Compile Remove="sass\**" />
|
||||
<Compile Include="input\api\Sections\_ConstantValue.cshtml.cs" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<None Include="input\**">
|
||||
<CopyToOutputDirectory>Never</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Include="sass\**">
|
||||
<CopyToOutputDirectory>Never</CopyToOutputDirectory>
|
||||
</None>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<None Remove="src\Data\emojis.json" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<EmbeddedResource Include="src\Data\emojis.json" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.Playwright" Version="1.49.0" />
|
||||
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
|
||||
<PackageReference Include="Statiq.CodeAnalysis" Version="1.0.0-beta.72" />
|
||||
<PackageReference Include="Statiq.Common" Version="1.0.0-beta.72" />
|
||||
<PackageReference Include="Statiq.Web" Version="1.0.0-beta.60" />
|
||||
<PackageReference Include="MinVer" PrivateAssets="All" Version="6.0.0" />
|
||||
<PackageReference Include="Statiq.Web.Netlify" Version="1.0.0-beta.60" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Folder Include="input\assets\images\emojis\" />
|
||||
</ItemGroup>
|
||||
|
||||
<Target Name="Versioning" BeforeTargets="MinVer">
|
||||
<PropertyGroup Label="Build">
|
||||
<MinVerDefaultPreReleasePhase>preview</MinVerDefaultPreReleasePhase>
|
||||
<MinVerVerbosity>normal</MinVerVerbosity>
|
||||
</PropertyGroup>
|
||||
</Target>
|
||||
|
||||
</Project>
|
25
docs/Docs.sln
Normal file
25
docs/Docs.sln
Normal file
@ -0,0 +1,25 @@
|
||||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio Version 16
|
||||
VisualStudioVersion = 16.0.30011.22
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Docs", "Docs.csproj", "{C337F609-A890-4E52-BDA3-91658039B0E3}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
Release|Any CPU = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{C337F609-A890-4E52-BDA3-91658039B0E3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{C337F609-A890-4E52-BDA3-91658039B0E3}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{C337F609-A890-4E52-BDA3-91658039B0E3}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{C337F609-A890-4E52-BDA3-91658039B0E3}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
SolutionGuid = {2FB3922B-494A-45EB-A479-FC507B8E107C}
|
||||
EndGlobalSection
|
||||
EndGlobal
|
1
docs/Preview.ps1
Executable file
1
docs/Preview.ps1
Executable file
@ -0,0 +1 @@
|
||||
dotnet run -- preview
|
77
docs/Program.cs
Normal file
77
docs/Program.cs
Normal file
@ -0,0 +1,77 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Threading.Tasks;
|
||||
using Docs.Extensions;
|
||||
using Docs.Shortcodes;
|
||||
using Docs.Utilities;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Statiq.App;
|
||||
using Statiq.Common;
|
||||
using Statiq.Core;
|
||||
using Statiq.Web;
|
||||
|
||||
namespace Docs
|
||||
{
|
||||
public static class Program
|
||||
{
|
||||
public static async Task<int> Main(string[] args) =>
|
||||
await Bootstrapper.Factory
|
||||
.CreateWeb(args)
|
||||
.AddSetting(Keys.Host, "spectreconsole.net")
|
||||
.AddSetting(Keys.LinksUseHttps, true)
|
||||
.AddSetting(Constants.EditLink, ConfigureEditLink())
|
||||
.AddSetting(Constants.SourceFiles, new List<string>
|
||||
{
|
||||
"../../src/Spectre.Console/**/{!bin,!obj,!packages,!*.Tests,}/**/*.cs",
|
||||
"../../src/Spectre.Console.Cli/**/{!bin,!obj,!packages,!*.Tests,}/**/*.cs",
|
||||
"../../src/Extensions/Spectre.Console.ImageSharp/**/{!bin,!obj,!packages,!*.Tests,}/**/*.cs",
|
||||
"../../src/Extensions/Spectre.Console.Json/**/{!bin,!obj,!packages,!*.Tests,}/**/*.cs"
|
||||
})
|
||||
.AddSetting(Constants.ExampleSourceFiles, new List<string>
|
||||
{
|
||||
"../../examples/**/{!bin,!obj,!packages,!*.Tests,}/**/*.cs",
|
||||
}
|
||||
)
|
||||
.ConfigureServices(i =>
|
||||
{
|
||||
i.AddSingleton(new TypeNameLinks());
|
||||
})
|
||||
.ConfigureSite("spectreconsole", "spectre.console", "main")
|
||||
.AddShortcode("Children", typeof(ChildrenShortcode))
|
||||
.AddShortcode("ColorTable", typeof(ColorTableShortcode))
|
||||
.AddShortcode("EmojiTable", typeof(EmojiTableShortcode))
|
||||
.AddShortcode("Alert", typeof(AlertShortcode))
|
||||
.AddShortcode("Info", typeof(InfoShortcode))
|
||||
.AddShortcode("AsciiCast", typeof(AsciiCastShortcode))
|
||||
.AddShortcode("Example", typeof(ExampleSnippet))
|
||||
.AddPipelines()
|
||||
.BuildPipeline(
|
||||
"Bootstrap",
|
||||
builder => builder
|
||||
.WithInputReadFiles("../node_modules/asciinema-player/dist/bundle/asciinema-player.js")
|
||||
.WithProcessModules(new SetDestination(Config.FromDocument(doc => new NormalizedPath($"./assets/{doc.Source.FileName}")), true))
|
||||
.WithOutputWriteFiles()
|
||||
)
|
||||
.AddProcess(ProcessTiming.Initialization, _ => new ProcessLauncher("npm", "install --audit false --fund false --progress false")
|
||||
{
|
||||
LogErrors = false
|
||||
})
|
||||
.AddProcess(ProcessTiming.Initialization, _ => new ProcessLauncher("dotnet", "playwright install chromium"))
|
||||
.AddProcess(ProcessTiming.BeforeDeployment, _ => new ProcessLauncher("npm", "run build:tailwind")
|
||||
{
|
||||
LogErrors = false
|
||||
})
|
||||
.RunAsync();
|
||||
|
||||
private static Config<string> ConfigureEditLink()
|
||||
{
|
||||
return Config.FromDocument((doc, ctx) =>
|
||||
{
|
||||
return string.Format("https://github.com/{0}/{1}/edit/{2}/docs/input/{3}",
|
||||
ctx.GetString(Constants.Site.Owner),
|
||||
ctx.GetString(Constants.Site.Repository),
|
||||
ctx.GetString(Constants.Site.Branch),
|
||||
doc.Source.GetRelativeInputPath());
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
46
docs/README.md
Normal file
46
docs/README.md
Normal file
@ -0,0 +1,46 @@
|
||||
# Documentation
|
||||
|
||||
To start contributing to the [Spectre.Console](https://github.com/spectreconsole/spectre.console) documentation, you will need the [.NET Core SDK](https://dot.net) 7.0.100 or higher (as defined in the repository root `global.json` file).
|
||||
|
||||
## Running Preview Site
|
||||
|
||||
The documentation site uses [Statiq](https://statiq.dev), a static site generator. To build the documentation site run the following in a command-line terminal.
|
||||
|
||||
```
|
||||
> Preview.ps1
|
||||
```
|
||||
|
||||
After the build is complete, you can navigate to [http://localhost:5080](http://localhost:5080).
|
||||
|
||||
## Npm
|
||||
|
||||
The site uses some tools from the JavaScript ecosystem including npm. While Statiq will execute `npm install` and other commands as needed, you need to have [npm installed](https://www.npmjs.com/get-npm) before running a site build.
|
||||
|
||||
## Editing Content
|
||||
|
||||
The documentation is written using [Markdown](https://www.markdownguide.org/basic-syntax/).
|
||||
|
||||
Markdown files can be found under the following directories:
|
||||
|
||||
- [/input](./input)
|
||||
- [/appendix](./input/appendix)
|
||||
|
||||
## Editing Layout
|
||||
|
||||
Layout and styling can also be found in the [input](./input) directory. Look for Sass, Css, and Images under the [assets](./input/assets) directory.
|
||||
|
||||
## Custom Build Features
|
||||
|
||||
The documentation site has custom enhancements to Statiq located under the [./src](./src) directory.
|
||||
|
||||
## License
|
||||
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2020 Patrik Svensson, Phil Scott, Nils Andresen
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
12
docs/dotnet-tools.json
Normal file
12
docs/dotnet-tools.json
Normal file
@ -0,0 +1,12 @@
|
||||
{
|
||||
"version": 1,
|
||||
"isRoot": true,
|
||||
"tools": {
|
||||
"microsoft.playwright.cli": {
|
||||
"version": "1.2.3",
|
||||
"commands": [
|
||||
"playwright"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
6
docs/global.json
Normal file
6
docs/global.json
Normal file
@ -0,0 +1,6 @@
|
||||
{
|
||||
"sdk": {
|
||||
"version": "9.0.100",
|
||||
"rollForward": "latestFeature"
|
||||
}
|
||||
}
|
1
docs/input/CNAME
Normal file
1
docs/input/CNAME
Normal file
@ -0,0 +1 @@
|
||||
spectreconsole.net
|
72
docs/input/DOC_TEMPLATE.md
Normal file
72
docs/input/DOC_TEMPLATE.md
Normal file
@ -0,0 +1,72 @@
|
||||
Title: Short title of the Widget being documented. Typically the class name
|
||||
Order: 99999
|
||||
Description: Description of the widget. This will be displayed on social card
|
||||
Highlights:
|
||||
- List features.
|
||||
- These will be used for the social card.
|
||||
- Keep to three items.
|
||||
Reference:
|
||||
- T:Spectre.Console.BarChart
|
||||
Hidden: true
|
||||
---
|
||||
|
||||
<!---
|
||||
Documentation steps
|
||||
1. Edit front matter. Change all fields. Order dictates how it is sorted in the sidebar. Remove hidden attributes.
|
||||
Make sure to reference the appropriate XMLDOC page. You can find this by looking in the generated HTML
|
||||
of the API reference section. You can reference multiple items e.g. types, methods, etc that are related to the Widget.
|
||||
2. Remove comments as you edit the fields.
|
||||
3. All widgets should have at minimum description and a usage section.
|
||||
-->
|
||||
|
||||
<!---
|
||||
Short description of the widget. Can be the same as the description above
|
||||
-->
|
||||
|
||||
|
||||
<!---
|
||||
Optional: Embed an asciicast. The cast parameter should be the base name of the cast. There are two files,
|
||||
one suffixed with -rich.cast and a second named -plain.cast. The cast attribute should be the name without
|
||||
the suffix.
|
||||
|
||||
To generate a new cast file, open the \resources\scripts\Generator\Generator.sln project and add a new sample in the
|
||||
Commands/AsciiCast/Samples/ folder. If the widget is static such as a tree or a table, try and animate the widget
|
||||
using the Live widget to change the content or styling.
|
||||
|
||||
Running the generator project with by executing
|
||||
|
||||
dotnet run -- samples -l
|
||||
|
||||
and pick your sample. This will generate a new asciicast in the docs/input/assets/casts folder which can then be referenced via:
|
||||
|
||||
<?# AsciiCast cast="sample-name" /?>
|
||||
-->
|
||||
|
||||
|
||||
|
||||
## Usage
|
||||
|
||||
### Basic usage
|
||||
|
||||
<!---
|
||||
Code sample for a default output of the widget. Code Samples can be embedded with a markdown code block or
|
||||
linked to via the Example snipped. The example snippet takes the XMLDOC reference of the snippet from the Examples
|
||||
project that you want to reference.
|
||||
|
||||
If linking to a method it will, by default, only include the method body. Include BodyOnly="false" to include
|
||||
the entire method including the declaration.
|
||||
|
||||
<?# Example symbol="M:Prompt.Program.AskConfirmation" /?>
|
||||
-->
|
||||
|
||||
### Additional Styling
|
||||
|
||||
<!---
|
||||
Include additional examples of styling or functionality
|
||||
-->
|
||||
|
||||
### More styling and functions
|
||||
|
||||
<!---
|
||||
Include additional examples of styling or functionality
|
||||
-->
|
8
docs/input/_ViewImports.cshtml
Normal file
8
docs/input/_ViewImports.cshtml
Normal file
@ -0,0 +1,8 @@
|
||||
@using Statiq.Common
|
||||
@using Statiq.Razor
|
||||
@using Statiq.Web
|
||||
@using Statiq.Web.Pipelines
|
||||
@using Docs
|
||||
@using Docs.Utilities;
|
||||
|
||||
@inherits StatiqRazorPage<IDocument>
|
3
docs/input/_ViewStart.cshtml
Normal file
3
docs/input/_ViewStart.cshtml
Normal file
@ -0,0 +1,3 @@
|
||||
@{
|
||||
Layout = @"_layout.cshtml";
|
||||
}
|
308
docs/input/_layout.cshtml
Normal file
308
docs/input/_layout.cshtml
Normal file
@ -0,0 +1,308 @@
|
||||
@using Docs.Extensions
|
||||
@using Statiq.CodeAnalysis
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=Edge">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
|
||||
<link href="@Context.GetLink("/assets/styles.css")" rel="stylesheet"/>
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com"/>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;700&display=swap" rel="stylesheet"/>
|
||||
|
||||
<link rel="apple-touch-icon" sizes="180x180" href="@Context.GetLink("/assets/favicons/apple-touch-icon.png")">
|
||||
<link rel="icon" type="image/png" sizes="32x32" href="@Context.GetLink("/assets/favicons/favicon-32x32.png")">
|
||||
<link rel="icon" type="image/png" sizes="16x16" href="@Context.GetLink("/assets/favicons/favicon-16x16.png")">
|
||||
|
||||
@{
|
||||
string title = Document.ContainsKey(Keys.Title) ? $"Spectre.Console - {Document.GetString(Keys.Title)}" : "Spectre.Console";
|
||||
string description = Document.ContainsKey(Constants.Description) ? Document.GetString(Constants.Description) : "Spectre.Console is a .NET library that makes it easier to create beautiful console applications";
|
||||
var card = Context.FindCard(Model.Id);
|
||||
var urlBase = $"https://{Document.GetString(Keys.Host)}/";
|
||||
}
|
||||
<title>@title</title>
|
||||
<meta name="description" content="@description"/>
|
||||
<meta name="xref" content="@HtmlEncoder.Encode(Document.GetString(WebKeys.Xref))" />
|
||||
|
||||
@if (card != null)
|
||||
{
|
||||
<meta name="twitter:card" content="summary_large_image"/>
|
||||
<meta name="og:title" content="@title"/>
|
||||
<meta name="og:description" content="@description"/>
|
||||
<meta name="og:image" content="@(urlBase + card)"/>
|
||||
}
|
||||
|
||||
<script>
|
||||
if (localStorage.theme === 'dark' || (!('theme' in localStorage) && window.matchMedia('(prefers-color-scheme: dark)').matches)) {
|
||||
document.documentElement.classList.add('dark');
|
||||
} else {
|
||||
document.documentElement.classList.remove('dark');
|
||||
}
|
||||
</script>
|
||||
|
||||
</head>
|
||||
<body class="antialiased text-slate-800 dark:text-slate-200 bg-slate-100 dark:bg-slate-800 transition-colors min-h-full flex flex-col">
|
||||
<header class="flex-none sticky top-0 z-40 text-sm font-medium bg-slate-200 backdrop-blur dark:bg-slate-800 ring-1 ring-slate-900 dark:ring-slate-700 ring-opacity-5 shadow-lg py-2 md:py-4">
|
||||
<nav class="flex flex-row container mx-auto items-center">
|
||||
<a class="flex flex-row items-center" href="@Context.GetLink("/")">
|
||||
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg"
|
||||
id="logo" class="w-auto h-10 md:h-12 fill-slate-700 dark:fill-slate-400 dark:stroke-slate-900" height="48" width="48" viewBox="0 0 1270.000000 1270.000000"
|
||||
preserveAspectRatio="xMidYMid meet">
|
||||
<metadata>
|
||||
Created by potrace 1.16, written by Peter Selinger 2001-2019
|
||||
</metadata>
|
||||
<g transform="translate(0.000000,1270.000000) scale(0.100000,-0.100000)">
|
||||
<path d="M799 10610 c-199 -48 -354 -191 -414 -383 l-25 -78 0 -3084 0 -3084
|
||||
25 -79 c45 -141 155 -270 289 -335 124 -61 -80 -57 2819 -57 l2646 0 5 -43 c3
|
||||
-23 8 -71 11 -105 13 -137 88 -334 179 -471 57 -85 187 -219 247 -254 25 -15
|
||||
76 -34 112 -43 87 -22 163 -7 246 46 120 78 195 211 234 411 l23 124 14 -55
|
||||
c63 -263 172 -511 326 -741 94 -142 229 -291 313 -348 272 -185 583 -197 750
|
||||
-30 66 67 84 109 89 215 4 90 4 91 -51 230 -108 276 -137 477 -122 868 l7 196
|
||||
77 0 c55 0 118 -11 229 -39 l154 -38 50 -84 c103 -172 221 -427 277 -599 38
|
||||
-120 70 -274 86 -412 8 -75 21 -155 29 -178 37 -106 117 -199 220 -253 51 -26
|
||||
202 -35 283 -17 83 18 193 97 268 192 157 199 256 485 286 825 11 122 6 524
|
||||
-7 583 -5 24 -1 26 62 43 64 16 67 16 80 0 39 -50 109 -215 149 -351 25 -85
|
||||
55 -174 67 -199 73 -156 261 -206 441 -117 65 32 110 70 159 135 128 169 178
|
||||
414 157 764 -8 143 -38 350 -55 376 -2 4 7 25 22 46 77 112 168 344 200 504
|
||||
l16 86 87 28 c188 60 391 170 498 269 132 122 183 230 183 383 0 71 -5 98 -24
|
||||
138 -24 52 -82 112 -138 141 -52 28 -205 30 -378 5 -80 -11 -179 -23 -220 -27
|
||||
l-75 -6 -29 56 c-33 65 -137 182 -211 236 -75 55 -156 94 -382 181 -110 43
|
||||
-221 87 -245 100 -54 27 -92 69 -125 138 -25 52 -26 59 -20 180 4 69 16 200
|
||||
26 291 52 430 53 809 5 1170 -54 405 -249 740 -569 979 -136 102 -297 190
|
||||
-419 231 l-36 12 0 433 c0 433 0 434 -25 512 -52 167 -171 292 -341 360 l-69
|
||||
28 -4215 2 c-2318 0 -4231 -3 -4251 -7z m8363 -1476 c417 -53 735 -193 962
|
||||
-423 98 -98 155 -175 210 -282 84 -160 117 -292 141 -559 28 -313 17 -684 -30
|
||||
-1025 -9 -60 -18 -164 -22 -230 -10 -208 22 -314 136 -452 76 -91 124 -118
|
||||
391 -218 307 -116 377 -155 450 -249 23 -31 41 -58 39 -60 -2 -2 -47 8 -99 21
|
||||
-131 35 -268 36 -360 3 -132 -47 -248 -116 -364 -218 -163 -143 -516 -488
|
||||
-703 -687 -350 -372 -504 -514 -701 -644 -348 -231 -878 -408 -1322 -442 -409
|
||||
-31 -796 45 -1059 208 -111 69 -249 210 -292 298 -32 65 -34 76 -33 165 1 104
|
||||
23 178 85 287 75 131 137 194 430 441 181 152 251 295 250 511 -1 152 -16 223
|
||||
-117 560 -35 117 -61 217 -58 222 3 5 20 9 38 9 55 0 217 31 261 50 53 23 103
|
||||
73 132 131 43 88 56 187 59 437 2 266 -1 258 91 292 108 40 254 21 330 -45 35
|
||||
-30 35 -32 53 -170 41 -311 106 -484 206 -546 48 -29 168 -48 381 -59 188 -10
|
||||
432 -1 548 20 76 14 206 56 266 86 64 32 122 101 144 170 15 49 17 82 12 253
|
||||
-5 198 -27 398 -52 482 -42 146 -125 221 -290 265 -57 15 -108 19 -268 19
|
||||
l-197 0 0 45 c0 120 -37 255 -82 300 -76 77 -210 5 -291 -157 -31 -60 -67
|
||||
-184 -67 -229 0 -27 -6 -34 -41 -50 -65 -29 -159 -98 -195 -144 -34 -43 -67
|
||||
-119 -79 -181 l-6 -35 -57 28 c-114 57 -270 58 -379 2 -61 -31 -70 -21 -49 54
|
||||
33 118 16 442 -29 536 -38 79 -114 84 -188 12 -68 -66 -136 -230 -137 -330 l0
|
||||
-29 -61 7 c-34 3 -93 6 -131 6 l-69 0 6 48 c14 97 56 282 84 368 155 475 486
|
||||
821 963 1008 108 42 308 94 430 110 62 9 124 17 138 20 76 11 479 5 592 -10z
|
||||
m-7029 -78 c18 -8 261 -243 569 -552 582 -584 560 -559 543 -651 -6 -33 -69
|
||||
-101 -523 -557 -553 -554 -564 -564 -644 -551 -89 15 -151 110 -128 198 10 37
|
||||
65 95 463 495 l452 452 -472 473 c-414 414 -472 477 -478 510 -25 132 98 235
|
||||
218 183z m7169 -1405 c164 -57 201 -136 234 -502 37 -414 9 -486 -212 -558
|
||||
-155 -50 -298 -64 -579 -57 -249 6 -398 23 -439 50 -95 62 -177 346 -180 621
|
||||
-1 135 0 142 28 203 50 109 148 179 304 218 149 37 329 53 567 50 191 -2 216
|
||||
-4 277 -25z m-2002 -174 c95 -34 118 -52 152 -114 52 -94 63 -159 62 -368 -1
|
||||
-358 -44 -479 -187 -520 -146 -42 -612 -65 -727 -36 -153 38 -196 98 -226 316
|
||||
-16 120 -31 487 -21 527 9 35 89 121 140 151 99 58 228 76 522 73 200 -2 214
|
||||
-3 285 -29z m-1604 -443 c45 -33 67 -70 71 -121 5 -59 -25 -117 -77 -147 -35
|
||||
-21 -47 -21 -980 -24 -520 -2 -964 0 -988 3 -57 8 -116 60 -130 115 -19 75 12
|
||||
146 78 182 34 17 75 18 1017 16 974 -3 982 -3 1009 -24z m5329 -2140 c66 -7
|
||||
173 -14 237 -14 103 0 146 5 247 26 24 5 24 5 18 -64 -15 -159 -89 -371 -180
|
||||
-515 l-43 -68 -57 113 c-72 145 -160 261 -318 422 l-126 128 51 -7 c28 -3 105
|
||||
-13 171 -21z m-812 -652 c53 -41 140 -115 193 -165 96 -91 224 -231 224 -245
|
||||
0 -5 -30 -18 -67 -30 -79 -25 -305 -84 -308 -80 -1 2 -12 53 -24 113 -28 135
|
||||
-70 268 -127 402 -24 57 -44 106 -44 109 0 9 43 -20 153 -104z m-1173 -560
|
||||
c-9 -4 -271 61 -315 78 -29 11 -28 12 79 55 59 24 111 46 114 49 3 3 33 -36
|
||||
67 -87 34 -50 59 -93 55 -95z"/>
|
||||
</g>
|
||||
</svg>
|
||||
<span class="text-lg md:text-2xl font-light ml-2 lg:ml-4 font-mono tracking-tighter">Spectre.Console</span>
|
||||
</a>
|
||||
<div class="ml-auto">
|
||||
<ul class="flex flex-row">
|
||||
<li>
|
||||
<button aria-label="Toggle Dark Mode" class="mr-4 dark:text-yellow-300 stroke-1 opacity-80" onclick="swapTheme()">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" class="h-6 w-6" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9.663 17h4.673M12 3v1m6.364 1.636l-.707.707M21 12h-1M4 12H3m3.343-5.657l-.707-.707m2.828 9.9a5 5 0 117.072 0l-.548.547A3.374 3.374 0 0014 18.469V19a2 2 0 11-4 0v-.531c0-.895-.356-1.754-.988-2.386l-.548-.547z"/>
|
||||
</svg>
|
||||
</button>
|
||||
</li>
|
||||
<li>
|
||||
<a class="flex flex-row items-center text-rose-700 dark:text-rose-500" href="https://github.com/sponsors/patriksvensson">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" class="h-6 w-6 mr-1" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
||||
<title>Sponsor</title>
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4.318 6.318a4.5 4.5 0 000 6.364L12 20.364l7.682-7.682a4.5 4.5 0 00-6.364-6.364L12 7.636l-1.318-1.318a4.5 4.5 0 00-6.364 0z"/>
|
||||
</svg>
|
||||
<span class="hidden sm:block">Sponsor</span>
|
||||
</a>
|
||||
</li>
|
||||
<li class="ml-4">
|
||||
<a class="flex flex-row items-center text-gray-600 fill-slate-200 stroke-slate-800 fill-slate-900 dark:stroke-slate-500 dark:fill-slate-300 dark:text-slate-300" href="https://github.com/spectreconsole/spectre.console">
|
||||
<svg role="img" class="h-6 w-6 mr-1" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
|
||||
<title>GitHub icon</title>
|
||||
<path d="M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12"/>
|
||||
</svg>
|
||||
<span class="hidden sm:block">GitHub</span>
|
||||
</a>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
</nav>
|
||||
</header>
|
||||
<main class="container mx-auto pt-8 w-full">
|
||||
<div class="flex flex-col-reverse lg:flex-row">
|
||||
<nav class="flex-none font-light text-sm xl:text-base sm:mr-16 mt-8 pt-6 lg:mt-0 lg:pt-0 lg:pb-10 border-t border-gray-300 lg:border-t-0">
|
||||
@{
|
||||
var sidebar = Context.GetSidebar();
|
||||
var root = sidebar.Node;
|
||||
<div class="text-xl @(Document.IdEquals(root) ? "font-bold" : null)">
|
||||
@if (sidebar.ShowLink)
|
||||
{
|
||||
@Html.DocumentLink(root)
|
||||
}
|
||||
else
|
||||
{
|
||||
@sidebar.Title;
|
||||
}
|
||||
</div>
|
||||
|
||||
@foreach (var sidebarItem in sidebar.Leafs)
|
||||
{
|
||||
var document = sidebarItem.Node;
|
||||
if (string.IsNullOrWhiteSpace(sidebarItem.Title))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
var documentChildren = sidebarItem.Leafs;
|
||||
<div class="text-teal-800 font-medium dark:text-teal-400 mt-4">
|
||||
@if (sidebarItem.ShowLink)
|
||||
{
|
||||
@Html.DocumentLink(document)
|
||||
}
|
||||
else
|
||||
{
|
||||
@sidebarItem.Title;
|
||||
}
|
||||
</div>
|
||||
|
||||
@if (documentChildren.Any())
|
||||
{
|
||||
<div class="ml-2 flex flex-row flex-wrap lg:flex-col border-separate">
|
||||
@foreach (var childItem in documentChildren)
|
||||
{
|
||||
var child = childItem.Node;
|
||||
<div class="mt-2 mr-4 @(Document.IdEquals(child) ? "font-bold" : null)">
|
||||
@Html.DocumentLink(child)
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
}
|
||||
}
|
||||
}
|
||||
</nav>
|
||||
<article class="flex-1 min-w-0">
|
||||
<header class="text-slate-900 dark:text-slate-50 mb-4">
|
||||
@RenderSection("header", required: false)
|
||||
@if (!IsSectionDefined("header"))
|
||||
{
|
||||
<h1 class="text-2xl md:text-4xl font-extrabold">@(Document.GetString(Keys.Title) ?? Document.GetTitle())</h1>
|
||||
}
|
||||
|
||||
@RenderSection("subheading", required: false)
|
||||
</header>
|
||||
<div class="prose prose-sm md:prose-base prose-slate dark:prose-invert max-w-full font-light lg:leading-loose">
|
||||
@RenderBody()
|
||||
|
||||
@{
|
||||
var referenceLinks = Model.GetList<string>(Constants.ApiReference);
|
||||
if (referenceLinks != null)
|
||||
{
|
||||
<h3>References</h3>
|
||||
<ul>
|
||||
@foreach (var link in referenceLinks)
|
||||
{
|
||||
if (Context.TryGetXrefDocument(link, out var refDoc, out string error))
|
||||
{
|
||||
<li>
|
||||
@{
|
||||
var kind = refDoc.GetString(CodeAnalysisKeys.SpecificKind);
|
||||
var prefix = string.Empty;
|
||||
var containingType = @refDoc.GetDocument(CodeAnalysisKeys.ContainingType);
|
||||
if (containingType != null)
|
||||
{
|
||||
prefix = containingType.GetString(CodeAnalysisKeys.DisplayName) + ".";
|
||||
}
|
||||
}
|
||||
|
||||
@if (!string.IsNullOrWhiteSpace(prefix)){ <span class="text-slate-600 dark:text-slate-400">@prefix</span>}@Html.DocumentLink(refDoc, refDoc.GetString(CodeAnalysisKeys.DisplayName) ?? refDoc.GetTitle()) <span class="ml-4 uppercase text-xs text-slate-700 dark:text-slate-400">@kind</span>
|
||||
</li>
|
||||
}
|
||||
else
|
||||
{
|
||||
Context.LogWarning(Model, $"Error finding xref for {link} - {error}");
|
||||
}
|
||||
}
|
||||
</ul>
|
||||
}
|
||||
}
|
||||
</div>
|
||||
</article>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<footer class="py-4 md:py-8 mt-8 bg-gray-100 dark:bg-slate-800 text-sm border-t border-gray-200 dark:border-slate-700">
|
||||
<div class="container">
|
||||
<div class="flex flex-row">
|
||||
<span>© @DateTime.Today.Year Patrik Svensson, Phil Scott, Nils Andresen</span>
|
||||
<span class="ml-auto">Powered by <a href="https://www.netlify.com/">Netlify</a></span>
|
||||
<span class="ml-auto">Supported by the <a href="https://dotnetfoundation.org">.NET Foundation</a></span>
|
||||
<span class="ml-auto">@VersionUtilities.GetVersion()</span>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
|
||||
<script>
|
||||
// adapted from https://www.w3schools.com/howto/howto_js_filter_table.asp
|
||||
function search(input, searchTarget, columnIndex) {
|
||||
// Declare variables
|
||||
var filter, table, tr, td, i, txtValue;
|
||||
filter = input.value.toUpperCase();
|
||||
table = document.getElementById(searchTarget);
|
||||
tr = table.getElementsByTagName("tr");
|
||||
|
||||
// Loop through all table rows, and hide those who don't match the search query
|
||||
for (i = 0; i < tr.length; i++) {
|
||||
td = tr[i].getElementsByTagName("td")[columnIndex];
|
||||
if (td) {
|
||||
txtValue = td.textContent || td.innerText;
|
||||
if (txtValue.toUpperCase().indexOf(filter) > -1) {
|
||||
tr[i].style.display = "";
|
||||
} else {
|
||||
tr[i].style.display = "none";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.23.0/prism.min.js" integrity="sha512-YBk7HhgDZvBxmtOfUdvX0z8IH2d10Hp3aEygaMNhtF8fSOvBZ16D/1bXZTJV6ndk/L/DlXxYStP8jrF77v2MIg==" crossorigin="anonymous"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.23.0/plugins/autoloader/prism-autoloader.min.js" integrity="sha512-zc7WDnCM3aom2EziyDIRAtQg1mVXLdILE09Bo+aE1xk0AM2c2cVLfSW9NrxE5tKTX44WBY0Z2HClZ05ur9vB6A==" crossorigin="anonymous"></script>
|
||||
<script src="@Context.GetLink("/assets/asciinema-player.js")"></script>
|
||||
<script>
|
||||
document.querySelectorAll('asciinema-player').forEach(cast => {
|
||||
AsciinemaPlayer.create(cast.attributes['src'].value, cast, {autoplay: true, fit: 'none', fontSize: 'inherit'});
|
||||
});
|
||||
</script>
|
||||
|
||||
<script>
|
||||
function swapTheme(){
|
||||
if (document.documentElement.classList.contains('dark')) {
|
||||
document.documentElement.classList.remove('dark');
|
||||
localStorage.theme = 'light';
|
||||
} else {
|
||||
document.documentElement.classList.add('dark');
|
||||
localStorage.theme = 'dark';
|
||||
}
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
38
docs/input/analyzer/rules/RULE_TEMPLATE.md
Normal file
38
docs/input/analyzer/rules/RULE_TEMPLATE.md
Normal file
@ -0,0 +1,38 @@
|
||||
---
|
||||
Title: SpectreXxxx
|
||||
Description: Rule title
|
||||
Category: Usage
|
||||
Severity: Hidden, Info, Warning, or Error
|
||||
Excluded: true
|
||||
---
|
||||
|
||||
## Cause
|
||||
|
||||
A concise-as-possible description of when this rule is violated. If there's a lot to explain, begin with "A violation of this rule occurs when..."
|
||||
|
||||
## Reason for rule
|
||||
|
||||
Explain why the user should care about the violation.
|
||||
|
||||
## How to fix violations
|
||||
|
||||
To fix a violation of this rule, [describe how to fix a violation].
|
||||
|
||||
## Examples
|
||||
|
||||
### Violates
|
||||
|
||||
Example(s) of code that violates the rule.
|
||||
|
||||
### Does not violate
|
||||
|
||||
Example(s) of code that does not violate the rule.
|
||||
|
||||
## How to suppress violations
|
||||
|
||||
**If the severity of your analyzer isn't _Warning_, delete this section.**
|
||||
|
||||
```csharp
|
||||
#pragma warning disable Spectre1000 // <Rule name>
|
||||
#pragma warning restore Spectre1000 // <Rule name>
|
||||
```
|
56
docs/input/analyzer/rules/Spectre1021.md
Normal file
56
docs/input/analyzer/rules/Spectre1021.md
Normal file
@ -0,0 +1,56 @@
|
||||
---
|
||||
Title: Spectre1021
|
||||
Description: Avoid prompting for input while a current renderable is running.
|
||||
Category: Usage
|
||||
Severity: Warning
|
||||
---
|
||||
|
||||
## Cause
|
||||
|
||||
A violation of this rule occurs when an AnsiConsole prompt is called within the context of an executing renderable e.g. `Progress`, `Status` and `Live`. Concurrent LiveRenderable are not supported and will cause issues when running simultaneously.
|
||||
|
||||
## Reason for rule
|
||||
|
||||
When LiveRenderable such as `Progress`, `Status` or `Live` are running they expect to be running exclusively. They rely on ANSI sequences to draw and keep the console experience consistent. Prompts also rely on ANSI sequences for their drawing. Simultaneous running can result in corrupt output.
|
||||
|
||||
## How to fix violations
|
||||
|
||||
Redesign logic to allow one LiveRenderable to complete before using a prompt or prompt before starting the operation.
|
||||
|
||||
## Examples
|
||||
|
||||
### Violates
|
||||
|
||||
```csharp
|
||||
AnsiConsole.Progress().Start(ctx =>
|
||||
{
|
||||
// code to update progress bar
|
||||
var answer = AnsiConsole.Confirm("Continue?");
|
||||
});
|
||||
```
|
||||
|
||||
### Does not violate
|
||||
|
||||
```csharp
|
||||
AnsiConsole.Progress().Start(ctx =>
|
||||
{
|
||||
// code to update progress bar
|
||||
|
||||
// persist state to restart progress after asking question
|
||||
});
|
||||
|
||||
var answer = AnsiConsole.Confirm("Continue?");
|
||||
|
||||
AnsiConsole.Progress().Start(ctx =>
|
||||
{
|
||||
// apply persisted state
|
||||
// code to update progress bar
|
||||
```
|
||||
|
||||
## How to suppress violations
|
||||
|
||||
```csharp
|
||||
#pragma warning disable Spectre1021 // <Rule name>
|
||||
|
||||
#pragma warning restore Spectre1021 // <Rule name>
|
||||
```
|
3
docs/input/analyzer/rules/_ViewStart.cshtml
Normal file
3
docs/input/analyzer/rules/_ViewStart.cshtml
Normal file
@ -0,0 +1,3 @@
|
||||
@{
|
||||
Layout = @"_layout.cshtml";
|
||||
}
|
10
docs/input/analyzer/rules/_layout.cshtml
Normal file
10
docs/input/analyzer/rules/_layout.cshtml
Normal file
@ -0,0 +1,10 @@
|
||||
@inherits StatiqRazorPage<IDocument>
|
||||
|
||||
@{
|
||||
Layout = @"../../_layout.cshtml";
|
||||
}
|
||||
|
||||
|
||||
<p>@Document.GetString("Description")</p>
|
||||
|
||||
@RenderBody()
|
31
docs/input/analyzer/rules/index.cshtml
Normal file
31
docs/input/analyzer/rules/index.cshtml
Normal file
@ -0,0 +1,31 @@
|
||||
Title: Roslyn Analyzers
|
||||
Order: 20
|
||||
---
|
||||
|
||||
<code>Spectre.Console.Analyzer</code> provides analyzers for common mistakes when using Spectre.Console. It can be installed via nuget
|
||||
|
||||
<pre><code>nuget install Spectre.Console.Analyzer</code></pre>
|
||||
|
||||
<h2>Supported Analyzers</h2>
|
||||
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Analyzer</th>
|
||||
<th>Description</th>
|
||||
<th>Category</th>
|
||||
<th>Severity</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@foreach (IDocument child in OutputPages.GetChildrenOf(Document))
|
||||
{
|
||||
<tr>
|
||||
<td>@Html.DocumentLink(child)</td>
|
||||
<td>@child.GetString("Description")</td>
|
||||
<td>@child.GetString("Category") </td>
|
||||
<td>@child.GetString("Severity") </td>
|
||||
</tr>
|
||||
}
|
||||
</tbody>
|
||||
</table>
|
27
docs/input/analyzer/rules/spectre1000.md
Normal file
27
docs/input/analyzer/rules/spectre1000.md
Normal file
@ -0,0 +1,27 @@
|
||||
---
|
||||
Title: Spectre1000
|
||||
Description: Use AnsiConsole instead of System.Console
|
||||
Category: Usage
|
||||
Severity: Warning
|
||||
---
|
||||
|
||||
## Cause
|
||||
|
||||
A violation of this rule occurs when `System.Console` is used for common methods exposed by Spectre.Console.
|
||||
|
||||
## Reason for rule
|
||||
|
||||
Methods implemented in Spectre.Console should be used over direct access to `System.Console` to allow for enhancements and
|
||||
features to be enabled.
|
||||
|
||||
## How to fix violations
|
||||
|
||||
To fix a violation of this rule, change from `System.Console` to `Spectre.Console.AnsiConsole`.
|
||||
|
||||
## How to suppress violations
|
||||
|
||||
```csharp
|
||||
#pragma warning disable Spectre1000 // Use AnsiConsole instead of System.Console
|
||||
|
||||
#pragma warning restore Spectre1000 // Use AnsiConsole instead of System.Console
|
||||
```
|
63
docs/input/analyzer/rules/spectre1010.md
Normal file
63
docs/input/analyzer/rules/spectre1010.md
Normal file
@ -0,0 +1,63 @@
|
||||
---
|
||||
Title: Spectre1010
|
||||
Description: Favor the use of the instance of AnsiConsole over the static helper
|
||||
Category: Usage
|
||||
Severity: Info
|
||||
---
|
||||
|
||||
## Cause
|
||||
|
||||
A violation of this rule occurs when the static helper `AnsiConsole` is used when a field or method parameter of type
|
||||
`IAnsiConsole` is available.
|
||||
|
||||
## Reason for rule
|
||||
|
||||
Use of `IAnsiConsole` improves testability of the code, and also allows upstream callers the ability to customize the console
|
||||
capabilities and features. When a field variable or parameter is available it should be used to ensure the code takes advantage
|
||||
of that configuration.
|
||||
|
||||
## How to fix violations
|
||||
|
||||
To fix a violation of this rule, change from `AnsiConsole` to the name of the local instance.
|
||||
|
||||
## Examples
|
||||
|
||||
### Violates
|
||||
|
||||
```csharp
|
||||
class Example
|
||||
{
|
||||
private IAnsiConsole _ansiConsole;
|
||||
|
||||
public Example(IAnsiConsole ansiConsole)
|
||||
{
|
||||
_ansiConsole = ansiConsole;
|
||||
}
|
||||
|
||||
public Run()
|
||||
{
|
||||
AnsiConsole.WriteLine("Running...");
|
||||
}
|
||||
|
||||
}
|
||||
```
|
||||
|
||||
### Does not violate
|
||||
|
||||
```csharp
|
||||
class Example
|
||||
{
|
||||
private IAnsiConsole _ansiConsole;
|
||||
|
||||
public Example(IAnsiConsole ansiConsole)
|
||||
{
|
||||
_ansiConsole = ansiConsole;
|
||||
}
|
||||
|
||||
public Run()
|
||||
{
|
||||
_ansiConsole.WriteLine("Running...");
|
||||
}
|
||||
|
||||
}
|
||||
```
|
46
docs/input/analyzer/rules/spectre1020.md
Normal file
46
docs/input/analyzer/rules/spectre1020.md
Normal file
@ -0,0 +1,46 @@
|
||||
---
|
||||
Title: Spectre1020
|
||||
Description: Avoid calling other live renderables while a current renderable is running.
|
||||
Category: Usage
|
||||
Severity: Warning
|
||||
---
|
||||
|
||||
## Cause
|
||||
|
||||
A violation of this rule occurs when a child LiveRenderable i.e. `Progress`, `Status` and `Live` are called within the context of an executing renderable. Concurrent LiveRenderable are not supported and will cause issues when running simultaneously.
|
||||
|
||||
## Reason for rule
|
||||
|
||||
When LiveRenderable such as `Progress`, `Status` or `Live` are running they expect to be running exclusively. They rely on ANSI sequences to draw and keep the console experience consistent. With simultaneous calls both renderables compete with the console causing concurrent writes corrupting the output.
|
||||
|
||||
## How to fix violations
|
||||
|
||||
Redesign logic to allow one LiveRenderable to complete before starting a second renderable.
|
||||
|
||||
## Examples
|
||||
|
||||
### Violates
|
||||
|
||||
```csharp
|
||||
AnsiConsole.Progress().Start(ctx => {
|
||||
AnsiConsole.Status().Start("Running status too...", statusCtx => {});
|
||||
});
|
||||
```
|
||||
|
||||
### Does not violate
|
||||
|
||||
```csharp
|
||||
AnsiConsole.Progress().Start(ctx => {
|
||||
// run progress and complete tasks
|
||||
});
|
||||
|
||||
AnsiConsole.Status().Start("Running status afterwards...", statusCtx => {});
|
||||
```
|
||||
|
||||
## How to suppress violations
|
||||
|
||||
```csharp
|
||||
#pragma warning disable Spectre1020 // <Rule name>
|
||||
|
||||
#pragma warning restore Spectre1020 // <Rule name>
|
||||
```
|
19
docs/input/api/Kind/_Assembly.cshtml
Normal file
19
docs/input/api/Kind/_Assembly.cshtml
Normal file
@ -0,0 +1,19 @@
|
||||
@using Statiq.CodeAnalysis
|
||||
@using Docs.Pipelines
|
||||
@using Docs.Extensions
|
||||
@foreach (IGrouping<string, IDocument> typeGroup
|
||||
in Outputs.FromPipeline(nameof(Api))
|
||||
.Where(x => x.GetBool(CodeAnalysisKeys.IsResult)
|
||||
&& x.GetString(CodeAnalysisKeys.Kind) == "NamedType"
|
||||
&& Document.IdEquals(x.GetDocument(CodeAnalysisKeys.ContainingAssembly)))
|
||||
.GroupBy(x => x.GetString(CodeAnalysisKeys.SpecificKind))
|
||||
.OrderBy(x => x.Key))
|
||||
{
|
||||
<h2>@typeGroup.Key</h2>
|
||||
@foreach (var type in typeGroup)
|
||||
{
|
||||
<ul>
|
||||
<li>@Context.GetTypeLink(type)</li>
|
||||
</ul>
|
||||
}
|
||||
}
|
4
docs/input/api/Kind/_Event.cshtml
Normal file
4
docs/input/api/Kind/_Event.cshtml
Normal file
@ -0,0 +1,4 @@
|
||||
@await Html.PartialAsync("../Sections/_Syntax.cshtml")
|
||||
@await Html.PartialAsync("../Sections/_Examples.cshtml")
|
||||
@await Html.PartialAsync("../Sections/_Remarks.cshtml")
|
||||
@await Html.PartialAsync("../Sections/_SeeAlso.cshtml")
|
9
docs/input/api/Kind/_Field.cshtml
Normal file
9
docs/input/api/Kind/_Field.cshtml
Normal file
@ -0,0 +1,9 @@
|
||||
@await Html.PartialAsync("../Sections/_Summary.cshtml")
|
||||
@await Html.PartialAsync("../Sections/_Syntax.cshtml")
|
||||
@await Html.PartialAsync("../Sections/_SymbolInfo.cshtml")
|
||||
@await Html.PartialAsync("../Sections/_Examples.cshtml")
|
||||
@await Html.PartialAsync("../Sections/_Remarks.cshtml")
|
||||
@await Html.PartialAsync("../Sections/_Attributes.cshtml")
|
||||
@await Html.PartialAsync("../Sections/_Parameters.cshtml")
|
||||
@await Html.PartialAsync("../Sections/_Value.cshtml")
|
||||
@await Html.PartialAsync("../Sections/_SeeAlso.cshtml")
|
10
docs/input/api/Kind/_Method.cshtml
Normal file
10
docs/input/api/Kind/_Method.cshtml
Normal file
@ -0,0 +1,10 @@
|
||||
@await Html.PartialAsync("../Sections/_Summary.cshtml")
|
||||
@await Html.PartialAsync("../Sections/_Syntax.cshtml")
|
||||
@await Html.PartialAsync("../Sections/_SymbolInfo.cshtml")
|
||||
@await Html.PartialAsync("../Sections/_Examples.cshtml")
|
||||
@await Html.PartialAsync("../Sections/_Remarks.cshtml")
|
||||
@await Html.PartialAsync("../Sections/_Attributes.cshtml")
|
||||
@await Html.PartialAsync("../Sections/_TypeParameters.cshtml")
|
||||
@await Html.PartialAsync("../Sections/_Parameters.cshtml")
|
||||
@await Html.PartialAsync("../Sections/_ReturnValue.cshtml")
|
||||
@await Html.PartialAsync("../Sections/_SeeAlso.cshtml")
|
15
docs/input/api/Kind/_NamedType.cshtml
Normal file
15
docs/input/api/Kind/_NamedType.cshtml
Normal file
@ -0,0 +1,15 @@
|
||||
@await Html.PartialAsync("../Sections/_Summary.cshtml")
|
||||
@await Html.PartialAsync("../Sections/_Syntax.cshtml")
|
||||
@await Html.PartialAsync("../Sections/_SymbolInfo.cshtml")
|
||||
@await Html.PartialAsync("../Sections/_Examples.cshtml")
|
||||
@await Html.PartialAsync("../Sections/_Remarks.cshtml")
|
||||
@await Html.PartialAsync("../Sections/_Attributes.cshtml")
|
||||
@await Html.PartialAsync("../Sections/_TypeParameters.cshtml")
|
||||
@await Html.PartialAsync("../Sections/_Constructors.cshtml")
|
||||
@await Html.PartialAsync("../Sections/_Events.cshtml")
|
||||
@await Html.PartialAsync("../Sections/_Fields.cshtml")
|
||||
@await Html.PartialAsync("../Sections/_Properties.cshtml")
|
||||
@await Html.PartialAsync("../Sections/_Methods.cshtml")
|
||||
@await Html.PartialAsync("../Sections/_ExtensionMethods.cshtml")
|
||||
@await Html.PartialAsync("../Sections/_Operators.cshtml")
|
||||
@await Html.PartialAsync("../Sections/_SeeAlso.cshtml")
|
25
docs/input/api/Kind/_Namespace.cshtml
Normal file
25
docs/input/api/Kind/_Namespace.cshtml
Normal file
@ -0,0 +1,25 @@
|
||||
@using Statiq.CodeAnalysis
|
||||
@using Docs.Extensions
|
||||
@await Html.PartialAsync("../Sections/_Summary.cshtml")
|
||||
@{
|
||||
foreach (IGrouping<string, IDocument> typeGroup
|
||||
in Document.GetDocuments(CodeAnalysisKeys.MemberTypes)
|
||||
.Where(x => x.GetBool(CodeAnalysisKeys.IsResult) && x.GetString(CodeAnalysisKeys.Kind) == "NamedType")
|
||||
.GroupBy(x => x.GetString(CodeAnalysisKeys.SpecificKind)))
|
||||
{
|
||||
<h3>@typeGroup.Key</h3>
|
||||
<div class="doc-summary short-term">
|
||||
<div>
|
||||
<dl>
|
||||
@foreach (var type in typeGroup.OrderBy(x => x.GetString(CodeAnalysisKeys.DisplayName)).ToList())
|
||||
{
|
||||
<div>
|
||||
<dt>@Context.GetTypeLink(type)</dt>
|
||||
<dd>@Html.Raw(type.GetString(CodeAnalysisKeys.Summary))</dd>
|
||||
</div>
|
||||
}
|
||||
</dl>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
}
|
9
docs/input/api/Kind/_Property.cshtml
Normal file
9
docs/input/api/Kind/_Property.cshtml
Normal file
@ -0,0 +1,9 @@
|
||||
@await Html.PartialAsync("../Sections/_Summary.cshtml")
|
||||
@await Html.PartialAsync("../Sections/_Syntax.cshtml")
|
||||
@await Html.PartialAsync("../Sections/_SymbolInfo.cshtml")
|
||||
@await Html.PartialAsync("../Sections/_Examples.cshtml")
|
||||
@await Html.PartialAsync("../Sections/_Remarks.cshtml")
|
||||
@await Html.PartialAsync("../Sections/_Attributes.cshtml")
|
||||
@await Html.PartialAsync("../Sections/_Parameters.cshtml")
|
||||
@await Html.PartialAsync("../Sections/_Value.cshtml")
|
||||
@await Html.PartialAsync("../Sections/_SeeAlso.cshtml")
|
26
docs/input/api/Sections/_Attributes.cshtml
Normal file
26
docs/input/api/Sections/_Attributes.cshtml
Normal file
@ -0,0 +1,26 @@
|
||||
@using Statiq.CodeAnalysis
|
||||
@using Docs.Extensions
|
||||
@{
|
||||
IReadOnlyList<IDocument> attributes = Document.GetDocumentList(CodeAnalysisKeys.Attributes);
|
||||
if (attributes?.Count > 0)
|
||||
{
|
||||
<h3>Attributes</h3>
|
||||
<div class="doc-summary">
|
||||
<div>
|
||||
<dl>
|
||||
@foreach (var attribute in attributes)
|
||||
{
|
||||
var type = attribute.GetDocument(CodeAnalysisKeys.Type);
|
||||
|
||||
<div>
|
||||
<dt>
|
||||
@Context.GetTypeLink(type)
|
||||
</dt>
|
||||
<dd>@Html.Raw(type.GetString(CodeAnalysisKeys.Summary))</dd>
|
||||
</div>
|
||||
}
|
||||
</dl>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
}
|
22
docs/input/api/Sections/_ConstantValue.cshtml
Normal file
22
docs/input/api/Sections/_ConstantValue.cshtml
Normal file
@ -0,0 +1,22 @@
|
||||
@using Statiq.CodeAnalysis
|
||||
@using Microsoft.AspNetCore.Html
|
||||
@if(Document.GetBool(CodeAnalysisKeys.HasConstantValue))
|
||||
{
|
||||
var constantValue = Document.Get(CodeAnalysisKeys.ConstantValue);
|
||||
|
||||
<h3>Constant Value</h3>
|
||||
<div class="doc-summary">
|
||||
<div>
|
||||
<dl>
|
||||
|
||||
<div>
|
||||
|
||||
<dt>
|
||||
@(new HtmlString(constantValue?.ToString() ?? "null"))
|
||||
</dt>
|
||||
<dd>@(new HtmlString(constantValue?.GetType().Name ?? string.Empty))</dd>
|
||||
</div>
|
||||
</dl>
|
||||
</div>
|
||||
</div>
|
||||
}
|
6
docs/input/api/Sections/_ConstantValue.cshtml.cs
Normal file
6
docs/input/api/Sections/_ConstantValue.cshtml.cs
Normal file
@ -0,0 +1,6 @@
|
||||
namespace Docs.input.api.Sections;
|
||||
|
||||
public class _ConstantValue_cshtml
|
||||
{
|
||||
|
||||
}
|
29
docs/input/api/Sections/_Constructors.cshtml
Normal file
29
docs/input/api/Sections/_Constructors.cshtml
Normal file
@ -0,0 +1,29 @@
|
||||
@using Statiq.CodeAnalysis
|
||||
@using Docs.Extensions
|
||||
|
||||
@{
|
||||
var constructors = Document.GetDocumentList(CodeAnalysisKeys.Constructors)
|
||||
?.Where(x => x.GetBool(CodeAnalysisKeys.IsResult))
|
||||
.OrderBy(x => x.GetString(CodeAnalysisKeys.DisplayName))
|
||||
.ToList();
|
||||
|
||||
if (constructors?.Count > 0)
|
||||
{
|
||||
<h3>Constructors</h3>
|
||||
<div class="doc-summary">
|
||||
<div>
|
||||
<dl>
|
||||
@foreach (var constructor in constructors)
|
||||
{
|
||||
<div>
|
||||
<dt>
|
||||
@constructor.GetModifiers() @Context.GetTypeLink(constructor, false)
|
||||
</dt>
|
||||
<dd>@Html.Raw(constructor.GetString(CodeAnalysisKeys.Summary))</dd>
|
||||
</div>
|
||||
}
|
||||
</dl>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
}
|
0
docs/input/api/Sections/_DocumentList.cshtml
Normal file
0
docs/input/api/Sections/_DocumentList.cshtml
Normal file
0
docs/input/api/Sections/_Events.cshtml
Normal file
0
docs/input/api/Sections/_Events.cshtml
Normal file
9
docs/input/api/Sections/_Examples.cshtml
Normal file
9
docs/input/api/Sections/_Examples.cshtml
Normal file
@ -0,0 +1,9 @@
|
||||
@using Statiq.CodeAnalysis
|
||||
@{
|
||||
var examples = Document.GetString(CodeAnalysisKeys.Example);
|
||||
if (!examples.IsNullOrWhiteSpace())
|
||||
{
|
||||
<h3>Examples</h3>
|
||||
<div>@Html.Raw(examples)</div>
|
||||
}
|
||||
}
|
40
docs/input/api/Sections/_ExtensionMethods.cshtml
Normal file
40
docs/input/api/Sections/_ExtensionMethods.cshtml
Normal file
@ -0,0 +1,40 @@
|
||||
@using Statiq.CodeAnalysis
|
||||
@using Docs.Extensions
|
||||
@using Microsoft.CodeAnalysis
|
||||
|
||||
@{
|
||||
var modelSymbol = Document.Get<ITypeSymbol>(CodeAnalysisKeys.Symbol);
|
||||
IReadOnlyList<IDocument> methods = Document.GetDocumentList(CodeAnalysisKeys.ExtensionMethods)
|
||||
?.Where(x => x.GetBool(CodeAnalysisKeys.IsResult))
|
||||
.OrderBy(x => x.GetString(CodeAnalysisKeys.DisplayName))
|
||||
.ToList();
|
||||
|
||||
if (methods?.Count > 0)
|
||||
{
|
||||
<h3>Extension Methods</h3>
|
||||
<div class="doc-summary">
|
||||
<div>
|
||||
<dl>
|
||||
@foreach (var method in methods)
|
||||
{
|
||||
ISymbol reducedSymbol = method.Get<IMethodSymbol>(CodeAnalysisKeys.Symbol)?.ReduceExtensionMethod(modelSymbol);
|
||||
string reducedName = reducedSymbol?.ToDisplayString(new SymbolDisplayFormat(
|
||||
typeQualificationStyle: SymbolDisplayTypeQualificationStyle.NameAndContainingTypes,
|
||||
genericsOptions: SymbolDisplayGenericsOptions.IncludeTypeParameters,
|
||||
parameterOptions: SymbolDisplayParameterOptions.IncludeType,
|
||||
memberOptions: SymbolDisplayMemberOptions.IncludeParameters,
|
||||
miscellaneousOptions: SymbolDisplayMiscellaneousOptions.UseSpecialTypes));
|
||||
|
||||
<div>
|
||||
<dt>
|
||||
@method.GetModifiers(skipStatic:true) @method.GetDocument(CodeAnalysisKeys.ReturnType).GetString(CodeAnalysisKeys.DisplayName) @Context.GetTypeLink(method,reducedName, false)
|
||||
</dt>
|
||||
<dd>@Html.Raw(method.GetString(CodeAnalysisKeys.Summary))</dd>
|
||||
</div>
|
||||
}
|
||||
|
||||
</dl>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
}
|
59
docs/input/api/Sections/_Fields.cshtml
Normal file
59
docs/input/api/Sections/_Fields.cshtml
Normal file
@ -0,0 +1,59 @@
|
||||
@using Statiq.CodeAnalysis
|
||||
@using Microsoft.AspNetCore.Html
|
||||
@using Docs.Extensions
|
||||
@{
|
||||
var isEnum = Document.GetString(CodeAnalysisKeys.SpecificKind) == "Enum";
|
||||
IReadOnlyList<IDocument> fields;
|
||||
if (isEnum)
|
||||
{
|
||||
fields = Document.GetDocumentList(CodeAnalysisKeys.Members)?.Where(x => x.GetBool(CodeAnalysisKeys.IsResult) && x.GetString(CodeAnalysisKeys.Kind) == "Field")
|
||||
.OrderBy(x => x.Get(CodeAnalysisKeys.ConstantValue) as int? ?? 0)
|
||||
.ToList();
|
||||
}
|
||||
else
|
||||
{
|
||||
fields = Document.GetDocumentList(CodeAnalysisKeys.Members)?.Where(x => x.GetBool(CodeAnalysisKeys.IsResult) && x.GetString(CodeAnalysisKeys.Kind) == "Field")
|
||||
.OrderBy(x => x.GetString(CodeAnalysisKeys.DisplayName))
|
||||
.ToList();
|
||||
}
|
||||
|
||||
|
||||
if (fields?.Count > 0)
|
||||
{
|
||||
<h3>Fields</h3>
|
||||
<div class="doc-summary">
|
||||
<div>
|
||||
<dl>
|
||||
@foreach (var field in fields)
|
||||
{
|
||||
<div>
|
||||
<dt>
|
||||
|
||||
<div class="flex flex-row">
|
||||
<div class="w-4/5">
|
||||
@if (isEnum)
|
||||
{
|
||||
@Context.GetTypeLink(field, false)
|
||||
}
|
||||
else
|
||||
{
|
||||
@field.GetModifiers() @Context.GetTypeLink(field.GetDocument(CodeAnalysisKeys.Type))
|
||||
@Context.GetTypeLink(field, false)
|
||||
}
|
||||
</div>
|
||||
<div>
|
||||
@(field.GetBool(CodeAnalysisKeys.HasConstantValue) ? new HtmlString(field.Get(CodeAnalysisKeys.ConstantValue)?.ToString() ?? "null") : new HtmlString(string.Empty))
|
||||
</div>
|
||||
</div>
|
||||
</dt>
|
||||
<dd>
|
||||
@Html.Raw(field.GetString(CodeAnalysisKeys.Summary))
|
||||
</dd>
|
||||
</div>
|
||||
}
|
||||
</dl>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
}
|
||||
}
|
30
docs/input/api/Sections/_Methods.cshtml
Normal file
30
docs/input/api/Sections/_Methods.cshtml
Normal file
@ -0,0 +1,30 @@
|
||||
@using Statiq.CodeAnalysis
|
||||
@using Docs.Extensions
|
||||
|
||||
@{
|
||||
IReadOnlyList<IDocument> methods = Model.GetDocumentList(CodeAnalysisKeys.Members)
|
||||
?.Where(x => x.GetBool(CodeAnalysisKeys.IsResult) && x.GetString(CodeAnalysisKeys.Kind) == "Method")
|
||||
.OrderBy(x => x.GetString(CodeAnalysisKeys.DisplayName))
|
||||
.ToList();
|
||||
|
||||
if (methods?.Count > 0)
|
||||
{
|
||||
<h3>Methods</h3>
|
||||
<div class="doc-summary">
|
||||
<div>
|
||||
<dl>
|
||||
@foreach (var method in methods)
|
||||
{
|
||||
<div>
|
||||
<dt>
|
||||
@method.GetModifiers() @method.GetDocument(CodeAnalysisKeys.ReturnType).GetString(CodeAnalysisKeys.DisplayName) @Context.GetTypeLink(method, false)
|
||||
</dt>
|
||||
<dd>@Html.Raw(method.GetString(CodeAnalysisKeys.Summary))</dd>
|
||||
</div>
|
||||
}
|
||||
|
||||
</dl>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
}
|
0
docs/input/api/Sections/_Operators.cshtml
Normal file
0
docs/input/api/Sections/_Operators.cshtml
Normal file
25
docs/input/api/Sections/_Parameters.cshtml
Normal file
25
docs/input/api/Sections/_Parameters.cshtml
Normal file
@ -0,0 +1,25 @@
|
||||
@using Statiq.CodeAnalysis
|
||||
@using Docs.Extensions
|
||||
@{
|
||||
var parameters = Model.GetDocumentList(CodeAnalysisKeys.Parameters);
|
||||
var paramComments = Model.GetList<ReferenceComment>(CodeAnalysisKeys.Params);
|
||||
if (parameters?.Count > 0)
|
||||
{
|
||||
<h3>Parameters</h3>
|
||||
<div class="doc-summary">
|
||||
<div>
|
||||
<dl>
|
||||
@foreach (var parameter in parameters)
|
||||
{
|
||||
<div>
|
||||
<dt>
|
||||
@Context.GetTypeLink(parameter.GetDocument(CodeAnalysisKeys.Type)) <span class="identifier">@parameter.GetString(CodeAnalysisKeys.Name)</span>
|
||||
</dt>
|
||||
<dd>@Html.Raw(paramComments?.Where(x => x.Name.Equals(parameter.GetString(CodeAnalysisKeys.Name))).Select(x => x.Html).FirstOrDefault()) </dd>
|
||||
</div>
|
||||
}
|
||||
</dl>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
}
|
30
docs/input/api/Sections/_Properties.cshtml
Normal file
30
docs/input/api/Sections/_Properties.cshtml
Normal file
@ -0,0 +1,30 @@
|
||||
@using Statiq.CodeAnalysis
|
||||
@using Docs.Extensions
|
||||
@{
|
||||
IReadOnlyList<IDocument> properties = Model.GetDocumentList(CodeAnalysisKeys.Members)
|
||||
?.Where(x => x.GetBool(CodeAnalysisKeys.IsResult) && x.GetString(CodeAnalysisKeys.Kind) == "Property")
|
||||
.OrderBy(x => x.GetString(CodeAnalysisKeys.DisplayName))
|
||||
.ToList();
|
||||
|
||||
if (properties?.Count > 0)
|
||||
{
|
||||
<h3>Properties</h3>
|
||||
|
||||
<div class="doc-summary">
|
||||
|
||||
<div>
|
||||
<dl>
|
||||
@foreach (var property in properties)
|
||||
{
|
||||
<div>
|
||||
<dt>
|
||||
@property.GetModifiers() @property.GetDocument(CodeAnalysisKeys.Type).GetString(CodeAnalysisKeys.DisplayName) @Context.GetTypeLink(property, false)
|
||||
</dt>
|
||||
<dd>@Html.Raw(property.GetString(CodeAnalysisKeys.Summary))</dd>
|
||||
</div>
|
||||
}
|
||||
</dl>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
}
|
9
docs/input/api/Sections/_Remarks.cshtml
Normal file
9
docs/input/api/Sections/_Remarks.cshtml
Normal file
@ -0,0 +1,9 @@
|
||||
@using Statiq.CodeAnalysis
|
||||
@{
|
||||
var remarks = Document.GetString(CodeAnalysisKeys.Remarks);
|
||||
if (!remarks.IsNullOrWhiteSpace())
|
||||
{
|
||||
<h3>Remarks</h3>
|
||||
<div>@Html.Raw(remarks)</div>
|
||||
}
|
||||
}
|
23
docs/input/api/Sections/_ReturnValue.cshtml
Normal file
23
docs/input/api/Sections/_ReturnValue.cshtml
Normal file
@ -0,0 +1,23 @@
|
||||
@using Statiq.CodeAnalysis
|
||||
@using Docs.Extensions
|
||||
@{
|
||||
var returnType = Model.GetDocument(CodeAnalysisKeys.ReturnType);
|
||||
var returns = Model.GetString(CodeAnalysisKeys.Returns);
|
||||
if ((returnType != null && returnType.GetString(CodeAnalysisKeys.DisplayName) != "void") || !string.IsNullOrWhiteSpace(returns))
|
||||
{
|
||||
<h3>Returns</h3>
|
||||
<div class="doc-summary">
|
||||
<div>
|
||||
<dl>
|
||||
<div>
|
||||
|
||||
<dt>
|
||||
@Context.GetTypeLink(returnType, false)
|
||||
</dt>
|
||||
<dd></dd>
|
||||
</div>
|
||||
</dl>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
}
|
14
docs/input/api/Sections/_SeeAlso.cshtml
Normal file
14
docs/input/api/Sections/_SeeAlso.cshtml
Normal file
@ -0,0 +1,14 @@
|
||||
@using Statiq.CodeAnalysis
|
||||
@{
|
||||
var seeAlso = Document.GetList<string>(CodeAnalysisKeys.SeeAlso);
|
||||
if (seeAlso?.Count > 0)
|
||||
{
|
||||
<h3 id="SeeAlso">See Also</h3>
|
||||
<ul>
|
||||
@foreach (string seeAlsoComment in seeAlso)
|
||||
{
|
||||
<li>@Html.Raw(seeAlsoComment)</li>
|
||||
}
|
||||
</ul>
|
||||
}
|
||||
}
|
7
docs/input/api/Sections/_Summary.cshtml
Normal file
7
docs/input/api/Sections/_Summary.cshtml
Normal file
@ -0,0 +1,7 @@
|
||||
@{
|
||||
var summary = Document.GetString("Summary");
|
||||
if (!summary.IsNullOrWhiteSpace())
|
||||
{
|
||||
<div class="my-4 md:my-8">@Html.Raw(summary)</div>
|
||||
}
|
||||
}
|
131
docs/input/api/Sections/_SymbolInfo.cshtml
Normal file
131
docs/input/api/Sections/_SymbolInfo.cshtml
Normal file
@ -0,0 +1,131 @@
|
||||
@using Statiq.CodeAnalysis
|
||||
@using Docs.Extensions
|
||||
@{
|
||||
var containingAssembly = Document.GetDocument(CodeAnalysisKeys.ContainingAssembly);
|
||||
var containingNamespace = Document.GetDocument(CodeAnalysisKeys.ContainingNamespace);
|
||||
var containingType = Document.GetDocument(CodeAnalysisKeys.ContainingType);
|
||||
var type = Document.GetDocument(CodeAnalysisKeys.Type);
|
||||
var overridden = Document.GetDocument(CodeAnalysisKeys.Overridden);
|
||||
IReadOnlyList<IDocument> allInterfaces = Document.GetDocumentList(CodeAnalysisKeys.AllInterfaces);
|
||||
IReadOnlyList<IDocument> baseTypes = Document.GetDocumentList(CodeAnalysisKeys.BaseTypes)?
|
||||
.Where(i => !i.GetString(CodeAnalysisKeys.QualifiedName).Equals("System.Object"))
|
||||
.Reverse()
|
||||
.ToList();
|
||||
IReadOnlyList<IDocument> derivedTypes = Document.GetDocumentList(CodeAnalysisKeys.DerivedTypes);
|
||||
IReadOnlyList<IDocument> implementingTypes = Document.GetDocumentList(CodeAnalysisKeys.ImplementingTypes);
|
||||
if (containingAssembly is object
|
||||
|| containingNamespace is object
|
||||
|| allInterfaces?.Count > 0
|
||||
|| baseTypes?.Count > 0
|
||||
|| derivedTypes?.Count > 0
|
||||
|| implementingTypes?.Count > 0)
|
||||
{
|
||||
<div class="doc-summary tiny-term">
|
||||
<div>
|
||||
<dl>
|
||||
|
||||
@if (containingAssembly != null)
|
||||
{
|
||||
<div>
|
||||
<dt>Assembly</dt>
|
||||
<dd>containingAssembly</dd>
|
||||
</div>
|
||||
}
|
||||
|
||||
@if (containingNamespace != null)
|
||||
{
|
||||
<div>
|
||||
<dt>Namespace</dt>
|
||||
<dd>@Context.GetTypeLink(containingNamespace)</dd>
|
||||
</div>
|
||||
}
|
||||
|
||||
@if (containingType != null)
|
||||
{
|
||||
<div>
|
||||
<dt>Containing Type</dt>
|
||||
<dd>@Context.GetTypeLink(containingType)</dd>
|
||||
</div>
|
||||
}
|
||||
|
||||
@if (overridden != null)
|
||||
{
|
||||
<div>
|
||||
<dt>Overridden</dt>
|
||||
<dd>@Context.GetTypeLink(overridden)</dd>
|
||||
</div>
|
||||
}
|
||||
|
||||
@if (allInterfaces?.Count > 0)
|
||||
{
|
||||
<div>
|
||||
<dt>Interfaces</dt>
|
||||
<dd>
|
||||
<ul class="list-unstyled">
|
||||
@foreach (var interfaceDocument in allInterfaces)
|
||||
{
|
||||
<li>@Context.GetTypeLink(interfaceDocument)</li>
|
||||
}
|
||||
</ul>
|
||||
</dd>
|
||||
</div>
|
||||
}
|
||||
|
||||
@if (baseTypes?.Count > 0)
|
||||
{
|
||||
<div>
|
||||
<dt>Base Types</dt>
|
||||
<dd>
|
||||
<ul class="list-unstyled">
|
||||
@foreach (var baseType in baseTypes)
|
||||
{
|
||||
<li>@Context.GetTypeLink(baseType)</li>
|
||||
}
|
||||
</ul>
|
||||
</dd>
|
||||
</div>
|
||||
}
|
||||
|
||||
@if (derivedTypes?.Count > 0)
|
||||
{
|
||||
<div>
|
||||
<dt>Derived Types</dt>
|
||||
<dd>
|
||||
<ul class="list-unstyled">
|
||||
@foreach (var derivedType in derivedTypes)
|
||||
{
|
||||
<li>@Context.GetTypeLink(derivedType)</li>
|
||||
}
|
||||
</ul>
|
||||
</dd>
|
||||
</div>
|
||||
}
|
||||
|
||||
@if (implementingTypes?.Count > 0)
|
||||
|
||||
{
|
||||
<div>
|
||||
<dt>Implementing Types</dt>
|
||||
<dd>
|
||||
<ul class="list-unstyled">
|
||||
@foreach (var implementingType in implementingTypes)
|
||||
{
|
||||
<li>@Context.GetTypeLink(implementingType)</li>
|
||||
}
|
||||
</ul>
|
||||
</dd>
|
||||
</div>
|
||||
}
|
||||
|
||||
@if (type != null)
|
||||
{
|
||||
<div>
|
||||
<dt>@Document.GetString(CodeAnalysisKeys.Kind) Type</dt>
|
||||
<dd>@Context.GetTypeLink(type)</dd>
|
||||
</div>
|
||||
}
|
||||
</dl>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
}
|
8
docs/input/api/Sections/_Syntax.cshtml
Normal file
8
docs/input/api/Sections/_Syntax.cshtml
Normal file
@ -0,0 +1,8 @@
|
||||
@using Statiq.CodeAnalysis
|
||||
@{
|
||||
string syntax = Document.GetString(CodeAnalysisKeys.Syntax);
|
||||
if (!syntax.IsNullOrWhiteSpace())
|
||||
{
|
||||
<pre class="language-csharp"><code class="language-csharp">@syntax</code></pre>
|
||||
}
|
||||
}
|
26
docs/input/api/Sections/_TypeParameters.cshtml
Normal file
26
docs/input/api/Sections/_TypeParameters.cshtml
Normal file
@ -0,0 +1,26 @@
|
||||
@using Statiq.CodeAnalysis
|
||||
|
||||
@{
|
||||
var typeParameters = Model.GetDocumentList(CodeAnalysisKeys.TypeParameters);
|
||||
var typeParams = Model.GetList<ReferenceComment>(CodeAnalysisKeys.TypeParams);
|
||||
|
||||
if (typeParameters?.Count > 0)
|
||||
{
|
||||
<h3>Parameters</h3>
|
||||
<div class="doc-summary">
|
||||
<div>
|
||||
<dl>
|
||||
@foreach (var typeParam in typeParameters)
|
||||
{
|
||||
<div>
|
||||
<dt>
|
||||
<code>@typeParam.GetString(CodeAnalysisKeys.Name)</code>
|
||||
</dt>
|
||||
<dd>@Html.Raw(typeParams?.Where(x => x.Name.Equals(typeParam.GetString(CodeAnalysisKeys.Name))).Select(x => x.Html).FirstOrDefault()) </dd>
|
||||
</div>
|
||||
}
|
||||
</dl>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
}
|
12
docs/input/api/Sections/_Value.cshtml
Normal file
12
docs/input/api/Sections/_Value.cshtml
Normal file
@ -0,0 +1,12 @@
|
||||
@using Statiq.CodeAnalysis
|
||||
@using Docs.Extensions
|
||||
@{
|
||||
IDocument type = Document.GetDocument(CodeAnalysisKeys.Type);
|
||||
string value = Document.GetString(CodeAnalysisKeys.Value);
|
||||
}
|
||||
|
||||
@if (type is object && !string.IsNullOrWhiteSpace(value))
|
||||
{
|
||||
<p>@Context.GetTypeLink(type)</p>
|
||||
<p>@Html.Raw(value)</p>
|
||||
}
|
48
docs/input/api/_layout.cshtml
Normal file
48
docs/input/api/_layout.cshtml
Normal file
@ -0,0 +1,48 @@
|
||||
@using Statiq.CodeAnalysis
|
||||
@using Docs.Extensions
|
||||
@inherits StatiqRazorPage<IDocument>
|
||||
|
||||
@{
|
||||
Layout = @"../_layout.cshtml";
|
||||
}
|
||||
|
||||
@section header{
|
||||
<h1 class="text-2xl md:text-4xl align-baseline font-extrabold">
|
||||
@Document.GetString(CodeAnalysisKeys.DisplayName) <span class="text-lg md:text-2xl text-uppercase text-sky-600 dark:text-sky-400">@Document.GetString(CodeAnalysisKeys.SpecificKind)</span>
|
||||
</h1>
|
||||
|
||||
<nav class="flex mt-2" aria-label="Breadcrumb">
|
||||
<ol class="flex flex-col sm:flex-row sm:items-center space-x-2 lg:space-x-3">
|
||||
@{
|
||||
var isFirst = true;
|
||||
}
|
||||
@foreach (var parent in Context.GetExecutionCache("sidebar", ctx => ctx.OutputPages).GetAncestorsOf(Document, Document.IdEquals(Model)).Reverse().Skip(1))
|
||||
{
|
||||
<li>
|
||||
<div class="flex items-center">
|
||||
@if (isFirst)
|
||||
{
|
||||
isFirst = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
<svg class="flex-shrink-0 h-5 w-5 mr-2 lg:mr-3 text-slate-400 dark:text-slate-500" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true">
|
||||
<path fill-rule="evenodd" d="M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z" clip-rule="evenodd"/>
|
||||
</svg>
|
||||
}
|
||||
|
||||
<span class="font-light text-sm text-slate-600 dark:text-slate-300" >@Html.DocumentLink(parent, parent.GetString(WebKeys.Title, parent.GetTitle()))</span>
|
||||
</div>
|
||||
</li>
|
||||
}
|
||||
</ol>
|
||||
</nav>
|
||||
|
||||
|
||||
}
|
||||
|
||||
@await Html.PartialAsync($"Kind/_{Model.GetString(CodeAnalysisKeys.Kind)}.cshtml", Model)
|
||||
|
||||
@{
|
||||
IgnoreBody();
|
||||
}
|
11
docs/input/api/index.cshtml
Normal file
11
docs/input/api/index.cshtml
Normal file
@ -0,0 +1,11 @@
|
||||
Title: API Reference
|
||||
Order: 10000
|
||||
---
|
||||
<p>The Spectre.Console API reference is organized by namespace. Each namespace has one or more classes for working with Console applications.</p>
|
||||
|
||||
<ul>
|
||||
@foreach (var child in OutputPages.GetChildrenOf(Document).OrderBy(i => i.GetTitle()))
|
||||
{
|
||||
<li>@Html.DocumentLink(child)</li>
|
||||
}
|
||||
</ul>
|
39
docs/input/appendix/borders.md
Normal file
39
docs/input/appendix/borders.md
Normal file
@ -0,0 +1,39 @@
|
||||
Title: Borders
|
||||
Order: 2
|
||||
Description: "*Spectre.Console* makes it easy to create tables and panels with a variety of different styles of borders."
|
||||
Highlights:
|
||||
- Rounded
|
||||
- Square
|
||||
- Heavy
|
||||
- And more...
|
||||
---
|
||||
|
||||
There are different built-in borders you can use for tables and panels.
|
||||
|
||||
## Table borders
|
||||
|
||||

|
||||
|
||||
### Example
|
||||
|
||||
To set a table border to `SimpleHeavy`:
|
||||
|
||||
```csharp
|
||||
var table = new Table();
|
||||
table.Border = TableBorder.SimpleHeavy;
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Panel borders
|
||||
|
||||

|
||||
|
||||
### Example
|
||||
|
||||
To set a panel border to `Rounded`:
|
||||
|
||||
```csharp
|
||||
var panel = new Panel("Hello World");
|
||||
panel.Border = BoxBorder.Rounded;
|
||||
```
|
27
docs/input/appendix/colors.md
Normal file
27
docs/input/appendix/colors.md
Normal file
@ -0,0 +1,27 @@
|
||||
Title: Colors
|
||||
Order: 0
|
||||
Description: "*Spectre.Console* allows easy rendering of the standard ANSI colors of your terminal, and also supports rendering up to 24-bit colors depending on the capabilities of your terminal."
|
||||
Highlights:
|
||||
- Predefined common colors
|
||||
- Easy syntax for inline styling
|
||||
---
|
||||
|
||||
The following is a list of the standard 8-bit colors supported in terminals.
|
||||
|
||||
Note that the first 16 colors are generally defined by the system or your terminal software, and may not display exactly as rendered here.
|
||||
|
||||
## Usage
|
||||
|
||||
You can either use the colors in code, such as `new Style(foreground: Color.Maroon)` or
|
||||
in markup text such as `AnsiConsole.Markup("[maroon on blue]Hello[/]")`.
|
||||
|
||||
## Standard colors
|
||||
|
||||
<input
|
||||
id="colorSearch"
|
||||
type="search"
|
||||
oninput="search(this, 'color-results', 2)"
|
||||
placeholder="Search for colors.."
|
||||
title="Type in a color" />
|
||||
|
||||
<?# ColorTable /?>
|
70
docs/input/appendix/emojis.md
Normal file
70
docs/input/appendix/emojis.md
Normal file
@ -0,0 +1,70 @@
|
||||
Title: Emojis
|
||||
Order: 3
|
||||
Description: "For terminals that support Emojis, *Spectre.Console* supports a simple syntax for rendering emojis."
|
||||
Highlights:
|
||||
- ":rocket: becomes 🚀"
|
||||
- ":waning_gibbous_moon: becomes 🌖"
|
||||
---
|
||||
|
||||
Please note that what emojis that can be used is completely up to
|
||||
the operating system and/or terminal you're using, and no guarantees
|
||||
can be made of how it will look. Calculating the width of emojis
|
||||
is also not an exact science in many ways, so milage might vary when
|
||||
used in tables, panels or grids.
|
||||
|
||||
To ensure best compatibility, consider only using emojis introduced
|
||||
before Unicode 13.0 that belongs in the `Emoji_Presentation` category
|
||||
in the official emoji list at
|
||||
https://www.unicode.org/Public/UCD/latest/ucd/emoji/emoji-data.txt
|
||||
|
||||
## Usage
|
||||
|
||||
```csharp
|
||||
// Markup
|
||||
AnsiConsole.MarkupLine("Hello :globe_showing_europe_africa:!");
|
||||
|
||||
// Constant
|
||||
var hello = "Hello " + Emoji.Known.GlobeShowingEuropeAfrica;
|
||||
```
|
||||
|
||||
## Replacing emojis in text
|
||||
|
||||
```csharp
|
||||
var phrase = "Mmmm :birthday_cake:";
|
||||
var rendered = Emoji.Replace(phrase);
|
||||
```
|
||||
|
||||
## Remapping or adding an emoji
|
||||
|
||||
Sometimes you want to remap an existing emoji, or
|
||||
add a completely new one. For this you can use the
|
||||
`Emoji.Remap` method. This approach works both with
|
||||
markup strings and `Emoji.Replace`.
|
||||
|
||||
```csharp
|
||||
// Remap the emoji
|
||||
Emoji.Remap("globe_showing_europe_africa", "😄");
|
||||
|
||||
// Render markup
|
||||
AnsiConsole.MarkupLine("Hello :globe_showing_europe_africa:!");
|
||||
|
||||
// Replace emojis in string
|
||||
var phrase = "Hello :globe_showing_europe_africa:!";
|
||||
var rendered = Emoji.Replace(phrase);
|
||||
```
|
||||
|
||||
## Emojis
|
||||
|
||||
_The images in the table below might not render correctly in your
|
||||
browser for the same reasons mentioned in the `Compatibility` section._
|
||||
|
||||
|
||||
<input
|
||||
id="emojiSearch"
|
||||
type="search"
|
||||
oninput="search(this, 'emoji-results', 2)"
|
||||
placeholder="Search for emojis.."
|
||||
title="Type in an emoji name" />
|
||||
|
||||
|
||||
<?# EmojiTable /?>
|
11
docs/input/appendix/index.cshtml
Normal file
11
docs/input/appendix/index.cshtml
Normal file
@ -0,0 +1,11 @@
|
||||
Title: Appendix
|
||||
Order: 100
|
||||
---
|
||||
<h1>Sections</h1>
|
||||
|
||||
<ul>
|
||||
@foreach (IDocument child in OutputPages.GetChildrenOf(Document))
|
||||
{
|
||||
<li>@Html.DocumentLink(child)</li>
|
||||
}
|
||||
</ul>
|
47
docs/input/appendix/spinners.md
Normal file
47
docs/input/appendix/spinners.md
Normal file
@ -0,0 +1,47 @@
|
||||
Title: Spinners
|
||||
Order: 4
|
||||
Description: "*Spectre.Console* supports over 80 different types of spinners, and allows new ones to be defined. They are used automatically with the controls"
|
||||
Highlights:
|
||||
- Status display
|
||||
- Progress display
|
||||
---
|
||||
|
||||
For all available spinners, see https://jsfiddle.net/sindresorhus/2eLtsbey/embedded/result/
|
||||
|
||||
## Usage
|
||||
|
||||
Spinners can be used with [Progress](xref:live-progress) and [Status](xref:live-status).
|
||||
|
||||
```csharp
|
||||
AnsiConsole.Status()
|
||||
.Spinner(Spinner.Known.Star)
|
||||
.Start("Thinking...", ctx => {
|
||||
// Omitted
|
||||
});
|
||||
```
|
||||
|
||||
## Implementing a spinner
|
||||
|
||||
To implement your own spinner, all you have to do is
|
||||
inherit from the `Spinner` base class.
|
||||
|
||||
In the example below, the spinner will alternate between
|
||||
the characters `A`, `B` and `C` every 100 ms.
|
||||
|
||||
```csharp
|
||||
public sealed class MySpinner : Spinner
|
||||
{
|
||||
// The interval for each frame
|
||||
public override TimeSpan Interval => TimeSpan.FromMilliseconds(100);
|
||||
|
||||
// Whether or not the spinner contains unicode characters
|
||||
public override bool IsUnicode => false;
|
||||
|
||||
// The individual frames of the spinner
|
||||
public override IReadOnlyList<string> Frames =>
|
||||
new List<string>
|
||||
{
|
||||
"A", "B", "C",
|
||||
};
|
||||
}
|
||||
```
|
55
docs/input/appendix/styles.md
Normal file
55
docs/input/appendix/styles.md
Normal file
@ -0,0 +1,55 @@
|
||||
Title: Styles
|
||||
Order: 1
|
||||
Description: "*Spectre.Console* makes it easy to write text with different styles beyond colors. Depending on your terminal, it can make it easy to use styles such as"
|
||||
Highlights:
|
||||
- Bold, Italic, Underline, strikethrough
|
||||
- Dim, Invert
|
||||
- Conceal, slowblink, rapidblink
|
||||
- Links
|
||||
Xref: appendix-styles
|
||||
---
|
||||
|
||||
Note that what styles that can be used is defined by the system or your terminal software, and may not appear as they should.
|
||||
|
||||
<table class="table">
|
||||
<tr>
|
||||
<td><code>bold</code></td>
|
||||
<td>Bold text</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>dim</code></td>
|
||||
<td>Dim or faint text</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>italic</code></td>
|
||||
<td>Italic text</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>underline</code></td>
|
||||
<td>Underlined text</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>invert</code></td>
|
||||
<td>Swaps the foreground and background colors</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>conceal</code></td>
|
||||
<td>Hides the text</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>slowblink</code></td>
|
||||
<td>Makes text blink slowly</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>rapidblink</code></td>
|
||||
<td>Makes text blink</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>strikethrough</code></td>
|
||||
<td>Shows text with a horizontal line through the center</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>link</code></td>
|
||||
<td>Creates a clickable link within text</td>
|
||||
</tr>
|
||||
</table>
|
BIN
docs/input/assets/CascadiaMonoPL.woff2
Normal file
BIN
docs/input/assets/CascadiaMonoPL.woff2
Normal file
Binary file not shown.
3
docs/input/assets/casts/bar-chart-plain.cast
Normal file
3
docs/input/assets/casts/bar-chart-plain.cast
Normal file
@ -0,0 +1,3 @@
|
||||
{"version": 2, "width": 84, "height": 5, "title": "bar-chart (plain)", "env": {"TERM": "Spectre.Console"}}
|
||||
[0, "o", " \u001B[1;4;32mNumber of fruits\u001B[0m \r\n Apple \u001B[37m\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 12\u001B[0m\u001B[37m \u001B[0m\r\nOrange \u001B[32m\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 54\u001B[0m\r\nBanana \u001B[31m\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 33\u001B[0m\u001B[37m \u001B[0m\r\n"]
|
||||
|
3
docs/input/assets/casts/bar-chart-rich.cast
Normal file
3
docs/input/assets/casts/bar-chart-rich.cast
Normal file
@ -0,0 +1,3 @@
|
||||
{"version": 2, "width": 84, "height": 5, "title": "bar-chart (rich)", "env": {"TERM": "Spectre.Console"}}
|
||||
[0, "o", " \u001B[1;4;38;5;2mNumber of fruits\u001B[0m \r\n Apple \u001B[38;5;11m\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 12\u001B[0m\u001B[38;5;8m \u001B[0m\r\nOrange \u001B[38;5;2m\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 54\u001B[0m\r\nBanana \u001B[38;5;9m\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 33\u001B[0m\u001B[38;5;8m \u001B[0m\r\n"]
|
||||
|
3
docs/input/assets/casts/breakdown-chart-plain.cast
Normal file
3
docs/input/assets/casts/breakdown-chart-plain.cast
Normal file
@ -0,0 +1,3 @@
|
||||
{"version": 2, "width": 84, "height": 5, "title": "breakdown-chart (plain)", "env": {"TERM": "Spectre.Console"}}
|
||||
[0, "o", "\u001B[31m\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u001B[0m\u001B[34m\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u001B[0m\u001B[32m\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u001B[0m\u001B[37m\u2588\u2588\u001B[0m\u001B[37m\u2588\u2588\u001B[0m\r\n\u001B[31m\u25A0\u001B[0m SCSS \u001B[37m80\u001B[0m \u001B[34m\u25A0\u001B[0m HTML \u001B[37m28.3\u001B[0m \u001B[32m\u25A0\u001B[0m C# \u001B[37m22.6\u001B[0m \u001B[37m\u25A0\u001B[0m JavaScript \u001B[37m6\u001B[0m \r\n\u001B[37m\u25A0\u001B[0m Ruby \u001B[37m6\u001B[0m \u001B[36m\u25A0\u001B[0m Shell \u001B[37m0.1\u001B[0m \r\n"]
|
||||
|
3
docs/input/assets/casts/breakdown-chart-rich.cast
Normal file
3
docs/input/assets/casts/breakdown-chart-rich.cast
Normal file
@ -0,0 +1,3 @@
|
||||
{"version": 2, "width": 84, "height": 5, "title": "breakdown-chart (rich)", "env": {"TERM": "Spectre.Console"}}
|
||||
[0, "o", "\u001B[38;5;9m\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u001B[0m\u001B[38;5;12m\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u001B[0m\u001B[38;5;2m\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u001B[0m\u001B[38;5;11m\u2588\u2588\u001B[0m\u001B[38;5;119m\u2588\u2588\u001B[0m\r\n\u001B[38;5;9m\u25A0\u001B[0m SCSS \u001B[38;5;8m80\u001B[0m \u001B[38;5;12m\u25A0\u001B[0m HTML \u001B[38;5;8m28.3\u001B[0m \u001B[38;5;2m\u25A0\u001B[0m C# \u001B[38;5;8m22.6\u001B[0m \u001B[38;5;11m\u25A0\u001B[0m JavaScript \u001B[38;5;8m6\u001B[0m \r\n\u001B[38;5;119m\u25A0\u001B[0m Ruby \u001B[38;5;8m6\u001B[0m \u001B[38;5;14m\u25A0\u001B[0m Shell \u001B[38;5;8m0.1\u001B[0m \r\n"]
|
||||
|
3
docs/input/assets/casts/calendar-culture-plain.cast
Normal file
3
docs/input/assets/casts/calendar-culture-plain.cast
Normal file
@ -0,0 +1,3 @@
|
||||
{"version": 2, "width": 84, "height": 12, "title": "calendar-culture (plain)", "env": {"TERM": "Spectre.Console"}}
|
||||
[0, "o", " \u001B[37mOktober 2020\u001B[0m \r\n\u250C\u2500\u2500\u2500\u2500\u2500\u252C\u2500\u2500\u2500\u2500\u2500\u252C\u2500\u2500\u2500\u2500\u2500\u252C\u2500\u2500\u2500\u2500\u2500\u252C\u2500\u2500\u2500\u2500\u2500\u252C\u2500\u2500\u2500\u2500\u2500\u252C\u2500\u2500\u2500\u2500\u2500\u2510\r\n\u2502 M\u00E5n \u2502 Tis \u2502 Ons \u2502 Tor \u2502 Fre \u2502 L\u00F6r \u2502 S\u00F6n \u2502\r\n\u251C\u2500\u2500\u2500\u2500\u2500\u253C\u2500\u2500\u2500\u2500\u2500\u253C\u2500\u2500\u2500\u2500\u2500\u253C\u2500\u2500\u2500\u2500\u2500\u253C\u2500\u2500\u2500\u2500\u2500\u253C\u2500\u2500\u2500\u2500\u2500\u253C\u2500\u2500\u2500\u2500\u2500\u2524\r\n\u2502 \u2502 \u2502 \u2502 1 \u2502 2 \u2502 3 \u2502 4 \u2502\r\n\u2502 5 \u2502 6 \u2502 7 \u2502 8 \u2502 9 \u2502 10 \u2502 11 \u2502\r\n\u2502 12 \u2502 13 \u2502 14 \u2502 15 \u2502 16 \u2502 17 \u2502 18 \u2502\r\n\u2502 19 \u2502 20 \u2502 21 \u2502 22 \u2502 23 \u2502 24 \u2502 25 \u2502\r\n\u2502 26 \u2502 27 \u2502 28 \u2502 29 \u2502 30 \u2502 31 \u2502 \u2502\r\n\u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502\r\n\u2514\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2518\r\n"]
|
||||
|
3
docs/input/assets/casts/calendar-culture-rich.cast
Normal file
3
docs/input/assets/casts/calendar-culture-rich.cast
Normal file
@ -0,0 +1,3 @@
|
||||
{"version": 2, "width": 84, "height": 12, "title": "calendar-culture (rich)", "env": {"TERM": "Spectre.Console"}}
|
||||
[0, "o", " \u001B[38;5;7mOktober 2020\u001B[0m \r\n\u250C\u2500\u2500\u2500\u2500\u2500\u252C\u2500\u2500\u2500\u2500\u2500\u252C\u2500\u2500\u2500\u2500\u2500\u252C\u2500\u2500\u2500\u2500\u2500\u252C\u2500\u2500\u2500\u2500\u2500\u252C\u2500\u2500\u2500\u2500\u2500\u252C\u2500\u2500\u2500\u2500\u2500\u2510\r\n\u2502 M\u00E5n \u2502 Tis \u2502 Ons \u2502 Tor \u2502 Fre \u2502 L\u00F6r \u2502 S\u00F6n \u2502\r\n\u251C\u2500\u2500\u2500\u2500\u2500\u253C\u2500\u2500\u2500\u2500\u2500\u253C\u2500\u2500\u2500\u2500\u2500\u253C\u2500\u2500\u2500\u2500\u2500\u253C\u2500\u2500\u2500\u2500\u2500\u253C\u2500\u2500\u2500\u2500\u2500\u253C\u2500\u2500\u2500\u2500\u2500\u2524\r\n\u2502 \u2502 \u2502 \u2502 1 \u2502 2 \u2502 3 \u2502 4 \u2502\r\n\u2502 5 \u2502 6 \u2502 7 \u2502 8 \u2502 9 \u2502 10 \u2502 11 \u2502\r\n\u2502 12 \u2502 13 \u2502 14 \u2502 15 \u2502 16 \u2502 17 \u2502 18 \u2502\r\n\u2502 19 \u2502 20 \u2502 21 \u2502 22 \u2502 23 \u2502 24 \u2502 25 \u2502\r\n\u2502 26 \u2502 27 \u2502 28 \u2502 29 \u2502 30 \u2502 31 \u2502 \u2502\r\n\u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502\r\n\u2514\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2518\r\n"]
|
||||
|
3
docs/input/assets/casts/calendar-header-plain.cast
Normal file
3
docs/input/assets/casts/calendar-header-plain.cast
Normal file
@ -0,0 +1,3 @@
|
||||
{"version": 2, "width": 84, "height": 12, "title": "calendar-header (plain)", "env": {"TERM": "Spectre.Console"}}
|
||||
[0, "o", " \u001B[1;34m2020 October\u001B[0m \r\n\u250C\u2500\u2500\u2500\u2500\u2500\u252C\u2500\u2500\u2500\u2500\u2500\u252C\u2500\u2500\u2500\u2500\u2500\u252C\u2500\u2500\u2500\u2500\u2500\u252C\u2500\u2500\u2500\u2500\u2500\u252C\u2500\u2500\u2500\u2500\u2500\u252C\u2500\u2500\u2500\u2500\u2500\u2510\r\n\u2502 Sun \u2502 Mon \u2502 Tue \u2502 Wed \u2502 Thu \u2502 Fri \u2502 Sat \u2502\r\n\u251C\u2500\u2500\u2500\u2500\u2500\u253C\u2500\u2500\u2500\u2500\u2500\u253C\u2500\u2500\u2500\u2500\u2500\u253C\u2500\u2500\u2500\u2500\u2500\u253C\u2500\u2500\u2500\u2500\u2500\u253C\u2500\u2500\u2500\u2500\u2500\u253C\u2500\u2500\u2500\u2500\u2500\u2524\r\n\u2502 \u2502 \u2502 \u2502 \u2502 1 \u2502 2 \u2502 3 \u2502\r\n\u2502 4 \u2502 5 \u2502 6 \u2502 7 \u2502 8 \u2502 9 \u2502 10 \u2502\r\n\u2502 11 \u2502 12 \u2502 13 \u2502 14 \u2502 15 \u2502 16 \u2502 17 \u2502\r\n\u2502 18 \u2502 19 \u2502 20 \u2502 21 \u2502 22 \u2502 23 \u2502 24 \u2502\r\n\u2502 25 \u2502 26 \u2502 27 \u2502 28 \u2502 29 \u2502 30 \u2502 31 \u2502\r\n\u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502\r\n\u2514\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2518\r\n"]
|
||||
|
3
docs/input/assets/casts/calendar-header-rich.cast
Normal file
3
docs/input/assets/casts/calendar-header-rich.cast
Normal file
@ -0,0 +1,3 @@
|
||||
{"version": 2, "width": 84, "height": 12, "title": "calendar-header (rich)", "env": {"TERM": "Spectre.Console"}}
|
||||
[0, "o", " \u001B[1;38;5;12m2020 October\u001B[0m \r\n\u250C\u2500\u2500\u2500\u2500\u2500\u252C\u2500\u2500\u2500\u2500\u2500\u252C\u2500\u2500\u2500\u2500\u2500\u252C\u2500\u2500\u2500\u2500\u2500\u252C\u2500\u2500\u2500\u2500\u2500\u252C\u2500\u2500\u2500\u2500\u2500\u252C\u2500\u2500\u2500\u2500\u2500\u2510\r\n\u2502 Sun \u2502 Mon \u2502 Tue \u2502 Wed \u2502 Thu \u2502 Fri \u2502 Sat \u2502\r\n\u251C\u2500\u2500\u2500\u2500\u2500\u253C\u2500\u2500\u2500\u2500\u2500\u253C\u2500\u2500\u2500\u2500\u2500\u253C\u2500\u2500\u2500\u2500\u2500\u253C\u2500\u2500\u2500\u2500\u2500\u253C\u2500\u2500\u2500\u2500\u2500\u253C\u2500\u2500\u2500\u2500\u2500\u2524\r\n\u2502 \u2502 \u2502 \u2502 \u2502 1 \u2502 2 \u2502 3 \u2502\r\n\u2502 4 \u2502 5 \u2502 6 \u2502 7 \u2502 8 \u2502 9 \u2502 10 \u2502\r\n\u2502 11 \u2502 12 \u2502 13 \u2502 14 \u2502 15 \u2502 16 \u2502 17 \u2502\r\n\u2502 18 \u2502 19 \u2502 20 \u2502 21 \u2502 22 \u2502 23 \u2502 24 \u2502\r\n\u2502 25 \u2502 26 \u2502 27 \u2502 28 \u2502 29 \u2502 30 \u2502 31 \u2502\r\n\u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502\r\n\u2514\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2518\r\n"]
|
||||
|
3
docs/input/assets/casts/calendar-highlight-plain.cast
Normal file
3
docs/input/assets/casts/calendar-highlight-plain.cast
Normal file
@ -0,0 +1,3 @@
|
||||
{"version": 2, "width": 84, "height": 12, "title": "calendar-highlight (plain)", "env": {"TERM": "Spectre.Console"}}
|
||||
[0, "o", " \u001B[37m2020 October\u001B[0m \r\n\u250C\u2500\u2500\u2500\u2500\u2500\u252C\u2500\u2500\u2500\u2500\u2500\u252C\u2500\u2500\u2500\u2500\u2500\u252C\u2500\u2500\u2500\u2500\u2500\u252C\u2500\u2500\u2500\u2500\u2500\u252C\u2500\u2500\u2500\u2500\u2500\u252C\u2500\u2500\u2500\u2500\u2500\u2510\r\n\u2502 Sun \u2502 Mon \u2502 Tue \u2502 Wed \u2502 Thu \u2502 Fri \u2502 Sat \u2502\r\n\u251C\u2500\u2500\u2500\u2500\u2500\u253C\u2500\u2500\u2500\u2500\u2500\u253C\u2500\u2500\u2500\u2500\u2500\u253C\u2500\u2500\u2500\u2500\u2500\u253C\u2500\u2500\u2500\u2500\u2500\u253C\u2500\u2500\u2500\u2500\u2500\u253C\u2500\u2500\u2500\u2500\u2500\u2524\r\n\u2502 \u2502 \u2502 \u2502 \u2502 1 \u2502 2 \u2502 3 \u2502\r\n\u2502 4 \u2502 5 \u2502 6 \u2502 7 \u2502 8 \u2502 9 \u2502 10 \u2502\r\n\u2502 \u001B[1;37m11*\u001B[0m \u2502 12 \u2502 13 \u2502 14 \u2502 15 \u2502 16 \u2502 17 \u2502\r\n\u2502 18 \u2502 19 \u2502 20 \u2502 21 \u2502 22 \u2502 23 \u2502 24 \u2502\r\n\u2502 25 \u2502 26 \u2502 27 \u2502 28 \u2502 29 \u2502 30 \u2502 31 \u2502\r\n\u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502\r\n\u2514\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2518\r\n"]
|
||||
|
3
docs/input/assets/casts/calendar-highlight-rich.cast
Normal file
3
docs/input/assets/casts/calendar-highlight-rich.cast
Normal file
@ -0,0 +1,3 @@
|
||||
{"version": 2, "width": 84, "height": 12, "title": "calendar-highlight (rich)", "env": {"TERM": "Spectre.Console"}}
|
||||
[0, "o", " \u001B[38;5;7m2020 October\u001B[0m \r\n\u250C\u2500\u2500\u2500\u2500\u2500\u252C\u2500\u2500\u2500\u2500\u2500\u252C\u2500\u2500\u2500\u2500\u2500\u252C\u2500\u2500\u2500\u2500\u2500\u252C\u2500\u2500\u2500\u2500\u2500\u252C\u2500\u2500\u2500\u2500\u2500\u252C\u2500\u2500\u2500\u2500\u2500\u2510\r\n\u2502 Sun \u2502 Mon \u2502 Tue \u2502 Wed \u2502 Thu \u2502 Fri \u2502 Sat \u2502\r\n\u251C\u2500\u2500\u2500\u2500\u2500\u253C\u2500\u2500\u2500\u2500\u2500\u253C\u2500\u2500\u2500\u2500\u2500\u253C\u2500\u2500\u2500\u2500\u2500\u253C\u2500\u2500\u2500\u2500\u2500\u253C\u2500\u2500\u2500\u2500\u2500\u253C\u2500\u2500\u2500\u2500\u2500\u2524\r\n\u2502 \u2502 \u2502 \u2502 \u2502 1 \u2502 2 \u2502 3 \u2502\r\n\u2502 4 \u2502 5 \u2502 6 \u2502 7 \u2502 8 \u2502 9 \u2502 10 \u2502\r\n\u2502 \u001B[1;38;5;11m11*\u001B[0m \u2502 12 \u2502 13 \u2502 14 \u2502 15 \u2502 16 \u2502 17 \u2502\r\n\u2502 18 \u2502 19 \u2502 20 \u2502 21 \u2502 22 \u2502 23 \u2502 24 \u2502\r\n\u2502 25 \u2502 26 \u2502 27 \u2502 28 \u2502 29 \u2502 30 \u2502 31 \u2502\r\n\u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502\r\n\u2514\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2518\r\n"]
|
||||
|
3
docs/input/assets/casts/calendar-plain.cast
Normal file
3
docs/input/assets/casts/calendar-plain.cast
Normal file
@ -0,0 +1,3 @@
|
||||
{"version": 2, "width": 84, "height": 12, "title": "calendar (plain)", "env": {"TERM": "Spectre.Console"}}
|
||||
[0, "o", " \u001B[37m2020 October\u001B[0m \r\n\u250C\u2500\u2500\u2500\u2500\u2500\u252C\u2500\u2500\u2500\u2500\u2500\u252C\u2500\u2500\u2500\u2500\u2500\u252C\u2500\u2500\u2500\u2500\u2500\u252C\u2500\u2500\u2500\u2500\u2500\u252C\u2500\u2500\u2500\u2500\u2500\u252C\u2500\u2500\u2500\u2500\u2500\u2510\r\n\u2502 Sun \u2502 Mon \u2502 Tue \u2502 Wed \u2502 Thu \u2502 Fri \u2502 Sat \u2502\r\n\u251C\u2500\u2500\u2500\u2500\u2500\u253C\u2500\u2500\u2500\u2500\u2500\u253C\u2500\u2500\u2500\u2500\u2500\u253C\u2500\u2500\u2500\u2500\u2500\u253C\u2500\u2500\u2500\u2500\u2500\u253C\u2500\u2500\u2500\u2500\u2500\u253C\u2500\u2500\u2500\u2500\u2500\u2524\r\n\u2502 \u2502 \u2502 \u2502 \u2502 1 \u2502 2 \u2502 3 \u2502\r\n\u2502 4 \u2502 5 \u2502 6 \u2502 7 \u2502 8 \u2502 9 \u2502 10 \u2502\r\n\u2502 11 \u2502 12 \u2502 13 \u2502 14 \u2502 15 \u2502 16 \u2502 17 \u2502\r\n\u2502 18 \u2502 19 \u2502 20 \u2502 21 \u2502 22 \u2502 23 \u2502 24 \u2502\r\n\u2502 25 \u2502 26 \u2502 27 \u2502 28 \u2502 29 \u2502 30 \u2502 31 \u2502\r\n\u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502\r\n\u2514\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2518\r\n"]
|
||||
|
3
docs/input/assets/casts/calendar-rich.cast
Normal file
3
docs/input/assets/casts/calendar-rich.cast
Normal file
@ -0,0 +1,3 @@
|
||||
{"version": 2, "width": 84, "height": 12, "title": "calendar (rich)", "env": {"TERM": "Spectre.Console"}}
|
||||
[0, "o", " \u001B[38;5;7m2020 October\u001B[0m \r\n\u250C\u2500\u2500\u2500\u2500\u2500\u252C\u2500\u2500\u2500\u2500\u2500\u252C\u2500\u2500\u2500\u2500\u2500\u252C\u2500\u2500\u2500\u2500\u2500\u252C\u2500\u2500\u2500\u2500\u2500\u252C\u2500\u2500\u2500\u2500\u2500\u252C\u2500\u2500\u2500\u2500\u2500\u2510\r\n\u2502 Sun \u2502 Mon \u2502 Tue \u2502 Wed \u2502 Thu \u2502 Fri \u2502 Sat \u2502\r\n\u251C\u2500\u2500\u2500\u2500\u2500\u253C\u2500\u2500\u2500\u2500\u2500\u253C\u2500\u2500\u2500\u2500\u2500\u253C\u2500\u2500\u2500\u2500\u2500\u253C\u2500\u2500\u2500\u2500\u2500\u253C\u2500\u2500\u2500\u2500\u2500\u253C\u2500\u2500\u2500\u2500\u2500\u2524\r\n\u2502 \u2502 \u2502 \u2502 \u2502 1 \u2502 2 \u2502 3 \u2502\r\n\u2502 4 \u2502 5 \u2502 6 \u2502 7 \u2502 8 \u2502 9 \u2502 10 \u2502\r\n\u2502 11 \u2502 12 \u2502 13 \u2502 14 \u2502 15 \u2502 16 \u2502 17 \u2502\r\n\u2502 18 \u2502 19 \u2502 20 \u2502 21 \u2502 22 \u2502 23 \u2502 24 \u2502\r\n\u2502 25 \u2502 26 \u2502 27 \u2502 28 \u2502 29 \u2502 30 \u2502 31 \u2502\r\n\u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502 \u2502\r\n\u2514\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2518\r\n"]
|
||||
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
3
docs/input/assets/casts/canvas-image-plain.cast
Normal file
3
docs/input/assets/casts/canvas-image-plain.cast
Normal file
@ -0,0 +1,3 @@
|
||||
{"version": 2, "width": 84, "height": 24, "title": "canvas-image (plain)", "env": {"TERM": "Spectre.Console"}}
|
||||
[0, "o", " \u001B[41m \u001B[0m\u001B[41m \u001B[0m\u001B[40m \u001B[0m\u001B[41m \u001B[0m\u001B[41m \u001B[0m \r\n \u001B[41m \u001B[0m\u001B[43m \u001B[0m\u001B[41m \u001B[0m\u001B[41m \u001B[0m\u001B[43m \u001B[0m\u001B[41m \u001B[0m\u001B[40m \u001B[0m \r\n \u001B[41m \u001B[0m\u001B[43m \u001B[0m\u001B[43m \u001B[0m\u001B[43m \u001B[0m\u001B[43m \u001B[0m\u001B[43m \u001B[0m\u001B[43m \u001B[0m\u001B[41m \u001B[0m\u001B[40m \u001B[0m \r\n \u001B[41m \u001B[0m\u001B[43m \u001B[0m\u001B[43m \u001B[0m\u001B[43m \u001B[0m\u001B[43m \u001B[0m\u001B[43m \u001B[0m\u001B[43m \u001B[0m\u001B[47m \u001B[0m\u001B[47m \u001B[0m\u001B[41m \u001B[0m \r\n \u001B[43m \u001B[0m\u001B[47m \u001B[0m\u001B[43m \u001B[0m\u001B[43m \u001B[0m\u001B[43m \u001B[0m\u001B[43m \u001B[0m\u001B[43m \u001B[0m\u001B[43m \u001B[0m\u001B[47m \u001B[0m\u001B[47m \u001B[0m\u001B[47m \u001B[0m\u001B[40m \u001B[0m \r\n \u001B[40m \u001B[0m\u001B[43m \u001B[0m\u001B[47m \u001B[0m\u001B[47m \u001B[0m\u001B[47m \u001B[0m\u001B[47m \u001B[0m\u001B[43m \u001B[0m\u001B[43m \u001B[0m\u001B[43m \u001B[0m\u001B[47m \u001B[0m\u001B[47m \u001B[0m\u001B[47m \u001B[0m\u001B[47m \u001B[0m\u001B[41m \u001B[0m \r\n\u001B[40m \u001B[0m\u001B[43m \u001B[0m\u001B[47m \u001B[0m\u001B[47m \u001B[0m\u001B[47m \u001B[0m\u001B[47m \u001B[0m\u001B[47m \u001B[0m\u001B[47m \u001B[0m\u001B[43m \u001B[0m\u001B[43m \u001B[0m\u001B[43m \u001B[0m\u001B[47m \u001B[0m\u001B[47m \u001B[0m\u001B[47m \u001B[0m\u001B[41m \u001B[0m \r\n\u001B[40m \u001B[0m\u001B[43m \u001B[0m\u001B[47m \u001B[0m\u001B[47m \u001B[0m\u001B[47m \u001B[0m\u001B[47m \u001B[0m\u001B[47m \u001B[0m\u001B[47m \u001B[0m\u001B[43m \u001B[0m\u001B[43m \u001B[0m\u001B[43m \u001B[0m\u001B[43m \u001B[0m\u001B[43m \u001B[0m\u001B[43m \u001B[0m\u001B[43m \u001B[0m \r\n\u001B[40m \u001B[0m\u001B[43m \u001B[0m\u001B[47m \u001B[0m\u001B[43m \u001B[0m\u001B[43m \u001B[0m\u001B[43m \u001B[0m\u001B[43m \u001B[0m\u001B[43m \u001B[0m\u001B[41m \u001B[0m\u001B[43m \u001B[0m\u001B[43m \u001B[0m\u001B[43m \u001B[0m\u001B[43m \u001B[0m\u001B[43m \u001B[0m\u001B[41m \u001B[0m \r\n\u001B[40m \u001B[0m\u001B[43m \u001B[0m\u001B[43m \u001B[0m\u001B[43m \u001B[0m\u001B[43m \u001B[0m\u001B[43m \u001B[0m\u001B[43m \u001B[0m\u001B[43m \u001B[0m\u001B[41m \u001B[0m\u001B[41m \u001B[0m\u001B[43m \u001B[0m\u001B[43m \u001B[0m\u001B[43m \u001B[0m\u001B[43m \u001B[0m\u001B[40m \u001B[0m \r\n\u001B[40m \u001B[0m\u001B[43m \u001B[0m\u001B[43m \u001B[0m\u001B[43m \u001B[0m\u001B[43m \u001B[0m\u001B[43m \u001B[0m\u001B[41m \u001B[0m\u001B[41m \u001B[0m\u001B[43m \u001B[0m\u001B[43m \u001B[0m\u001B[43m \u001B[0m\u001B[41m \u001B[0m\u001B[40m \u001B[0m \r\n\u001B[40m \u001B[0m\u001B[43m \u001B[0m\u001B[43m \u001B[0m\u001B[43m \u001B[0m\u001B[43m \u001B[0m\u001B[43m \u001B[0m\u001B[41m \u001B[0m\u001B[41m \u001B[0m\u001B[41m \u001B[0m\u001B[43m \u001B[0m\u001B[43m \u001B[0m\u001B[41m \u001B[0m\u001B[40m \u001B[0m \r\n\u001B[40m \u001B[0m\u001B[43m \u001B[0m\u001B[43m \u001B[0m\u001B[43m \u001B[0m\u001B[43m \u001B[0m\u001B[43m \u001B[0m\u001B[43m \u001B[0m\u001B[41m \u001B[0m\u001B[41m \u001B[0m\u001B[41m \u001B[0m\u001B[43m \u001B[0m\u001B[43m \u001B[0m\u001B[43m \u001B[0m\u001B[40m \u001B[0m \r\n\u001B[40m \u001B[0m\u001B[43m \u001B[0m\u001B[43m \u001B[0m\u001B[43m \u001B[0m\u001B[43m \u001B[0m\u001B[43m \u001B[0m\u001B[43m \u001B[0m\u001B[41m \u001B[0m\u001B[41m \u001B[0m\u001B[41m \u001B[0m\u001B[41m \u001B[0m\u001B[43m \u001B[0m\u001B[43m \u001B[0m\u001B[43m \u001B[0m\u001B[41m \u001B[0m \r\n\u001B[40m \u001B[0m\u001B[41m \u001B[0m\u001B[41m \u001B[0m\u001B[41m \u001B[0m\u001B[41m \u001B[0m\u001B[40m \u001B[0m\u001B[40m \u001B[0m\u001B[40m \u001B[0m \u001B[41m \u001B[0m\u001B[41m \u001B[0m\u001B[41m \u001B[0m\u001B[43m \u001B[0m\u001B[43m \u001B[0m\u001B[43m \u001B[0m \r\n \u001B[41m \u001B[0m\u001B[41m \u001B[0m\u001B[41m \u001B[0m\u001B[41m \u001B[0m \r\n"]
|
||||
|
3
docs/input/assets/casts/canvas-image-rich.cast
Normal file
3
docs/input/assets/casts/canvas-image-rich.cast
Normal file
File diff suppressed because one or more lines are too long
3
docs/input/assets/casts/canvas-plain.cast
Normal file
3
docs/input/assets/casts/canvas-plain.cast
Normal file
@ -0,0 +1,3 @@
|
||||
{"version": 2, "width": 84, "height": 24, "title": "canvas (plain)", "env": {"TERM": "Spectre.Console"}}
|
||||
[0, "o", "\u001B[42m \u001B[0m\u001B[41m \u001B[0m\r\n\u001B[42m \u001B[0m\u001B[47m \u001B[0m \u001B[47m \u001B[0m\u001B[47m \u001B[0m\r\n\u001B[42m \u001B[0m \u001B[47m \u001B[0m \u001B[47m \u001B[0m \u001B[47m \u001B[0m\r\n\u001B[42m \u001B[0m \u001B[47m \u001B[0m \u001B[47m \u001B[0m \u001B[47m \u001B[0m\r\n\u001B[42m \u001B[0m \u001B[47m \u001B[0m \u001B[47m \u001B[0m \u001B[47m \u001B[0m\r\n\u001B[42m \u001B[0m \u001B[47m \u001B[0m \u001B[47m \u001B[0m \u001B[47m \u001B[0m\r\n\u001B[42m \u001B[0m \u001B[47m \u001B[0m \u001B[47m \u001B[0m \u001B[47m \u001B[0m\r\n\u001B[42m \u001B[0m \u001B[47m \u001B[0m \u001B[47m \u001B[0m\r\n\u001B[42m \u001B[0m \u001B[47m \u001B[0m \u001B[47m \u001B[0m\r\n\u001B[42m \u001B[0m \u001B[47m \u001B[0m \u001B[47m \u001B[0m \u001B[47m \u001B[0m\r\n\u001B[42m \u001B[0m \u001B[47m \u001B[0m \u001B[47m \u001B[0m \u001B[47m \u001B[0m\r\n\u001B[42m \u001B[0m \u001B[47m \u001B[0m \u001B[47m \u001B[0m \u001B[47m \u001B[0m\r\n\u001B[42m \u001B[0m \u001B[47m \u001B[0m \u001B[47m \u001B[0m \u001B[47m \u001B[0m\r\n\u001B[42m \u001B[0m \u001B[47m \u001B[0m \u001B[47m \u001B[0m \u001B[47m \u001B[0m\r\n\u001B[42m \u001B[0m\u001B[47m \u001B[0m \u001B[47m \u001B[0m\u001B[47m \u001B[0m\r\n\u001B[42m \u001B[0m\u001B[44m \u001B[0m\u001B[47m \u001B[0m\r\n"]
|
||||
|
3
docs/input/assets/casts/canvas-rich.cast
Normal file
3
docs/input/assets/casts/canvas-rich.cast
Normal file
@ -0,0 +1,3 @@
|
||||
{"version": 2, "width": 84, "height": 24, "title": "canvas (rich)", "env": {"TERM": "Spectre.Console"}}
|
||||
[0, "o", "\u001B[48;5;2m \u001B[0m\u001B[48;5;9m \u001B[0m\r\n\u001B[48;5;2m \u001B[0m\u001B[48;5;15m \u001B[0m \u001B[48;5;15m \u001B[0m\u001B[48;5;11m \u001B[0m\r\n\u001B[48;5;2m \u001B[0m \u001B[48;5;15m \u001B[0m \u001B[48;5;15m \u001B[0m \u001B[48;5;11m \u001B[0m\r\n\u001B[48;5;2m \u001B[0m \u001B[48;5;15m \u001B[0m \u001B[48;5;15m \u001B[0m \u001B[48;5;11m \u001B[0m\r\n\u001B[48;5;2m \u001B[0m \u001B[48;5;15m \u001B[0m \u001B[48;5;15m \u001B[0m \u001B[48;5;11m \u001B[0m\r\n\u001B[48;5;2m \u001B[0m \u001B[48;5;15m \u001B[0m \u001B[48;5;15m \u001B[0m \u001B[48;5;11m \u001B[0m\r\n\u001B[48;5;2m \u001B[0m \u001B[48;5;15m \u001B[0m \u001B[48;5;15m \u001B[0m \u001B[48;5;11m \u001B[0m\r\n\u001B[48;5;2m \u001B[0m \u001B[48;5;15m \u001B[0m \u001B[48;5;11m \u001B[0m\r\n\u001B[48;5;2m \u001B[0m \u001B[48;5;15m \u001B[0m \u001B[48;5;11m \u001B[0m\r\n\u001B[48;5;2m \u001B[0m \u001B[48;5;15m \u001B[0m \u001B[48;5;15m \u001B[0m \u001B[48;5;11m \u001B[0m\r\n\u001B[48;5;2m \u001B[0m \u001B[48;5;15m \u001B[0m \u001B[48;5;15m \u001B[0m \u001B[48;5;11m \u001B[0m\r\n\u001B[48;5;2m \u001B[0m \u001B[48;5;15m \u001B[0m \u001B[48;5;15m \u001B[0m \u001B[48;5;11m \u001B[0m\r\n\u001B[48;5;2m \u001B[0m \u001B[48;5;15m \u001B[0m \u001B[48;5;15m \u001B[0m \u001B[48;5;11m \u001B[0m\r\n\u001B[48;5;2m \u001B[0m \u001B[48;5;15m \u001B[0m \u001B[48;5;15m \u001B[0m \u001B[48;5;11m \u001B[0m\r\n\u001B[48;5;2m \u001B[0m\u001B[48;5;15m \u001B[0m \u001B[48;5;15m \u001B[0m\u001B[48;5;11m \u001B[0m\r\n\u001B[48;5;2m \u001B[0m\u001B[48;5;12m \u001B[0m\u001B[48;5;11m \u001B[0m\r\n"]
|
||||
|
43
docs/input/assets/casts/columns-plain.cast
Normal file
43
docs/input/assets/casts/columns-plain.cast
Normal file
@ -0,0 +1,43 @@
|
||||
{"version": 2, "width": 84, "height": 24, "title": "columns (plain)", "env": {"TERM": "Spectre.Console"}}
|
||||
[0, "o", "\u001B[?25l"]
|
||||
[0.094, "o", "\u001B[1;37mApple\u001B[0m "]
|
||||
[0.297, "o", "\r\u001B[1;37mApple\u001B[0m \u001B[1;37mApricot\u001B[0m "]
|
||||
[0.5, "o", "\r\u001B[1;37mApple\u001B[0m \u001B[1;37mApricot\u001B[0m \u001B[1;37mAvocado\u001B[0m "]
|
||||
[0.719, "o", "\r\u001B[1;37mApple\u001B[0m \u001B[1;37mApricot\u001B[0m \u001B[1;37mAvocado\u001B[0m \u001B[1;37mBanana\u001B[0m "]
|
||||
[0.922, "o", "\r\u001B[1;37mApple\u001B[0m \u001B[1;37mApricot\u001B[0m \u001B[1;37mAvocado\u001B[0m \u001B[1;37mBanana\u001B[0m \u001B[1;37mBlackberry\u001B[0m "]
|
||||
[1.125, "o", "\r\u001B[1;37mApple\u001B[0m \u001B[1;37mApricot\u001B[0m \u001B[1;37mAvocado\u001B[0m \u001B[1;37mBanana\u001B[0m \u001B[1;37mBlackberry\u001B[0m \u001B[1;37mBlueberry\u001B[0m "]
|
||||
[1.344, "o", "\r\u001B[1;37mApple\u001B[0m \u001B[1;37mApricot\u001B[0m \u001B[1;37mAvocado\u001B[0m \u001B[1;37mBanana\u001B[0m \u001B[1;37mBlackberry\u001B[0m \u001B[1;37mBlueberry\u001B[0m \u001B[1;37mBoysenberry\u001B[0m "]
|
||||
[1.563, "o", "\r\u001B[1;37mApple\u001B[0m \u001B[1;37mApricot\u001B[0m \u001B[1;37mAvocado\u001B[0m \u001B[1;37mBanana\u001B[0m \u001B[1;37mBlackberry\u001B[0m \u001B[1;37mBlueberry\u001B[0m \u001B[1;37mBoysenberry\u001B[0m \u001B[1;37mBreadfruit\u001B[0m"]
|
||||
[1.766, "o", "\r\u001B[1;37mApple\u001B[0m \u001B[1;37mApricot\u001B[0m \u001B[1;37mAvocado\u001B[0m \u001B[1;37mBanana\u001B[0m \u001B[1;37mBlackberry\u001B[0m \u001B[1;37mBlueberry\u001B[0m \u001B[1;37mBoysenberry\u001B[0m \u001B[1;37mBreadfruit\u001B[0m \u001B[1;37mCacao\u001B[0m"]
|
||||
[1.969, "o", "\r\u001B[1;37mApple\u001B[0m \u001B[1;37mApricot\u001B[0m \u001B[1;37mAvocado\u001B[0m \u001B[1;37mBanana\u001B[0m \u001B[1;37mBlackberry\u001B[0m \u001B[1;37mBlueberry\u001B[0m \u001B[1;37mBoysenberry\u001B[0m \u001B[1;37mBreadfruit\u001B[0m \u001B[1;37mCacao\u001B[0m\r\n\u001B[1;37mCherry\u001B[0m "]
|
||||
[2.172, "o", "\r\u001B[2K\u001B[1A\u001B[1;37mApple\u001B[0m \u001B[1;37mApricot\u001B[0m \u001B[1;37mAvocado\u001B[0m \u001B[1;37mBanana\u001B[0m \u001B[1;37mBlackberry\u001B[0m \u001B[1;37mBlueberry\u001B[0m \u001B[1;37mBoysenberry\u001B[0m \u001B[1;37mBreadfruit\u001B[0m \u001B[1;37mCacao\u001B[0m\r\n\u001B[1;37mCherry\u001B[0m \u001B[1;37mCloudberry\u001B[0m "]
|
||||
[2.375, "o", "\r\u001B[2K\u001B[1A\u001B[1;37mApple\u001B[0m \u001B[1;37mApricot\u001B[0m \u001B[1;37mAvocado\u001B[0m \u001B[1;37mBanana\u001B[0m \u001B[1;37mBlackberry\u001B[0m \u001B[1;37mBlueberry\u001B[0m \u001B[1;37mBoysenberry\u001B[0m \u001B[1;37mBreadfruit\u001B[0m \u001B[1;37mCacao\u001B[0m\r\n\u001B[1;37mCherry\u001B[0m \u001B[1;37mCloudberry\u001B[0m \u001B[1;37mCoconut\u001B[0m "]
|
||||
[2.594, "o", "\r\u001B[2K\u001B[1A\u001B[1;37mApple\u001B[0m \u001B[1;37mApricot\u001B[0m \u001B[1;37mAvocado\u001B[0m \u001B[1;37mBanana\u001B[0m \u001B[1;37mBlackberry\u001B[0m \u001B[1;37mBlueberry\u001B[0m \u001B[1;37mBoysenberry\u001B[0m \u001B[1;37mBreadfruit\u001B[0m\r\n\u001B[1;37mCacao\u001B[0m \u001B[1;37mCherry\u001B[0m \u001B[1;37mCloudberry\u001B[0m \u001B[1;37mCoconut\u001B[0m \u001B[1;37mDragonfruit\u001B[0m "]
|
||||
[2.797, "o", "\r\u001B[2K\u001B[1A\u001B[1;37mApple\u001B[0m \u001B[1;37mApricot\u001B[0m \u001B[1;37mAvocado\u001B[0m \u001B[1;37mBanana\u001B[0m \u001B[1;37mBlackberry\u001B[0m \u001B[1;37mBlueberry\u001B[0m \u001B[1;37mBoysenberry\u001B[0m \u001B[1;37mBreadfruit\u001B[0m\r\n\u001B[1;37mCacao\u001B[0m \u001B[1;37mCherry\u001B[0m \u001B[1;37mCloudberry\u001B[0m \u001B[1;37mCoconut\u001B[0m \u001B[1;37mDragonfruit\u001B[0m \u001B[1;37mElderberry\u001B[0m "]
|
||||
[3, "o", "\r\u001B[2K\u001B[1A\u001B[1;37mApple\u001B[0m \u001B[1;37mApricot\u001B[0m \u001B[1;37mAvocado\u001B[0m \u001B[1;37mBanana\u001B[0m \u001B[1;37mBlackberry\u001B[0m \u001B[1;37mBlueberry\u001B[0m \u001B[1;37mBoysenberry\u001B[0m \u001B[1;37mBreadfruit\u001B[0m\r\n\u001B[1;37mCacao\u001B[0m \u001B[1;37mCherry\u001B[0m \u001B[1;37mCloudberry\u001B[0m \u001B[1;37mCoconut\u001B[0m \u001B[1;37mDragonfruit\u001B[0m \u001B[1;37mElderberry\u001B[0m \u001B[1;37mGrape\u001B[0m "]
|
||||
[3.219, "o", "\r\u001B[2K\u001B[1A\u001B[1;37mApple\u001B[0m \u001B[1;37mApricot\u001B[0m \u001B[1;37mAvocado\u001B[0m \u001B[1;37mBanana\u001B[0m \u001B[1;37mBlackberry\u001B[0m \u001B[1;37mBlueberry\u001B[0m \u001B[1;37mBoysenberry\u001B[0m \u001B[1;37mBreadfruit\u001B[0m\r\n\u001B[1;37mCacao\u001B[0m \u001B[1;37mCherry\u001B[0m \u001B[1;37mCloudberry\u001B[0m \u001B[1;37mCoconut\u001B[0m \u001B[1;37mDragonfruit\u001B[0m \u001B[1;37mElderberry\u001B[0m \u001B[1;37mGrape\u001B[0m \u001B[1;37mGrapefruit\u001B[0m"]
|
||||
[3.422, "o", "\r\u001B[2K\u001B[1A\u001B[1;37mApple\u001B[0m \u001B[1;37mApricot\u001B[0m \u001B[1;37mAvocado\u001B[0m \u001B[1;37mBanana\u001B[0m \u001B[1;37mBlackberry\u001B[0m \u001B[1;37mBlueberry\u001B[0m \u001B[1;37mBoysenberry\u001B[0m \u001B[1;37mBreadfruit\u001B[0m\r\n\u001B[1;37mCacao\u001B[0m \u001B[1;37mCherry\u001B[0m \u001B[1;37mCloudberry\u001B[0m \u001B[1;37mCoconut\u001B[0m \u001B[1;37mDragonfruit\u001B[0m \u001B[1;37mElderberry\u001B[0m \u001B[1;37mGrape\u001B[0m \u001B[1;37mGrapefruit\u001B[0m\r\n\u001B[1;37mJackfruit\u001B[0m "]
|
||||
[3.625, "o", "\r\u001B[2K\u001B[1A\u001B[2K\u001B[1A\u001B[1;37mApple\u001B[0m \u001B[1;37mApricot\u001B[0m \u001B[1;37mAvocado\u001B[0m \u001B[1;37mBanana\u001B[0m \u001B[1;37mBlackberry\u001B[0m \u001B[1;37mBlueberry\u001B[0m \u001B[1;37mBoysenberry\u001B[0m\r\n\u001B[1;37mBreadfruit\u001B[0m \u001B[1;37mCacao\u001B[0m \u001B[1;37mCherry\u001B[0m \u001B[1;37mCloudberry\u001B[0m \u001B[1;37mCoconut\u001B[0m \u001B[1;37mDragonfruit\u001B[0m \u001B[1;37mElderberry\u001B[0m \r\n\u001B[1;37mGrape\u001B[0m \u001B[1;37mGrapefruit\u001B[0m \u001B[1;37mJackfruit\u001B[0m \u001B[1;37mKiwifruit\u001B[0m "]
|
||||
[3.828, "o", "\r\u001B[2K\u001B[1A\u001B[2K\u001B[1A\u001B[1;37mApple\u001B[0m \u001B[1;37mApricot\u001B[0m \u001B[1;37mAvocado\u001B[0m \u001B[1;37mBanana\u001B[0m \u001B[1;37mBlackberry\u001B[0m \u001B[1;37mBlueberry\u001B[0m \u001B[1;37mBoysenberry\u001B[0m\r\n\u001B[1;37mBreadfruit\u001B[0m \u001B[1;37mCacao\u001B[0m \u001B[1;37mCherry\u001B[0m \u001B[1;37mCloudberry\u001B[0m \u001B[1;37mCoconut\u001B[0m \u001B[1;37mDragonfruit\u001B[0m \u001B[1;37mElderberry\u001B[0m \r\n\u001B[1;37mGrape\u001B[0m \u001B[1;37mGrapefruit\u001B[0m \u001B[1;37mJackfruit\u001B[0m \u001B[1;37mKiwifruit\u001B[0m \u001B[1;37mLemon\u001B[0m "]
|
||||
[4.047, "o", "\r\u001B[2K\u001B[1A\u001B[2K\u001B[1A\u001B[1;37mApple\u001B[0m \u001B[1;37mApricot\u001B[0m \u001B[1;37mAvocado\u001B[0m \u001B[1;37mBanana\u001B[0m \u001B[1;37mBlackberry\u001B[0m \u001B[1;37mBlueberry\u001B[0m \u001B[1;37mBoysenberry\u001B[0m\r\n\u001B[1;37mBreadfruit\u001B[0m \u001B[1;37mCacao\u001B[0m \u001B[1;37mCherry\u001B[0m \u001B[1;37mCloudberry\u001B[0m \u001B[1;37mCoconut\u001B[0m \u001B[1;37mDragonfruit\u001B[0m \u001B[1;37mElderberry\u001B[0m \r\n\u001B[1;37mGrape\u001B[0m \u001B[1;37mGrapefruit\u001B[0m \u001B[1;37mJackfruit\u001B[0m \u001B[1;37mKiwifruit\u001B[0m \u001B[1;37mLemon\u001B[0m \u001B[1;37mLime\u001B[0m "]
|
||||
[4.25, "o", "\r\u001B[2K\u001B[1A\u001B[2K\u001B[1A\u001B[1;37mApple\u001B[0m \u001B[1;37mApricot\u001B[0m \u001B[1;37mAvocado\u001B[0m \u001B[1;37mBanana\u001B[0m \u001B[1;37mBlackberry\u001B[0m \u001B[1;37mBlueberry\u001B[0m \u001B[1;37mBoysenberry\u001B[0m\r\n\u001B[1;37mBreadfruit\u001B[0m \u001B[1;37mCacao\u001B[0m \u001B[1;37mCherry\u001B[0m \u001B[1;37mCloudberry\u001B[0m \u001B[1;37mCoconut\u001B[0m \u001B[1;37mDragonfruit\u001B[0m \u001B[1;37mElderberry\u001B[0m \r\n\u001B[1;37mGrape\u001B[0m \u001B[1;37mGrapefruit\u001B[0m \u001B[1;37mJackfruit\u001B[0m \u001B[1;37mKiwifruit\u001B[0m \u001B[1;37mLemon\u001B[0m \u001B[1;37mLime\u001B[0m \u001B[1;37mMango\u001B[0m "]
|
||||
[4.453, "o", "\r\u001B[2K\u001B[1A\u001B[2K\u001B[1A\u001B[1;37mApple\u001B[0m \u001B[1;37mApricot\u001B[0m \u001B[1;37mAvocado\u001B[0m \u001B[1;37mBanana\u001B[0m \u001B[1;37mBlackberry\u001B[0m \u001B[1;37mBlueberry\u001B[0m \u001B[1;37mBoysenberry\u001B[0m\r\n\u001B[1;37mBreadfruit\u001B[0m \u001B[1;37mCacao\u001B[0m \u001B[1;37mCherry\u001B[0m \u001B[1;37mCloudberry\u001B[0m \u001B[1;37mCoconut\u001B[0m \u001B[1;37mDragonfruit\u001B[0m \u001B[1;37mElderberry\u001B[0m \r\n\u001B[1;37mGrape\u001B[0m \u001B[1;37mGrapefruit\u001B[0m \u001B[1;37mJackfruit\u001B[0m \u001B[1;37mKiwifruit\u001B[0m \u001B[1;37mLemon\u001B[0m \u001B[1;37mLime\u001B[0m \u001B[1;37mMango\u001B[0m \r\n\u001B[1;37mMelon\u001B[0m "]
|
||||
[4.672, "o", "\r\u001B[2K\u001B[1A\u001B[2K\u001B[1A\u001B[2K\u001B[1A\u001B[1;37mApple\u001B[0m \u001B[1;37mApricot\u001B[0m \u001B[1;37mAvocado\u001B[0m \u001B[1;37mBanana\u001B[0m \u001B[1;37mBlackberry\u001B[0m \u001B[1;37mBlueberry\u001B[0m \u001B[1;37mBoysenberry\u001B[0m\r\n\u001B[1;37mBreadfruit\u001B[0m \u001B[1;37mCacao\u001B[0m \u001B[1;37mCherry\u001B[0m \u001B[1;37mCloudberry\u001B[0m \u001B[1;37mCoconut\u001B[0m \u001B[1;37mDragonfruit\u001B[0m \u001B[1;37mElderberry\u001B[0m \r\n\u001B[1;37mGrape\u001B[0m \u001B[1;37mGrapefruit\u001B[0m \u001B[1;37mJackfruit\u001B[0m \u001B[1;37mKiwifruit\u001B[0m \u001B[1;37mLemon\u001B[0m \u001B[1;37mLime\u001B[0m \u001B[1;37mMango\u001B[0m \r\n\u001B[1;37mMelon\u001B[0m \u001B[1;37mOrange\u001B[0m "]
|
||||
[4.875, "o", "\r\u001B[2K\u001B[1A\u001B[2K\u001B[1A\u001B[2K\u001B[1A\u001B[1;37mApple\u001B[0m \u001B[1;37mApricot\u001B[0m \u001B[1;37mAvocado\u001B[0m \u001B[1;37mBanana\u001B[0m \u001B[1;37mBlackberry\u001B[0m \u001B[1;37mBlueberry\u001B[0m \u001B[1;37mBoysenberry\u001B[0m\r\n\u001B[1;37mBreadfruit\u001B[0m \u001B[1;37mCacao\u001B[0m \u001B[1;37mCherry\u001B[0m \u001B[1;37mCloudberry\u001B[0m \u001B[1;37mCoconut\u001B[0m \u001B[1;37mDragonfruit\u001B[0m \u001B[1;37mElderberry\u001B[0m \r\n\u001B[1;37mGrape\u001B[0m \u001B[1;37mGrapefruit\u001B[0m \u001B[1;37mJackfruit\u001B[0m \u001B[1;37mKiwifruit\u001B[0m \u001B[1;37mLemon\u001B[0m \u001B[1;37mLime\u001B[0m \u001B[1;37mMango\u001B[0m \r\n\u001B[1;37mMelon\u001B[0m \u001B[1;37mOrange\u001B[0m \u001B[1;37mBlood orange\u001B[0m "]
|
||||
[5.094, "o", "\r\u001B[2K\u001B[1A\u001B[2K\u001B[1A\u001B[2K\u001B[1A\u001B[1;37mApple\u001B[0m \u001B[1;37mApricot\u001B[0m \u001B[1;37mAvocado\u001B[0m \u001B[1;37mBanana\u001B[0m \u001B[1;37mBlackberry\u001B[0m \u001B[1;37mBlueberry\u001B[0m \u001B[1;37mBoysenberry\u001B[0m\r\n\u001B[1;37mBreadfruit\u001B[0m \u001B[1;37mCacao\u001B[0m \u001B[1;37mCherry\u001B[0m \u001B[1;37mCloudberry\u001B[0m \u001B[1;37mCoconut\u001B[0m \u001B[1;37mDragonfruit\u001B[0m \u001B[1;37mElderberry\u001B[0m \r\n\u001B[1;37mGrape\u001B[0m \u001B[1;37mGrapefruit\u001B[0m \u001B[1;37mJackfruit\u001B[0m \u001B[1;37mKiwifruit\u001B[0m \u001B[1;37mLemon\u001B[0m \u001B[1;37mLime\u001B[0m \u001B[1;37mMango\u001B[0m \r\n\u001B[1;37mMelon\u001B[0m \u001B[1;37mOrange\u001B[0m \u001B[1;37mBlood orange\u001B[0m \u001B[1;37mClementine\u001B[0m "]
|
||||
[5.297, "o", "\r\u001B[2K\u001B[1A\u001B[2K\u001B[1A\u001B[2K\u001B[1A\u001B[1;37mApple\u001B[0m \u001B[1;37mApricot\u001B[0m \u001B[1;37mAvocado\u001B[0m \u001B[1;37mBanana\u001B[0m \u001B[1;37mBlackberry\u001B[0m \u001B[1;37mBlueberry\u001B[0m \u001B[1;37mBoysenberry\u001B[0m\r\n\u001B[1;37mBreadfruit\u001B[0m \u001B[1;37mCacao\u001B[0m \u001B[1;37mCherry\u001B[0m \u001B[1;37mCloudberry\u001B[0m \u001B[1;37mCoconut\u001B[0m \u001B[1;37mDragonfruit\u001B[0m \u001B[1;37mElderberry\u001B[0m \r\n\u001B[1;37mGrape\u001B[0m \u001B[1;37mGrapefruit\u001B[0m \u001B[1;37mJackfruit\u001B[0m \u001B[1;37mKiwifruit\u001B[0m \u001B[1;37mLemon\u001B[0m \u001B[1;37mLime\u001B[0m \u001B[1;37mMango\u001B[0m \r\n\u001B[1;37mMelon\u001B[0m \u001B[1;37mOrange\u001B[0m \u001B[1;37mBlood orange\u001B[0m \u001B[1;37mClementine\u001B[0m \u001B[1;37mMandarine\u001B[0m "]
|
||||
[5.516, "o", "\r\u001B[2K\u001B[1A\u001B[2K\u001B[1A\u001B[2K\u001B[1A\u001B[1;37mApple\u001B[0m \u001B[1;37mApricot\u001B[0m \u001B[1;37mAvocado\u001B[0m \u001B[1;37mBanana\u001B[0m \u001B[1;37mBlackberry\u001B[0m \u001B[1;37mBlueberry\u001B[0m \u001B[1;37mBoysenberry\u001B[0m\r\n\u001B[1;37mBreadfruit\u001B[0m \u001B[1;37mCacao\u001B[0m \u001B[1;37mCherry\u001B[0m \u001B[1;37mCloudberry\u001B[0m \u001B[1;37mCoconut\u001B[0m \u001B[1;37mDragonfruit\u001B[0m \u001B[1;37mElderberry\u001B[0m \r\n\u001B[1;37mGrape\u001B[0m \u001B[1;37mGrapefruit\u001B[0m \u001B[1;37mJackfruit\u001B[0m \u001B[1;37mKiwifruit\u001B[0m \u001B[1;37mLemon\u001B[0m \u001B[1;37mLime\u001B[0m \u001B[1;37mMango\u001B[0m \r\n\u001B[1;37mMelon\u001B[0m \u001B[1;37mOrange\u001B[0m \u001B[1;37mBlood orange\u001B[0m \u001B[1;37mClementine\u001B[0m \u001B[1;37mMandarine\u001B[0m \u001B[1;37mTangerine\u001B[0m "]
|
||||
[5.734, "o", "\r\u001B[2K\u001B[1A\u001B[2K\u001B[1A\u001B[2K\u001B[1A\u001B[1;37mApple\u001B[0m \u001B[1;37mApricot\u001B[0m \u001B[1;37mAvocado\u001B[0m \u001B[1;37mBanana\u001B[0m \u001B[1;37mBlackberry\u001B[0m \u001B[1;37mBlueberry\u001B[0m \u001B[1;37mBoysenberry\u001B[0m\r\n\u001B[1;37mBreadfruit\u001B[0m \u001B[1;37mCacao\u001B[0m \u001B[1;37mCherry\u001B[0m \u001B[1;37mCloudberry\u001B[0m \u001B[1;37mCoconut\u001B[0m \u001B[1;37mDragonfruit\u001B[0m \u001B[1;37mElderberry\u001B[0m \r\n\u001B[1;37mGrape\u001B[0m \u001B[1;37mGrapefruit\u001B[0m \u001B[1;37mJackfruit\u001B[0m \u001B[1;37mKiwifruit\u001B[0m \u001B[1;37mLemon\u001B[0m \u001B[1;37mLime\u001B[0m \u001B[1;37mMango\u001B[0m \r\n\u001B[1;37mMelon\u001B[0m \u001B[1;37mOrange\u001B[0m \u001B[1;37mBlood orange\u001B[0m \u001B[1;37mClementine\u001B[0m \u001B[1;37mMandarine\u001B[0m \u001B[1;37mTangerine\u001B[0m \u001B[1;37mPapaya\u001B[0m "]
|
||||
[5.953, "o", "\r\u001B[2K\u001B[1A\u001B[2K\u001B[1A\u001B[2K\u001B[1A\u001B[1;37mApple\u001B[0m \u001B[1;37mApricot\u001B[0m \u001B[1;37mAvocado\u001B[0m \u001B[1;37mBanana\u001B[0m \u001B[1;37mBlackberry\u001B[0m \u001B[1;37mBlueberry\u001B[0m \u001B[1;37mBoysenberry\u001B[0m\r\n\u001B[1;37mBreadfruit\u001B[0m \u001B[1;37mCacao\u001B[0m \u001B[1;37mCherry\u001B[0m \u001B[1;37mCloudberry\u001B[0m \u001B[1;37mCoconut\u001B[0m \u001B[1;37mDragonfruit\u001B[0m \u001B[1;37mElderberry\u001B[0m \r\n\u001B[1;37mGrape\u001B[0m \u001B[1;37mGrapefruit\u001B[0m \u001B[1;37mJackfruit\u001B[0m \u001B[1;37mKiwifruit\u001B[0m \u001B[1;37mLemon\u001B[0m \u001B[1;37mLime\u001B[0m \u001B[1;37mMango\u001B[0m \r\n\u001B[1;37mMelon\u001B[0m \u001B[1;37mOrange\u001B[0m \u001B[1;37mBlood orange\u001B[0m \u001B[1;37mClementine\u001B[0m \u001B[1;37mMandarine\u001B[0m \u001B[1;37mTangerine\u001B[0m \u001B[1;37mPapaya\u001B[0m \r\n\u001B[1;37mPassionfruit\u001B[0m "]
|
||||
[6.172, "o", "\r\u001B[2K\u001B[1A\u001B[2K\u001B[1A\u001B[2K\u001B[1A\u001B[2K\u001B[1A\u001B[1;37mApple\u001B[0m \u001B[1;37mApricot\u001B[0m \u001B[1;37mAvocado\u001B[0m \u001B[1;37mBanana\u001B[0m \u001B[1;37mBlackberry\u001B[0m \u001B[1;37mBlueberry\u001B[0m \u001B[1;37mBoysenberry\u001B[0m\r\n\u001B[1;37mBreadfruit\u001B[0m \u001B[1;37mCacao\u001B[0m \u001B[1;37mCherry\u001B[0m \u001B[1;37mCloudberry\u001B[0m \u001B[1;37mCoconut\u001B[0m \u001B[1;37mDragonfruit\u001B[0m \u001B[1;37mElderberry\u001B[0m \r\n\u001B[1;37mGrape\u001B[0m \u001B[1;37mGrapefruit\u001B[0m \u001B[1;37mJackfruit\u001B[0m \u001B[1;37mKiwifruit\u001B[0m \u001B[1;37mLemon\u001B[0m \u001B[1;37mLime\u001B[0m \u001B[1;37mMango\u001B[0m \r\n\u001B[1;37mMelon\u001B[0m \u001B[1;37mOrange\u001B[0m \u001B[1;37mBlood orange\u001B[0m \u001B[1;37mClementine\u001B[0m \u001B[1;37mMandarine\u001B[0m \u001B[1;37mTangerine\u001B[0m \u001B[1;37mPapaya\u001B[0m \r\n\u001B[1;37mPassionfruit\u001B[0m \u001B[1;37mPlum\u001B[0m "]
|
||||
[6.375, "o", "\r\u001B[2K\u001B[1A\u001B[2K\u001B[1A\u001B[2K\u001B[1A\u001B[2K\u001B[1A\u001B[1;37mApple\u001B[0m \u001B[1;37mApricot\u001B[0m \u001B[1;37mAvocado\u001B[0m \u001B[1;37mBanana\u001B[0m \u001B[1;37mBlackberry\u001B[0m \u001B[1;37mBlueberry\u001B[0m \u001B[1;37mBoysenberry\u001B[0m\r\n\u001B[1;37mBreadfruit\u001B[0m \u001B[1;37mCacao\u001B[0m \u001B[1;37mCherry\u001B[0m \u001B[1;37mCloudberry\u001B[0m \u001B[1;37mCoconut\u001B[0m \u001B[1;37mDragonfruit\u001B[0m \u001B[1;37mElderberry\u001B[0m \r\n\u001B[1;37mGrape\u001B[0m \u001B[1;37mGrapefruit\u001B[0m \u001B[1;37mJackfruit\u001B[0m \u001B[1;37mKiwifruit\u001B[0m \u001B[1;37mLemon\u001B[0m \u001B[1;37mLime\u001B[0m \u001B[1;37mMango\u001B[0m \r\n\u001B[1;37mMelon\u001B[0m \u001B[1;37mOrange\u001B[0m \u001B[1;37mBlood orange\u001B[0m \u001B[1;37mClementine\u001B[0m \u001B[1;37mMandarine\u001B[0m \u001B[1;37mTangerine\u001B[0m \u001B[1;37mPapaya\u001B[0m \r\n\u001B[1;37mPassionfruit\u001B[0m \u001B[1;37mPlum\u001B[0m \u001B[1;37mPineapple\u001B[0m "]
|
||||
[6.594, "o", "\r\u001B[2K\u001B[1A\u001B[2K\u001B[1A\u001B[2K\u001B[1A\u001B[2K\u001B[1A\u001B[1;37mApple\u001B[0m \u001B[1;37mApricot\u001B[0m \u001B[1;37mAvocado\u001B[0m \u001B[1;37mBanana\u001B[0m \u001B[1;37mBlackberry\u001B[0m \u001B[1;37mBlueberry\u001B[0m \u001B[1;37mBoysenberry\u001B[0m\r\n\u001B[1;37mBreadfruit\u001B[0m \u001B[1;37mCacao\u001B[0m \u001B[1;37mCherry\u001B[0m \u001B[1;37mCloudberry\u001B[0m \u001B[1;37mCoconut\u001B[0m \u001B[1;37mDragonfruit\u001B[0m \u001B[1;37mElderberry\u001B[0m \r\n\u001B[1;37mGrape\u001B[0m \u001B[1;37mGrapefruit\u001B[0m \u001B[1;37mJackfruit\u001B[0m \u001B[1;37mKiwifruit\u001B[0m \u001B[1;37mLemon\u001B[0m \u001B[1;37mLime\u001B[0m \u001B[1;37mMango\u001B[0m \r\n\u001B[1;37mMelon\u001B[0m \u001B[1;37mOrange\u001B[0m \u001B[1;37mBlood orange\u001B[0m \u001B[1;37mClementine\u001B[0m \u001B[1;37mMandarine\u001B[0m \u001B[1;37mTangerine\u001B[0m \u001B[1;37mPapaya\u001B[0m \r\n\u001B[1;37mPassionfruit\u001B[0m \u001B[1;37mPlum\u001B[0m \u001B[1;37mPineapple\u001B[0m \u001B[1;37mPomelo\u001B[0m "]
|
||||
[6.797, "o", "\r\u001B[2K\u001B[1A\u001B[2K\u001B[1A\u001B[2K\u001B[1A\u001B[2K\u001B[1A\u001B[1;37mApple\u001B[0m \u001B[1;37mApricot\u001B[0m \u001B[1;37mAvocado\u001B[0m \u001B[1;37mBanana\u001B[0m \u001B[1;37mBlackberry\u001B[0m \u001B[1;37mBlueberry\u001B[0m \u001B[1;37mBoysenberry\u001B[0m\r\n\u001B[1;37mBreadfruit\u001B[0m \u001B[1;37mCacao\u001B[0m \u001B[1;37mCherry\u001B[0m \u001B[1;37mCloudberry\u001B[0m \u001B[1;37mCoconut\u001B[0m \u001B[1;37mDragonfruit\u001B[0m \u001B[1;37mElderberry\u001B[0m \r\n\u001B[1;37mGrape\u001B[0m \u001B[1;37mGrapefruit\u001B[0m \u001B[1;37mJackfruit\u001B[0m \u001B[1;37mKiwifruit\u001B[0m \u001B[1;37mLemon\u001B[0m \u001B[1;37mLime\u001B[0m \u001B[1;37mMango\u001B[0m \r\n\u001B[1;37mMelon\u001B[0m \u001B[1;37mOrange\u001B[0m \u001B[1;37mBlood orange\u001B[0m \u001B[1;37mClementine\u001B[0m \u001B[1;37mMandarine\u001B[0m \u001B[1;37mTangerine\u001B[0m \u001B[1;37mPapaya\u001B[0m \r\n\u001B[1;37mPassionfruit\u001B[0m \u001B[1;37mPlum\u001B[0m \u001B[1;37mPineapple\u001B[0m \u001B[1;37mPomelo\u001B[0m \u001B[1;37mRaspberry\u001B[0m "]
|
||||
[7.016, "o", "\r\u001B[2K\u001B[1A\u001B[2K\u001B[1A\u001B[2K\u001B[1A\u001B[2K\u001B[1A\u001B[1;37mApple\u001B[0m \u001B[1;37mApricot\u001B[0m \u001B[1;37mAvocado\u001B[0m \u001B[1;37mBanana\u001B[0m \u001B[1;37mBlackberry\u001B[0m \u001B[1;37mBlueberry\u001B[0m \u001B[1;37mBoysenberry\u001B[0m\r\n\u001B[1;37mBreadfruit\u001B[0m \u001B[1;37mCacao\u001B[0m \u001B[1;37mCherry\u001B[0m \u001B[1;37mCloudberry\u001B[0m \u001B[1;37mCoconut\u001B[0m \u001B[1;37mDragonfruit\u001B[0m \u001B[1;37mElderberry\u001B[0m \r\n\u001B[1;37mGrape\u001B[0m \u001B[1;37mGrapefruit\u001B[0m \u001B[1;37mJackfruit\u001B[0m \u001B[1;37mKiwifruit\u001B[0m \u001B[1;37mLemon\u001B[0m \u001B[1;37mLime\u001B[0m \u001B[1;37mMango\u001B[0m \r\n\u001B[1;37mMelon\u001B[0m \u001B[1;37mOrange\u001B[0m \u001B[1;37mBlood orange\u001B[0m \u001B[1;37mClementine\u001B[0m \u001B[1;37mMandarine\u001B[0m \u001B[1;37mTangerine\u001B[0m \u001B[1;37mPapaya\u001B[0m \r\n\u001B[1;37mPassionfruit\u001B[0m \u001B[1;37mPlum\u001B[0m \u001B[1;37mPineapple\u001B[0m \u001B[1;37mPomelo\u001B[0m \u001B[1;37mRaspberry\u001B[0m \u001B[1;37mSalmonberry\u001B[0m "]
|
||||
[7.234, "o", "\r\u001B[2K\u001B[1A\u001B[2K\u001B[1A\u001B[2K\u001B[1A\u001B[2K\u001B[1A\u001B[1;37mApple\u001B[0m \u001B[1;37mApricot\u001B[0m \u001B[1;37mAvocado\u001B[0m \u001B[1;37mBanana\u001B[0m \u001B[1;37mBlackberry\u001B[0m \u001B[1;37mBlueberry\u001B[0m \u001B[1;37mBoysenberry\u001B[0m\r\n\u001B[1;37mBreadfruit\u001B[0m \u001B[1;37mCacao\u001B[0m \u001B[1;37mCherry\u001B[0m \u001B[1;37mCloudberry\u001B[0m \u001B[1;37mCoconut\u001B[0m \u001B[1;37mDragonfruit\u001B[0m \u001B[1;37mElderberry\u001B[0m \r\n\u001B[1;37mGrape\u001B[0m \u001B[1;37mGrapefruit\u001B[0m \u001B[1;37mJackfruit\u001B[0m \u001B[1;37mKiwifruit\u001B[0m \u001B[1;37mLemon\u001B[0m \u001B[1;37mLime\u001B[0m \u001B[1;37mMango\u001B[0m \r\n\u001B[1;37mMelon\u001B[0m \u001B[1;37mOrange\u001B[0m \u001B[1;37mBlood orange\u001B[0m \u001B[1;37mClementine\u001B[0m \u001B[1;37mMandarine\u001B[0m \u001B[1;37mTangerine\u001B[0m \u001B[1;37mPapaya\u001B[0m \r\n\u001B[1;37mPassionfruit\u001B[0m \u001B[1;37mPlum\u001B[0m \u001B[1;37mPineapple\u001B[0m \u001B[1;37mPomelo\u001B[0m \u001B[1;37mRaspberry\u001B[0m \u001B[1;37mSalmonberry\u001B[0m \u001B[1;37mStrawberry\u001B[0m "]
|
||||
[7.438, "o", "\r\u001B[2K\u001B[1A\u001B[2K\u001B[1A\u001B[2K\u001B[1A\u001B[2K\u001B[1A\u001B[1;37mApple\u001B[0m \u001B[1;37mApricot\u001B[0m \u001B[1;37mAvocado\u001B[0m \u001B[1;37mBanana\u001B[0m \u001B[1;37mBlackberry\u001B[0m \u001B[1;37mBlueberry\u001B[0m \u001B[1;37mBoysenberry\u001B[0m\r\n\u001B[1;37mBreadfruit\u001B[0m \u001B[1;37mCacao\u001B[0m \u001B[1;37mCherry\u001B[0m \u001B[1;37mCloudberry\u001B[0m \u001B[1;37mCoconut\u001B[0m \u001B[1;37mDragonfruit\u001B[0m \u001B[1;37mElderberry\u001B[0m \r\n\u001B[1;37mGrape\u001B[0m \u001B[1;37mGrapefruit\u001B[0m \u001B[1;37mJackfruit\u001B[0m \u001B[1;37mKiwifruit\u001B[0m \u001B[1;37mLemon\u001B[0m \u001B[1;37mLime\u001B[0m \u001B[1;37mMango\u001B[0m \r\n\u001B[1;37mMelon\u001B[0m \u001B[1;37mOrange\u001B[0m \u001B[1;37mBlood orange\u001B[0m \u001B[1;37mClementine\u001B[0m \u001B[1;37mMandarine\u001B[0m \u001B[1;37mTangerine\u001B[0m \u001B[1;37mPapaya\u001B[0m \r\n\u001B[1;37mPassionfruit\u001B[0m \u001B[1;37mPlum\u001B[0m \u001B[1;37mPineapple\u001B[0m \u001B[1;37mPomelo\u001B[0m \u001B[1;37mRaspberry\u001B[0m \u001B[1;37mSalmonberry\u001B[0m \u001B[1;37mStrawberry\u001B[0m \r\n\u001B[1;37mXimenia\u001B[0m "]
|
||||
[7.641, "o", "\r\u001B[2K\u001B[1A\u001B[2K\u001B[1A\u001B[2K\u001B[1A\u001B[2K\u001B[1A\u001B[2K\u001B[1A\u001B[1;37mApple\u001B[0m \u001B[1;37mApricot\u001B[0m \u001B[1;37mAvocado\u001B[0m \u001B[1;37mBanana\u001B[0m \u001B[1;37mBlackberry\u001B[0m \u001B[1;37mBlueberry\u001B[0m \u001B[1;37mBoysenberry\u001B[0m\r\n\u001B[1;37mBreadfruit\u001B[0m \u001B[1;37mCacao\u001B[0m \u001B[1;37mCherry\u001B[0m \u001B[1;37mCloudberry\u001B[0m \u001B[1;37mCoconut\u001B[0m \u001B[1;37mDragonfruit\u001B[0m \u001B[1;37mElderberry\u001B[0m \r\n\u001B[1;37mGrape\u001B[0m \u001B[1;37mGrapefruit\u001B[0m \u001B[1;37mJackfruit\u001B[0m \u001B[1;37mKiwifruit\u001B[0m \u001B[1;37mLemon\u001B[0m \u001B[1;37mLime\u001B[0m \u001B[1;37mMango\u001B[0m \r\n\u001B[1;37mMelon\u001B[0m \u001B[1;37mOrange\u001B[0m \u001B[1;37mBlood orange\u001B[0m \u001B[1;37mClementine\u001B[0m \u001B[1;37mMandarine\u001B[0m \u001B[1;37mTangerine\u001B[0m \u001B[1;37mPapaya\u001B[0m \r\n\u001B[1;37mPassionfruit\u001B[0m \u001B[1;37mPlum\u001B[0m \u001B[1;37mPineapple\u001B[0m \u001B[1;37mPomelo\u001B[0m \u001B[1;37mRaspberry\u001B[0m \u001B[1;37mSalmonberry\u001B[0m \u001B[1;37mStrawberry\u001B[0m \r\n\u001B[1;37mXimenia\u001B[0m "]
|
||||
[7.641, "o", "\r\u001B[2K\u001B[1A\u001B[2K\u001B[1A\u001B[2K\u001B[1A\u001B[2K\u001B[1A\u001B[2K\u001B[1A\u001B[2K"]
|
||||
[7.641, "o", "\u001B[?25h"]
|
||||
[7.656, "o", "\u001B[1;37mApple\u001B[0m \u001B[1;37mApricot\u001B[0m \u001B[1;37mAvocado\u001B[0m \u001B[1;37mBanana\u001B[0m \u001B[1;37mBlackberry\u001B[0m \u001B[1;37mBlueberry\u001B[0m \u001B[1;37mBoysenberry\u001B[0m\r\n\u001B[1;37mBreadfruit\u001B[0m \u001B[1;37mCacao\u001B[0m \u001B[1;37mCherry\u001B[0m \u001B[1;37mCloudberry\u001B[0m \u001B[1;37mCoconut\u001B[0m \u001B[1;37mDragonfruit\u001B[0m \u001B[1;37mElderberry\u001B[0m \r\n\u001B[1;37mGrape\u001B[0m \u001B[1;37mGrapefruit\u001B[0m \u001B[1;37mJackfruit\u001B[0m \u001B[1;37mKiwifruit\u001B[0m \u001B[1;37mLemon\u001B[0m \u001B[1;37mLime\u001B[0m \u001B[1;37mMango\u001B[0m \r\n\u001B[1;37mMelon\u001B[0m \u001B[1;37mOrange\u001B[0m \u001B[1;37mBlood orange\u001B[0m \u001B[1;37mClementine\u001B[0m \u001B[1;37mMandarine\u001B[0m \u001B[1;37mTangerine\u001B[0m \u001B[1;37mPapaya\u001B[0m \r\n\u001B[1;37mPassionfruit\u001B[0m \u001B[1;37mPlum\u001B[0m \u001B[1;37mPineapple\u001B[0m \u001B[1;37mPomelo\u001B[0m \u001B[1;37mRaspberry\u001B[0m \u001B[1;37mSalmonberry\u001B[0m \u001B[1;37mStrawberry\u001B[0m \r\n\u001B[1;37mXimenia\u001B[0m \u001B[1;37mYuzu\u001B[0m \r\n"]
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user