From a990c55476c94cb315d03371b22fa724df387251 Mon Sep 17 00:00:00 2001 From: Carsten Kragelund Date: Wed, 3 May 2023 23:36:43 +0200 Subject: [PATCH] Fancy opengraph --- go.mod | 6 + go.sum | 10 + .../image/fonts/JetBrainsMono-Regular.ttf | Bin 0 -> 274744 bytes modules/codeimage/image/image.go | 73 + modules/codeimage/parser/grammer.go | 1307 +++++++++++++++++ modules/codeimage/parser/parser.go | 74 + modules/highlight/highlight.go | 60 + routers/web/repo/view.go | 62 + routers/web/web.go | 1 + templates/base/head.tmpl | 13 + 10 files changed, 1606 insertions(+) create mode 100644 modules/codeimage/image/fonts/JetBrainsMono-Regular.ttf create mode 100644 modules/codeimage/image/image.go create mode 100644 modules/codeimage/parser/grammer.go create mode 100644 modules/codeimage/parser/parser.go diff --git a/go.mod b/go.mod index 7df4ce63f..31c77845d 100644 --- a/go.mod +++ b/go.mod @@ -119,6 +119,10 @@ require ( xorm.io/xorm v1.3.3-0.20221209153726-f1bfc5ce9830 ) +require github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 // indirect + +require golang.org/x/image v0.0.0-20220413100746-70e8d0d3baa9 // indirect + require ( cloud.google.com/go/compute v1.7.0 // indirect git.sr.ht/~mariusor/go-xsd-duration v0.0.0-20220703122237-02e73435a078 // indirect @@ -203,7 +207,9 @@ require ( github.com/hashicorp/hcl v1.0.0 // indirect github.com/imdario/mergo v0.3.13 // indirect github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 // indirect + github.com/jbuchbinder/gg v1.3.1-0.20220522202534-b71f553fdd3d github.com/jessevdk/go-flags v1.5.0 // indirect + github.com/jiro4989/textimg/v3 v3.1.8 github.com/josharian/intern v1.0.0 // indirect github.com/kevinburke/ssh_config v1.2.0 // indirect github.com/klauspost/pgzip v1.2.5 // indirect diff --git a/go.sum b/go.sum index 68c111abd..11d0cbf7b 100644 --- a/go.sum +++ b/go.sum @@ -535,6 +535,8 @@ github.com/golang-sql/civil v0.0.0-20220223132316-b832511892a9 h1:au07oEsX2xN0kt github.com/golang-sql/civil v0.0.0-20220223132316-b832511892a9/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0= github.com/golang-sql/sqlexp v0.1.0 h1:ZCD6MBpcuOVfGVqsEmY5/4FtYiKz6tSyUv9LPEDei6A= github.com/golang-sql/sqlexp v0.1.0/go.mod h1:J4ad9Vo8ZCWQ2GMrC4UCQy1JpCbwU9m3EOqtpKwwwHI= +github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 h1:DACJavvAHhabrF08vX0COfcOBJRhZ8lUbR+ZWIs0Y5g= +github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= github.com/golang/geo v0.0.0-20210211234256-740aa86cb551 h1:gtexQ/VGyN+VVFRXSFiguSNcXmS6rkKT+X7FdIrTtfo= github.com/golang/geo v0.0.0-20210211234256-740aa86cb551/go.mod h1:QZ0nwyI2jOfgRAoBvP+ab5aRr7c9x7lhGEJrKvBwjWI= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= @@ -787,10 +789,16 @@ github.com/jaytaylor/html2text v0.0.0-20211105163654-bc68cce691ba h1:QFQpJdgbON7 github.com/jaytaylor/html2text v0.0.0-20211105163654-bc68cce691ba/go.mod h1:CVKlgaMiht+LXvHG173ujK6JUhZXKb2u/BQtjPDIvyk= github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A= github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= +github.com/jbuchbinder/gg v1.3.0 h1:nfHEGrrXMCMIlLQIooBwPwn2IqEWhLQQ1s0WPmBpwdw= +github.com/jbuchbinder/gg v1.3.0/go.mod h1:V0Eu/AInMEKfU25ID6D/0FRIGj+Nz1EXId1Igjq1XI4= +github.com/jbuchbinder/gg v1.3.1-0.20220522202534-b71f553fdd3d h1:xUaIzSyN5X8wtiiOfxsLG+uFswf7CdSgd3f62t99XhE= +github.com/jbuchbinder/gg v1.3.1-0.20220522202534-b71f553fdd3d/go.mod h1:Rjxgiu1UOnrvAD1gplSXdFBNpytrSarkIqp98olsi/g= github.com/jessevdk/go-flags v1.5.0 h1:1jKYvbxEjfUl0fmqTCOfonvskHHXMjBySTLW4y9LFvc= github.com/jessevdk/go-flags v1.5.0/go.mod h1:Fw0T6WPc1dYxT4mKEZRfG5kJhaTDP9pj1c2EWnYs/m4= github.com/jhillyerd/enmime v0.10.1 h1:3VP8gFhK7R948YJBrna5bOgnTXEuPAoICo79kKkBKfA= github.com/jhillyerd/enmime v0.10.1/go.mod h1:Qpe8EEemJMFAF8+NZoWdpXvK2Yb9dRF0k/z6mkcDHsA= +github.com/jiro4989/textimg/v3 v3.1.8 h1:tfzkegBW59IRkpn/BLMUPTK0XRXW61xQQ4sYTzMCZDI= +github.com/jiro4989/textimg/v3 v3.1.8/go.mod h1:ohDSZdKqvQXFG9rdAAf/AVNxyvtjh32kj0nbW/zXo3k= github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg= github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0= @@ -1382,6 +1390,8 @@ golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EH golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/image v0.0.0-20220413100746-70e8d0d3baa9 h1:LRtI4W37N+KFebI/qV0OFiLUv4GLOWeEW5hn/KEJvxE= +golang.org/x/image v0.0.0-20220413100746-70e8d0d3baa9/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= diff --git a/modules/codeimage/image/fonts/JetBrainsMono-Regular.ttf b/modules/codeimage/image/fonts/JetBrainsMono-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..3b75b2690d8b096ce4737e637ce6d106a3315dc4 GIT binary patch literal 274744 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

wfA%)~>MF?yK_5y^d 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

4(C5 z@$-ZksPu75U0n`O4Y0wGgE-G zhQzBVWqQNZsSUv~V}kg3RsU5#twQ~YTfhTTrwF-(93@Bx!yrTZupUEn8nkU_E#Nqc ztLR#gj7ILG&HOC{&kEnb@A)&v#360P`a#mN($0eGC={}mAEXlZnwRpbrG{VlP;Bg( zf#0JU>_^55fg@)txzS5`1n4fj84)Q(uFLSpRr`qKZH_Dy*hq6xL5)F?=Z#lYu<@pZ z{Od!|e1K|t1i;N|0T?h7O9tK`rP1f6e=YhNxQEm|FGbvGhm0Z78Uqex96C5_pl*a_ z0X^HtplZ6S8VV{i&ag3n!drbW<>5%TzX8kRw9T1{!X-g_03MJG%;d=hhX#-+Mn@kY zxft3S4!#wBv{;&m6PeSTFGq1ZpT}A53AqDsA%FELuE^tzk6;GXqe;d(BS_?Vgu-*-Q9myz$aYdSoZP`s%Aj5`JM! z9OwU1oc~QgKGId;&fyd~QS1yMS3cG|GYE{D%AZ`y-y-uQu-M`ys1^pD-I3Pl?2Zji z)VxG=HBIDKXSdlrZGE$gf!_;XzwX97o1rIKig;xjH?$tWB@iSm9cZ6Dl*if$rQiZ6 zkWMsUCm|+Q_?D8z5(}>MO~h|lV~((ghvPR!97~yDczRvm| zLsB@j6*#m6{1;;6@VCi9f}qegQsN&1#gVr%5*+S4EW^l$F^gMc8AY_;0T~Y4&XnOa zhXJ54NirNot>98|0J4i%4O4~#D-6whZe<8Y2GY;Ll`s>!cXx-CL||!rH_39{@u9ir z&Tuxd8+O2FR^Qv7^wk00nWnX~$WMDGl-(c-zrN zDs8DCwiLd2_`l5-s%-{u1J;lwBl=hmW$5vw#DR9XNGnUkM4w`D%WvenYsVVh#yW^% zH}PAHRcgHp*;ed5T5qBmksU++Rrubf-_{H{DS=03$cHiGTVokl1sVW9;GU#^}A|-b}lnG#44r!)4RvdD1ktY{=L9A~|f`H?>k~zU>xKW{p zVggVz67@k)qK9$~DR(S#kv!IyI>Y%?UY2~ZGO{wVNQgA8un~_KFPK84Tvc8%9`eKD z4M=J)>pCVZJL`r8#y@y@XABMo8`G%B) z2+0t_K`$}*LU!Uq3JP5VOvMoc*X(M6!>R(R0y^VRB+-zSc?h*)3k!-V$B@xxU0I(P zXDcg%&1F4w`60G|C+VoC_L!G^>tO zOf!0N!Oc^3UM%l6h89y@+K<&hb`VElrPIqfssPM8v&G%-Jv zAA(o)n9(T07$_o}a}eIu!AwveGq21DG16|uu#rzSh?91zrf?A`ClCKkYg=>Kgt3*` zh@_^g>Pnw^bqx3T>#37xBFH*BvoLb;tH@R4VuV|ORy5Y#4G(;9Zcv89T%$<94vIP_ z$^f@r;)E$@A14bDg6=fq;sOzZ2Z|4_z_MJMBSXPIJ$Z8N>$Ru+V0p6F;Y?3%L^k5* zpC2gusD3GhzQ2L}j<~gdZ*CF$CZLQ*mXu+?7Wrm=3gge##i!=Q5i?c9(z!qwwlv6o zU}s6}Bc+5X_gQR_m*R6l z#6`pd!kiHEkeY&*VE1*CJ=t#eC1xVV_6zghz5TKF-+rx^bOGiWqFZbScazIXVd-o^ zHbi8*nAJ9Aa#Q2Ds`Ap}!d#y>RULYC`eTa&JG)(78iKjofQ*L__}92 z0dL0zz6&_NW;hG z<>pYW$-;u1KrXV#q-A@uHOwdxhSKTTVMhE?0QLn^fup=+3>-SA_Dzo$B7S<`RJs~4 za1}E}(KKO2IJ^Rp@%ob}plz+Qn4gs^sR){um{DVx&_b!YB?zDBq`D;tmZk{TdBp)5 zeQ8Mmbux?KC~mJ$ewa#`RG*w@_yV-f0W2$K0-a_|glPL#KmVzJt8qV6Uk-;sv;?<| zCjZtU6PiA8;&kIsZgzGqevEhM&zN<{flLH0tvHb3)iS1Lj_K^gf~m8Ub>Yx~Sve2x zo4LWfpf6Ly-&8}Gt|J;}IS`U7j}Z);6eZ<6cI3vL)fGI@I2pmM+<{+pmBw!-#Eh9Y zHm?fu@8wQA+jsy`ur0koV{T#0n2RuGg*({g(DE<`63LJ(4pgFDh7V!I=lWHAu0QAx z76*g^nU`qF%lZ24*}29Sd;Igp zj_nBCKBmKe+t>YbjhAzMw|_kw+0xY7Fwnzwpoc|>voY5OCS}#xa)!rCGF)j0q_P3j6GjWK z7<;5J-u%ptbMN7+2PDce%|=K@d3t&zN!JEeEu)N;9IsJ~L z{CKf;V0T;|d1_)n#QTg=V=fPum}{WwokFn$_}h}iSc_2V4tPS87>4^$qqj~Z%{4B- zD)7@M7`qaK8FT0I9Se;2u?Tz}?qCsAKM7ceX=)vyqbKFnk!&TNjC7^ZEk(|zI^se)#gm4YdND{6s7k-Qi!4c^h8R<|VLoh)$j>wEmw1NRFRGgc;$C{c*F!5^*(2W;6 zi=VS*Y2h014s)s)TqMTHOJK!xJqUo*LgS!T-rRqgYC95>m+7n^6tH$8ZA)Ooe&dVr z3K?XRxg*!o4n6c!AjaOcv^~*B0(@fU@FzjNkO9ksQze7Dm=%>h3ce^DSzI^bFem*J zS(ri2P?w#GRa2S*2OP-2NzBU&k5_NTsYa7z}tl^oz`+2)?6G9{2)N-N?E+SV%LWztD-jQbaK5 zyZYjbPrIq!Q&?PCR8(19=$U>~?>XnJ=_@R$%+Jfr%*z`UOzvBDecSbS`z!tU|887v z_K))8|IOw)>bZK@nukF&2yJyNUa^*yHelUAswh1HAuv9Kb9o$c-U(+%Uf8cuoStE- z{PNI8^pa6kSNi8gbPblw7u3_j)UbK+SMNoqU3~Gfi!Z#e>vEo8e0KTr3qRV4f$rS7 zvt#E@3{&BoHO{VwQ&WIc);PhoQqpxN^zs0?qrYF5a)lo@WSPn8=vun%eyYT5JSEAw2#!_XqYkMOJQA)Bw|2O zKo*&R1SSw5ql92Nyn_@Jb^a8HZn1>I{9ecUAWaTx*mzZRoCQEqXhosN*|s&e-L`t0 z3AzU#0_13)YPhAarH>?GU{SyoVlAPr+CV`M030A?>Zq6Ff}lnb5mG>%Ku{a{b!Rvp zAcGM`l{O}&8X!dw1Ag*98H3wa-*(%YZJe2~dg#HOCa5qbax(k_{IHW5^v5_?Adb1z z;fs!T(3(MciVwT?luq6ZmA4IX6&{48qN8$1?0vg--PU%?u3a5`?IkO(x^mUU#@8sh zR&?IUZ27}LS6Hu1yjE_ZoNXY#U`XzWpRn{K%SpDuyv>v<>H)hRMSriCgUVzQ$|#LC zX%6(vLxIeM`TPbo>5Ggrmhm-e+6sy7^M-9eM-XdmH4M=3qz9ZeZv%t@Gl2PO(#bv}9-@b@nw^w8&Z|m>h zo{$a!TEn_e)qO8ys2oAzYNUY2oEYB@6sPDreGGv7$HE$K7qY^#KuKM?0%SQ58iy3A z;9zA2Igb>O0OR7@he51N$a22We(I_1g@q?>Zf)Is;tLqns=ogIZOIv;qwR!w9f(|S zTQlB~p0It$*x<8WNQ0YgRrIByEBgpA0iqqgqv%Dx9HZnN86|Jfu7iOQ;+IrUP!a^F{3mRs91fub4+K`8~W8MjE9SUyfbP#^af0NU( z+sXC?cE=I*_=Ue9dHg~I1AY&F_Vj-F#V4 @?VdJoq}`JRhF5Tf&}Xq{xsdSYd&T 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 literal 0 HcmV?d00001 diff --git a/modules/codeimage/image/image.go b/modules/codeimage/image/image.go new file mode 100644 index 000000000..bac373284 --- /dev/null +++ b/modules/codeimage/image/image.go @@ -0,0 +1,73 @@ +package image + +import ( + "bytes" + "embed" + "image/color" + "strings" + + "github.com/jbuchbinder/gg" + "github.com/jiro4989/textimg/v3/token" +) + +//go:embed fonts +var fonts embed.FS + +func Draw(tokens token.Tokens) ([]byte, error) { + foreground := color.RGBA{205, 214, 244, 255} + background := color.RGBA{30, 30, 46, 255} + + dc := gg.NewContext(1200, 630) + fgCol := foreground + bgCol := background + dc.SetColor(bgCol) + if err := dc.LoadFontFaceFS(fonts, "fonts/JetBrainsMono-Regular.ttf", 20); err != nil { + return nil, err + } + dc.Clear() + curX, curY := 50.0, 50.0 + + for _, t := range tokens { + switch t.Kind { + case token.KindColor: + switch t.ColorType { + case token.ColorTypeReset: + fgCol = foreground + bgCol = background + case token.ColorTypeResetForeground: + fgCol = foreground + case token.ColorTypeResetBackground: + bgCol = background + case token.ColorTypeReverse: + fgCol, bgCol = bgCol, fgCol + case token.ColorTypeForeground: + fgCol = color.RGBA(t.Color) + case token.ColorTypeBackground: + bgCol = color.RGBA(t.Color) + } + case token.KindText: + w, h := dc.MeasureMultilineString(t.Text, 1.0) + dc.Push() + dc.SetColor(bgCol) + dc.DrawRectangle(curX, curY, w, h) + dc.Fill() + dc.Pop() + dc.SetColor(fgCol) + dc.DrawStringAnchored(strings.ReplaceAll(strings.ReplaceAll(t.Text, "\t", " "), "\n", ""), curX, curY, 0.0, 1.0) + curX += w + if strings.Contains(t.Text, "\n") { + curY += h + curX = 50 + } + } + } + dc.Push() + dc.SetColor(background) + dc.DrawRectangle(1150, 0, 50, 630) + dc.DrawRectangle(0, 580, 1200, 50) + dc.Fill() + dc.Pop() + buffer := new(bytes.Buffer) + dc.EncodePNG(buffer) + return buffer.Bytes(), nil +} diff --git a/modules/codeimage/parser/grammer.go b/modules/codeimage/parser/grammer.go new file mode 100644 index 000000000..ab1073724 --- /dev/null +++ b/modules/codeimage/parser/grammer.go @@ -0,0 +1,1307 @@ +package parser + +// Code generated by peg parser/grammer.peg DO NOT EDIT. + +import ( + "fmt" + "io" + "os" + "sort" + "strconv" + "strings" +) + +const endSymbol rune = 1114112 + +/* The rule types inferred from the grammar are below. */ +type pegRule uint8 + +const ( + ruleUnknown pegRule = iota + ruleroot + ruleignore + rulecolors + ruletext + rulecolor + rulestandard_color + ruleextended_color + ruleextended_color_256 + ruleextended_color_rgb + ruleextended_color_prefix + ruletext_attributes + rulezero + rulenumber + ruleprefix + ruleescape_sequence + rulecolor_suffix + rulenon_color_suffix + ruledelimiter + ruleAction0 + rulePegText + ruleAction1 + ruleAction2 + ruleAction3 + ruleAction4 + ruleAction5 + ruleAction6 + ruleAction7 + ruleAction8 + ruleAction9 + ruleAction10 + ruleAction11 +) + +var rul3s = [...]string{ + "Unknown", + "root", + "ignore", + "colors", + "text", + "color", + "standard_color", + "extended_color", + "extended_color_256", + "extended_color_rgb", + "extended_color_prefix", + "text_attributes", + "zero", + "number", + "prefix", + "escape_sequence", + "color_suffix", + "non_color_suffix", + "delimiter", + "Action0", + "PegText", + "Action1", + "Action2", + "Action3", + "Action4", + "Action5", + "Action6", + "Action7", + "Action8", + "Action9", + "Action10", + "Action11", +} + +type token32 struct { + pegRule + begin, end uint32 +} + +func (t *token32) String() string { + return fmt.Sprintf("\x1B[34m%v\x1B[m %v %v", rul3s[t.pegRule], t.begin, t.end) +} + +type node32 struct { + token32 + up, next *node32 +} + +func (node *node32) print(w io.Writer, pretty bool, buffer string) { + var print func(node *node32, depth int) + print = func(node *node32, depth int) { + for node != nil { + for c := 0; c < depth; c++ { + fmt.Fprintf(w, " ") + } + rule := rul3s[node.pegRule] + quote := strconv.Quote(string(([]rune(buffer)[node.begin:node.end]))) + if !pretty { + fmt.Fprintf(w, "%v %v\n", rule, quote) + } else { + fmt.Fprintf(w, "\x1B[36m%v\x1B[m %v\n", rule, quote) + } + if node.up != nil { + print(node.up, depth+1) + } + node = node.next + } + } + print(node, 0) +} + +func (node *node32) Print(w io.Writer, buffer string) { + node.print(w, false, buffer) +} + +func (node *node32) PrettyPrint(w io.Writer, buffer string) { + node.print(w, true, buffer) +} + +type tokens32 struct { + tree []token32 +} + +func (t *tokens32) Trim(length uint32) { + t.tree = t.tree[:length] +} + +func (t *tokens32) Print() { + for _, token := range t.tree { + fmt.Println(token.String()) + } +} + +func (t *tokens32) AST() *node32 { + type element struct { + node *node32 + down *element + } + tokens := t.Tokens() + var stack *element + for _, token := range tokens { + if token.begin == token.end { + continue + } + node := &node32{token32: token} + for stack != nil && stack.node.begin >= token.begin && stack.node.end <= token.end { + stack.node.next = node.up + node.up = stack.node + stack = stack.down + } + stack = &element{node: node, down: stack} + } + if stack != nil { + return stack.node + } + return nil +} + +func (t *tokens32) PrintSyntaxTree(buffer string) { + t.AST().Print(os.Stdout, buffer) +} + +func (t *tokens32) WriteSyntaxTree(w io.Writer, buffer string) { + t.AST().Print(w, buffer) +} + +func (t *tokens32) PrettyPrintSyntaxTree(buffer string) { + t.AST().PrettyPrint(os.Stdout, buffer) +} + +func (t *tokens32) Add(rule pegRule, begin, end, index uint32) { + tree, i := t.tree, int(index) + if i >= len(tree) { + t.tree = append(tree, token32{pegRule: rule, begin: begin, end: end}) + return + } + tree[i] = token32{pegRule: rule, begin: begin, end: end} +} + +func (t *tokens32) Tokens() []token32 { + return t.tree +} + +type Parser struct { + ParserFunc + + Buffer string + buffer []rune + rules [32]func() bool + parse func(rule ...int) error + reset func() + Pretty bool + tokens32 +} + +func (p *Parser) Parse(rule ...int) error { + return p.parse(rule...) +} + +func (p *Parser) Reset() { + p.reset() +} + +type textPosition struct { + line, symbol int +} + +type textPositionMap map[int]textPosition + +func translatePositions(buffer []rune, positions []int) textPositionMap { + length, translations, j, line, symbol := len(positions), make(textPositionMap, len(positions)), 0, 1, 0 + sort.Ints(positions) + +search: + for i, c := range buffer { + if c == '\n' { + line, symbol = line+1, 0 + } else { + symbol++ + } + if i == positions[j] { + translations[positions[j]] = textPosition{line, symbol} + for j++; j < length; j++ { + if i != positions[j] { + continue search + } + } + break search + } + } + + return translations +} + +type parseError struct { + p *Parser + max token32 +} + +func (e *parseError) Error() string { + tokens, err := []token32{e.max}, "\n" + positions, p := make([]int, 2*len(tokens)), 0 + for _, token := range tokens { + positions[p], p = int(token.begin), p+1 + positions[p], p = int(token.end), p+1 + } + translations := translatePositions(e.p.buffer, positions) + format := "parse error near %v (line %v symbol %v - line %v symbol %v):\n%v\n" + if e.p.Pretty { + format = "parse error near \x1B[34m%v\x1B[m (line %v symbol %v - line %v symbol %v):\n%v\n" + } + for _, token := range tokens { + begin, end := int(token.begin), int(token.end) + err += fmt.Sprintf(format, + rul3s[token.pegRule], + translations[begin].line, translations[begin].symbol, + translations[end].line, translations[end].symbol, + strconv.Quote(string(e.p.buffer[begin:end]))) + } + + return err +} + +func (p *Parser) PrintSyntaxTree() { + if p.Pretty { + p.tokens32.PrettyPrintSyntaxTree(p.Buffer) + } else { + p.tokens32.PrintSyntaxTree(p.Buffer) + } +} + +func (p *Parser) WriteSyntaxTree(w io.Writer) { + p.tokens32.WriteSyntaxTree(w, p.Buffer) +} + +func (p *Parser) SprintSyntaxTree() string { + var bldr strings.Builder + p.WriteSyntaxTree(&bldr) + return bldr.String() +} + +func (p *Parser) Execute() { + buffer, _buffer, text, begin, end := p.Buffer, p.buffer, "", 0, 0 + for _, token := range p.Tokens() { + switch token.pegRule { + + case rulePegText: + begin, end = int(token.begin), int(token.end) + text = string(_buffer[begin:end]) + + case ruleAction0: + p.pushResetColor() + case ruleAction1: + p.pushText(text) + case ruleAction2: + p.pushStandardColorWithCategory(text) + case ruleAction3: + p.pushResetForegroundColor() + case ruleAction4: + p.pushResetBackgroundColor() + case ruleAction5: + p.setExtendedColor256(text) + case ruleAction6: + p.setExtendedColorR(text) + case ruleAction7: + p.setExtendedColorG(text) + case ruleAction8: + p.setExtendedColorB(text) + case ruleAction9: + p.pushExtendedColor(text) + case ruleAction10: + p.pushResetColor() + case ruleAction11: + p.pushReverseColor() + + } + } + _, _, _, _, _ = buffer, _buffer, text, begin, end +} + +func Pretty(pretty bool) func(*Parser) error { + return func(p *Parser) error { + p.Pretty = pretty + return nil + } +} + +func Size(size int) func(*Parser) error { + return func(p *Parser) error { + p.tokens32 = tokens32{tree: make([]token32, 0, size)} + return nil + } +} +func (p *Parser) Init(options ...func(*Parser) error) error { + var ( + max token32 + position, tokenIndex uint32 + buffer []rune + ) + for _, option := range options { + err := option(p) + if err != nil { + return err + } + } + p.reset = func() { + max = token32{} + position, tokenIndex = 0, 0 + + p.buffer = []rune(p.Buffer) + if len(p.buffer) == 0 || p.buffer[len(p.buffer)-1] != endSymbol { + p.buffer = append(p.buffer, endSymbol) + } + buffer = p.buffer + } + p.reset() + + _rules := p.rules + tree := p.tokens32 + p.parse = func(rule ...int) error { + r := 1 + if len(rule) > 0 { + r = rule[0] + } + matches := p.rules[r]() + p.tokens32 = tree + if matches { + p.Trim(tokenIndex) + return nil + } + return &parseError{p, max} + } + + add := func(rule pegRule, begin uint32) { + tree.Add(rule, begin, position, tokenIndex) + tokenIndex++ + if begin != position && position > max.end { + max = token32{rule, begin, position} + } + } + + matchDot := func() bool { + if buffer[position] != endSymbol { + position++ + return true + } + return false + } + + /*matchChar := func(c byte) bool { + if buffer[position] == c { + position++ + return true + } + return false + }*/ + + /*matchRange := func(lower byte, upper byte) bool { + if c := buffer[position]; c >= lower && c <= upper { + position++ + return true + } + return false + }*/ + + _rules = [...]func() bool{ + nil, + /* 0 root <- <(colors / ignore / text)*> */ + func() bool { + { + position1 := position + l2: + { + position3, tokenIndex3 := position, tokenIndex + { + position4, tokenIndex4 := position, tokenIndex + if !_rules[rulecolors]() { + goto l5 + } + goto l4 + l5: + position, tokenIndex = position4, tokenIndex4 + if !_rules[ruleignore]() { + goto l6 + } + goto l4 + l6: + position, tokenIndex = position4, tokenIndex4 + if !_rules[ruletext]() { + goto l3 + } + } + l4: + goto l2 + l3: + position, tokenIndex = position3, tokenIndex3 + } + add(ruleroot, position1) + } + return true + }, + /* 1 ignore <- <((prefix number? non_color_suffix) / escape_sequence)> */ + func() bool { + position7, tokenIndex7 := position, tokenIndex + { + position8 := position + { + position9, tokenIndex9 := position, tokenIndex + if !_rules[ruleprefix]() { + goto l10 + } + { + position11, tokenIndex11 := position, tokenIndex + if !_rules[rulenumber]() { + goto l11 + } + goto l12 + l11: + position, tokenIndex = position11, tokenIndex11 + } + l12: + if !_rules[rulenon_color_suffix]() { + goto l10 + } + goto l9 + l10: + position, tokenIndex = position9, tokenIndex9 + if !_rules[ruleescape_sequence]() { + goto l7 + } + } + l9: + add(ruleignore, position8) + } + return true + l7: + position, tokenIndex = position7, tokenIndex7 + return false + }, + /* 2 colors <- <((prefix color_suffix Action0) / (prefix color (delimiter color)* color_suffix))> */ + func() bool { + position13, tokenIndex13 := position, tokenIndex + { + position14 := position + { + position15, tokenIndex15 := position, tokenIndex + if !_rules[ruleprefix]() { + goto l16 + } + if !_rules[rulecolor_suffix]() { + goto l16 + } + if !_rules[ruleAction0]() { + goto l16 + } + goto l15 + l16: + position, tokenIndex = position15, tokenIndex15 + if !_rules[ruleprefix]() { + goto l13 + } + if !_rules[rulecolor]() { + goto l13 + } + l17: + { + position18, tokenIndex18 := position, tokenIndex + if !_rules[ruledelimiter]() { + goto l18 + } + if !_rules[rulecolor]() { + goto l18 + } + goto l17 + l18: + position, tokenIndex = position18, tokenIndex18 + } + if !_rules[rulecolor_suffix]() { + goto l13 + } + } + l15: + add(rulecolors, position14) + } + return true + l13: + position, tokenIndex = position13, tokenIndex13 + return false + }, + /* 3 text <- <(<(!'\x1b' .)+> Action1)> */ + func() bool { + position19, tokenIndex19 := position, tokenIndex + { + position20 := position + { + position21 := position + { + position24, tokenIndex24 := position, tokenIndex + if buffer[position] != rune('\x1b') { + goto l24 + } + position++ + goto l19 + l24: + position, tokenIndex = position24, tokenIndex24 + } + if !matchDot() { + goto l19 + } + l22: + { + position23, tokenIndex23 := position, tokenIndex + { + position25, tokenIndex25 := position, tokenIndex + if buffer[position] != rune('\x1b') { + goto l25 + } + position++ + goto l23 + l25: + position, tokenIndex = position25, tokenIndex25 + } + if !matchDot() { + goto l23 + } + goto l22 + l23: + position, tokenIndex = position23, tokenIndex23 + } + add(rulePegText, position21) + } + if !_rules[ruleAction1]() { + goto l19 + } + add(ruletext, position20) + } + return true + l19: + position, tokenIndex = position19, tokenIndex19 + return false + }, + /* 4 color <- <(standard_color / extended_color / text_attributes)> */ + func() bool { + position26, tokenIndex26 := position, tokenIndex + { + position27 := position + { + position28, tokenIndex28 := position, tokenIndex + if !_rules[rulestandard_color]() { + goto l29 + } + goto l28 + l29: + position, tokenIndex = position28, tokenIndex28 + if !_rules[ruleextended_color]() { + goto l30 + } + goto l28 + l30: + position, tokenIndex = position28, tokenIndex28 + if !_rules[ruletext_attributes]() { + goto l26 + } + } + l28: + add(rulecolor, position27) + } + return true + l26: + position, tokenIndex = position26, tokenIndex26 + return false + }, + /* 5 standard_color <- <((zero <(('3' / '4' / '9' / ('1' '0')) [0-7])> Action2) / (zero <(('3' / '9') '9')> Action3) / (zero <(('4' / ('1' '0')) '9')> Action4))> */ + func() bool { + position31, tokenIndex31 := position, tokenIndex + { + position32 := position + { + position33, tokenIndex33 := position, tokenIndex + if !_rules[rulezero]() { + goto l34 + } + { + position35 := position + { + position36, tokenIndex36 := position, tokenIndex + if buffer[position] != rune('3') { + goto l37 + } + position++ + goto l36 + l37: + position, tokenIndex = position36, tokenIndex36 + if buffer[position] != rune('4') { + goto l38 + } + position++ + goto l36 + l38: + position, tokenIndex = position36, tokenIndex36 + if buffer[position] != rune('9') { + goto l39 + } + position++ + goto l36 + l39: + position, tokenIndex = position36, tokenIndex36 + if buffer[position] != rune('1') { + goto l34 + } + position++ + if buffer[position] != rune('0') { + goto l34 + } + position++ + } + l36: + if c := buffer[position]; c < rune('0') || c > rune('7') { + goto l34 + } + position++ + add(rulePegText, position35) + } + if !_rules[ruleAction2]() { + goto l34 + } + goto l33 + l34: + position, tokenIndex = position33, tokenIndex33 + if !_rules[rulezero]() { + goto l40 + } + { + position41 := position + { + position42, tokenIndex42 := position, tokenIndex + if buffer[position] != rune('3') { + goto l43 + } + position++ + goto l42 + l43: + position, tokenIndex = position42, tokenIndex42 + if buffer[position] != rune('9') { + goto l40 + } + position++ + } + l42: + if buffer[position] != rune('9') { + goto l40 + } + position++ + add(rulePegText, position41) + } + if !_rules[ruleAction3]() { + goto l40 + } + goto l33 + l40: + position, tokenIndex = position33, tokenIndex33 + if !_rules[rulezero]() { + goto l31 + } + { + position44 := position + { + position45, tokenIndex45 := position, tokenIndex + if buffer[position] != rune('4') { + goto l46 + } + position++ + goto l45 + l46: + position, tokenIndex = position45, tokenIndex45 + if buffer[position] != rune('1') { + goto l31 + } + position++ + if buffer[position] != rune('0') { + goto l31 + } + position++ + } + l45: + if buffer[position] != rune('9') { + goto l31 + } + position++ + add(rulePegText, position44) + } + if !_rules[ruleAction4]() { + goto l31 + } + } + l33: + add(rulestandard_color, position32) + } + return true + l31: + position, tokenIndex = position31, tokenIndex31 + return false + }, + /* 6 extended_color <- <(extended_color_256 / extended_color_rgb)> */ + func() bool { + position47, tokenIndex47 := position, tokenIndex + { + position48 := position + { + position49, tokenIndex49 := position, tokenIndex + if !_rules[ruleextended_color_256]() { + goto l50 + } + goto l49 + l50: + position, tokenIndex = position49, tokenIndex49 + if !_rules[ruleextended_color_rgb]() { + goto l47 + } + } + l49: + add(ruleextended_color, position48) + } + return true + l47: + position, tokenIndex = position47, tokenIndex47 + return false + }, + /* 7 extended_color_256 <- <(extended_color_prefix delimiter zero '5' delimiter Action5)> */ + func() bool { + position51, tokenIndex51 := position, tokenIndex + { + position52 := position + if !_rules[ruleextended_color_prefix]() { + goto l51 + } + if !_rules[ruledelimiter]() { + goto l51 + } + if !_rules[rulezero]() { + goto l51 + } + if buffer[position] != rune('5') { + goto l51 + } + position++ + if !_rules[ruledelimiter]() { + goto l51 + } + { + position53 := position + if !_rules[rulenumber]() { + goto l51 + } + add(rulePegText, position53) + } + if !_rules[ruleAction5]() { + goto l51 + } + add(ruleextended_color_256, position52) + } + return true + l51: + position, tokenIndex = position51, tokenIndex51 + return false + }, + /* 8 extended_color_rgb <- <(extended_color_prefix delimiter zero '2' delimiter Action6 delimiter Action7 delimiter Action8)> */ + func() bool { + position54, tokenIndex54 := position, tokenIndex + { + position55 := position + if !_rules[ruleextended_color_prefix]() { + goto l54 + } + if !_rules[ruledelimiter]() { + goto l54 + } + if !_rules[rulezero]() { + goto l54 + } + if buffer[position] != rune('2') { + goto l54 + } + position++ + if !_rules[ruledelimiter]() { + goto l54 + } + { + position56 := position + if !_rules[rulenumber]() { + goto l54 + } + add(rulePegText, position56) + } + if !_rules[ruleAction6]() { + goto l54 + } + if !_rules[ruledelimiter]() { + goto l54 + } + { + position57 := position + if !_rules[rulenumber]() { + goto l54 + } + add(rulePegText, position57) + } + if !_rules[ruleAction7]() { + goto l54 + } + if !_rules[ruledelimiter]() { + goto l54 + } + { + position58 := position + if !_rules[rulenumber]() { + goto l54 + } + add(rulePegText, position58) + } + if !_rules[ruleAction8]() { + goto l54 + } + add(ruleextended_color_rgb, position55) + } + return true + l54: + position, tokenIndex = position54, tokenIndex54 + return false + }, + /* 9 extended_color_prefix <- <(zero <(('3' / '4') '8')> Action9)> */ + func() bool { + position59, tokenIndex59 := position, tokenIndex + { + position60 := position + if !_rules[rulezero]() { + goto l59 + } + { + position61 := position + { + position62, tokenIndex62 := position, tokenIndex + if buffer[position] != rune('3') { + goto l63 + } + position++ + goto l62 + l63: + position, tokenIndex = position62, tokenIndex62 + if buffer[position] != rune('4') { + goto l59 + } + position++ + } + l62: + if buffer[position] != rune('8') { + goto l59 + } + position++ + add(rulePegText, position61) + } + if !_rules[ruleAction9]() { + goto l59 + } + add(ruleextended_color_prefix, position60) + } + return true + l59: + position, tokenIndex = position59, tokenIndex59 + return false + }, + /* 10 text_attributes <- <(('0' Action10) / ('7' Action11) / ('1' / '4' / '5' / '8'))+> */ + func() bool { + position64, tokenIndex64 := position, tokenIndex + { + position65 := position + { + position68, tokenIndex68 := position, tokenIndex + if buffer[position] != rune('0') { + goto l69 + } + position++ + if !_rules[ruleAction10]() { + goto l69 + } + goto l68 + l69: + position, tokenIndex = position68, tokenIndex68 + if buffer[position] != rune('7') { + goto l70 + } + position++ + if !_rules[ruleAction11]() { + goto l70 + } + goto l68 + l70: + position, tokenIndex = position68, tokenIndex68 + { + position71, tokenIndex71 := position, tokenIndex + if buffer[position] != rune('1') { + goto l72 + } + position++ + goto l71 + l72: + position, tokenIndex = position71, tokenIndex71 + if buffer[position] != rune('4') { + goto l73 + } + position++ + goto l71 + l73: + position, tokenIndex = position71, tokenIndex71 + if buffer[position] != rune('5') { + goto l74 + } + position++ + goto l71 + l74: + position, tokenIndex = position71, tokenIndex71 + if buffer[position] != rune('8') { + goto l64 + } + position++ + } + l71: + } + l68: + l66: + { + position67, tokenIndex67 := position, tokenIndex + { + position75, tokenIndex75 := position, tokenIndex + if buffer[position] != rune('0') { + goto l76 + } + position++ + if !_rules[ruleAction10]() { + goto l76 + } + goto l75 + l76: + position, tokenIndex = position75, tokenIndex75 + if buffer[position] != rune('7') { + goto l77 + } + position++ + if !_rules[ruleAction11]() { + goto l77 + } + goto l75 + l77: + position, tokenIndex = position75, tokenIndex75 + { + position78, tokenIndex78 := position, tokenIndex + if buffer[position] != rune('1') { + goto l79 + } + position++ + goto l78 + l79: + position, tokenIndex = position78, tokenIndex78 + if buffer[position] != rune('4') { + goto l80 + } + position++ + goto l78 + l80: + position, tokenIndex = position78, tokenIndex78 + if buffer[position] != rune('5') { + goto l81 + } + position++ + goto l78 + l81: + position, tokenIndex = position78, tokenIndex78 + if buffer[position] != rune('8') { + goto l67 + } + position++ + } + l78: + } + l75: + goto l66 + l67: + position, tokenIndex = position67, tokenIndex67 + } + add(ruletext_attributes, position65) + } + return true + l64: + position, tokenIndex = position64, tokenIndex64 + return false + }, + /* 11 zero <- <'0'*> */ + func() bool { + { + position83 := position + l84: + { + position85, tokenIndex85 := position, tokenIndex + if buffer[position] != rune('0') { + goto l85 + } + position++ + goto l84 + l85: + position, tokenIndex = position85, tokenIndex85 + } + add(rulezero, position83) + } + return true + }, + /* 12 number <- <[0-9]+> */ + func() bool { + position86, tokenIndex86 := position, tokenIndex + { + position87 := position + if c := buffer[position]; c < rune('0') || c > rune('9') { + goto l86 + } + position++ + l88: + { + position89, tokenIndex89 := position, tokenIndex + if c := buffer[position]; c < rune('0') || c > rune('9') { + goto l89 + } + position++ + goto l88 + l89: + position, tokenIndex = position89, tokenIndex89 + } + add(rulenumber, position87) + } + return true + l86: + position, tokenIndex = position86, tokenIndex86 + return false + }, + /* 13 prefix <- <(escape_sequence '[')> */ + func() bool { + position90, tokenIndex90 := position, tokenIndex + { + position91 := position + if !_rules[ruleescape_sequence]() { + goto l90 + } + if buffer[position] != rune('[') { + goto l90 + } + position++ + add(ruleprefix, position91) + } + return true + l90: + position, tokenIndex = position90, tokenIndex90 + return false + }, + /* 14 escape_sequence <- <'\x1b'> */ + func() bool { + position92, tokenIndex92 := position, tokenIndex + { + position93 := position + if buffer[position] != rune('\x1b') { + goto l92 + } + position++ + add(ruleescape_sequence, position93) + } + return true + l92: + position, tokenIndex = position92, tokenIndex92 + return false + }, + /* 15 color_suffix <- <'m'> */ + func() bool { + position94, tokenIndex94 := position, tokenIndex + { + position95 := position + if buffer[position] != rune('m') { + goto l94 + } + position++ + add(rulecolor_suffix, position95) + } + return true + l94: + position, tokenIndex = position94, tokenIndex94 + return false + }, + /* 16 non_color_suffix <- <([A-H] / 'f' / 'S' / 'T' / 'J' / 'K')> */ + func() bool { + position96, tokenIndex96 := position, tokenIndex + { + position97 := position + { + position98, tokenIndex98 := position, tokenIndex + if c := buffer[position]; c < rune('A') || c > rune('H') { + goto l99 + } + position++ + goto l98 + l99: + position, tokenIndex = position98, tokenIndex98 + if buffer[position] != rune('f') { + goto l100 + } + position++ + goto l98 + l100: + position, tokenIndex = position98, tokenIndex98 + if buffer[position] != rune('S') { + goto l101 + } + position++ + goto l98 + l101: + position, tokenIndex = position98, tokenIndex98 + if buffer[position] != rune('T') { + goto l102 + } + position++ + goto l98 + l102: + position, tokenIndex = position98, tokenIndex98 + if buffer[position] != rune('J') { + goto l103 + } + position++ + goto l98 + l103: + position, tokenIndex = position98, tokenIndex98 + if buffer[position] != rune('K') { + goto l96 + } + position++ + } + l98: + add(rulenon_color_suffix, position97) + } + return true + l96: + position, tokenIndex = position96, tokenIndex96 + return false + }, + /* 17 delimiter <- <';'> */ + func() bool { + position104, tokenIndex104 := position, tokenIndex + { + position105 := position + if buffer[position] != rune(';') { + goto l104 + } + position++ + add(ruledelimiter, position105) + } + return true + l104: + position, tokenIndex = position104, tokenIndex104 + return false + }, + /* 19 Action0 <- <{ p.pushResetColor() }> */ + func() bool { + { + add(ruleAction0, position) + } + return true + }, + nil, + /* 21 Action1 <- <{ p.pushText(text) }> */ + func() bool { + { + add(ruleAction1, position) + } + return true + }, + /* 22 Action2 <- <{ p.pushStandardColorWithCategory(text) }> */ + func() bool { + { + add(ruleAction2, position) + } + return true + }, + /* 23 Action3 <- <{ p.pushResetForegroundColor() }> */ + func() bool { + { + add(ruleAction3, position) + } + return true + }, + /* 24 Action4 <- <{ p.pushResetBackgroundColor() }> */ + func() bool { + { + add(ruleAction4, position) + } + return true + }, + /* 25 Action5 <- <{ p.setExtendedColor256(text) }> */ + func() bool { + { + add(ruleAction5, position) + } + return true + }, + /* 26 Action6 <- <{ p.setExtendedColorR(text) }> */ + func() bool { + { + add(ruleAction6, position) + } + return true + }, + /* 27 Action7 <- <{ p.setExtendedColorG(text) }> */ + func() bool { + { + add(ruleAction7, position) + } + return true + }, + /* 28 Action8 <- <{ p.setExtendedColorB(text) }> */ + func() bool { + { + add(ruleAction8, position) + } + return true + }, + /* 29 Action9 <- <{ p.pushExtendedColor(text) }> */ + func() bool { + { + add(ruleAction9, position) + } + return true + }, + /* 30 Action10 <- <{ p.pushResetColor() }> */ + func() bool { + { + add(ruleAction10, position) + } + return true + }, + /* 31 Action11 <- <{ p.pushReverseColor() }> */ + func() bool { + { + add(ruleAction11, position) + } + return true + }, + } + p.rules = _rules + return nil +} diff --git a/modules/codeimage/parser/parser.go b/modules/codeimage/parser/parser.go new file mode 100644 index 000000000..29babeb7e --- /dev/null +++ b/modules/codeimage/parser/parser.go @@ -0,0 +1,74 @@ +package parser + +import ( + "strconv" + + "github.com/jiro4989/textimg/v3/color" + "github.com/jiro4989/textimg/v3/token" +) + +type ParserFunc struct { + // pegが生成するTokensと名前が衝突するので別名にする + Tk token.Tokens +} + +func Parse(s string) (token.Tokens, error) { + p := &Parser{Buffer: s} + if err := p.Init(); err != nil { + return nil, err + } + if err := p.Parse(); err != nil { + return nil, err + } + + p.Execute() + return p.Tk, nil +} + +func (p *ParserFunc) pushResetColor() { + p.Tk = append(p.Tk, token.NewResetColor()) +} + +func (p *ParserFunc) pushResetForegroundColor() { + p.Tk = append(p.Tk, token.NewResetForegroundColor()) +} + +func (p *ParserFunc) pushResetBackgroundColor() { + p.Tk = append(p.Tk, token.NewResetBackgroundColor()) +} + +func (p *ParserFunc) pushReverseColor() { + p.Tk = append(p.Tk, token.NewReverseColor()) +} + +func (p *ParserFunc) pushText(text string) { + p.Tk = append(p.Tk, token.NewText(text)) +} + +func (p *ParserFunc) pushStandardColorWithCategory(text string) { + p.Tk = append(p.Tk, token.NewStandardColorWithCategory(text)) +} + +func (p *ParserFunc) pushExtendedColor(text string) { + p.Tk = append(p.Tk, token.NewExtendedColor(text)) +} + +func (p *ParserFunc) setExtendedColor256(text string) { + n, _ := strconv.ParseUint(text, 10, 8) + p.Tk[len(p.Tk)-1].Color = color.Map256[int(n)] +} + +func (p *ParserFunc) setExtendedColorR(text string) { + n, _ := strconv.ParseUint(text, 10, 8) + p.Tk[len(p.Tk)-1].Color.R = uint8(n) +} + +func (p *ParserFunc) setExtendedColorG(text string) { + n, _ := strconv.ParseUint(text, 10, 8) + p.Tk[len(p.Tk)-1].Color.G = uint8(n) +} + +func (p *ParserFunc) setExtendedColorB(text string) { + n, _ := strconv.ParseUint(text, 10, 8) + p.Tk[len(p.Tk)-1].Color.B = uint8(n) +} diff --git a/modules/highlight/highlight.go b/modules/highlight/highlight.go index a5c38940a..4dc62d8b9 100644 --- a/modules/highlight/highlight.go +++ b/modules/highlight/highlight.go @@ -20,6 +20,7 @@ import ( "code.gitea.io/gitea/modules/util" "github.com/alecthomas/chroma/v2" + "github.com/alecthomas/chroma/v2/formatters" "github.com/alecthomas/chroma/v2/formatters/html" "github.com/alecthomas/chroma/v2/lexers" "github.com/alecthomas/chroma/v2/styles" @@ -195,6 +196,65 @@ func File(fileName, language string, code []byte) ([]string, string, error) { return lines, lexerName, nil } +func AnsiFile(fileName, language string, code []byte) ([]string, string, error) { + NewContext() + + if len(code) > sizeLimit { + code = code[:sizeLimit] + } + + var lexer chroma.Lexer + + // provided language overrides everything + if language != "" { + lexer = lexers.Get(language) + } + + if lexer == nil { + if val, ok := highlightMapping[filepath.Ext(fileName)]; ok { + lexer = lexers.Get(val) + } + } + + if lexer == nil { + guessLanguage := analyze.GetCodeLanguage(fileName, code) + + lexer = lexers.Get(guessLanguage) + if lexer == nil { + lexer = lexers.Match(fileName) + if lexer == nil { + lexer = lexers.Fallback + } + } + } + + lexerName := formatLexerName(lexer.Config().Name) + + iterator, err := lexer.Tokenise(nil, string(code)) + if err != nil { + return nil, "", fmt.Errorf("can't tokenize code: %w", err) + } + + tokensLines := chroma.SplitTokensIntoLines(iterator.Tokens()) + ansiBuf := &bytes.Buffer{} + + formatter := formatters.TTY16m + + lines := make([]string, 0, len(tokensLines)) + for _, tokens := range tokensLines { + iterator = chroma.Literator(tokens...) + err = formatter.Format(ansiBuf, styles.CatppuccinMocha, iterator) + if err != nil { + return nil, "", fmt.Errorf("can't format code: %w", err) + } + + lines = append(lines, strings.Replace(ansiBuf.String(), "\033[3m", "", -1)) + ansiBuf.Reset() + } + + return lines, lexerName, nil +} + // PlainText returns non-highlighted HTML for code func PlainText(code []byte) []string { r := bufio.NewReader(bytes.NewReader(code)) diff --git a/routers/web/repo/view.go b/routers/web/repo/view.go index 2cc862ca5..8a2f84bcb 100644 --- a/routers/web/repo/view.go +++ b/routers/web/repo/view.go @@ -26,6 +26,8 @@ import ( user_model "code.gitea.io/gitea/models/user" "code.gitea.io/gitea/modules/base" "code.gitea.io/gitea/modules/charset" + "code.gitea.io/gitea/modules/codeimage/image" + "code.gitea.io/gitea/modules/codeimage/parser" "code.gitea.io/gitea/modules/container" "code.gitea.io/gitea/modules/context" "code.gitea.io/gitea/modules/git" @@ -509,6 +511,12 @@ func renderFile(ctx *context.Context, entry *git.TreeEntry, treeLink, rawLink st statuses[i], fileContent[i] = charset.EscapeControlHTML(line, ctx.Locale) status = status.Or(statuses[i]) } + + ogImg := ctx.Repo.Repository.HTMLURL() + "/src/og/" + ctx.Repo.BranchName + if len(ctx.Repo.TreePath) > 0 { + ogImg += "/" + util.PathEscapeSegments(ctx.Repo.TreePath) + } + ctx.Data["OgImage"] = ogImg ctx.Data["EscapeStatus"] = status ctx.Data["FileContent"] = fileContent ctx.Data["LineEscapeStatus"] = statuses @@ -699,6 +707,55 @@ func checkCitationFile(ctx *context.Context, entry *git.TreeEntry) { } } +func OgImage(ctx *context.Context) { + entry, err := ctx.Repo.Commit.GetTreeEntryByPath(ctx.Repo.TreePath) + if err != nil { + log.Error("%v", err) + return + } + blob := entry.Blob() + buf, dataRc, _, err := getFileReader(ctx.Repo.Repository.ID, blob) + if err != nil { + ctx.ServerError("getFileReader", err) + return + } + defer dataRc.Close() + + language := "" + indexFilename, worktree, deleteTemporaryFile, err := ctx.Repo.GitRepo.ReadTreeToTemporaryIndex(ctx.Repo.CommitID) + if err == nil { + defer deleteTemporaryFile() + filename2attribute2info, err := ctx.Repo.GitRepo.CheckAttribute(git.CheckAttributeOpts{ + CachedOnly: true, + Attributes: []string{"linguist-language", "gitlab-language"}, + Filenames: []string{ctx.Repo.TreePath}, + IndexFile: indexFilename, + WorkTree: worktree, + }) + if err != nil { + log.Error("Unable to load attributes for %-v:%s. Error: %v", ctx.Repo.Repository, ctx.Repo.TreePath, err) + } + + language = filename2attribute2info[ctx.Repo.TreePath]["linguist-language"] + if language == "" || language == "unspecified" { + language = filename2attribute2info[ctx.Repo.TreePath]["gitlab-language"] + } + if language == "unspecified" { + language = "" + } + } + + ansiContent, _, _ := highlight.AnsiFile(blob.Name(), language, buf) + log.Info("%s", ansiContent[0]) + tks, _ := parser.Parse(strings.Join(ansiContent, "")) + img, err := image.Draw(tks) + if err != nil { + log.Error("Drawing image failed: %v", err) + } + + ctx.Write(img) +} + // Home render repository home page func Home(ctx *context.Context) { if setting.EnableFeed { @@ -965,6 +1022,11 @@ func renderCode(ctx *context.Context) { ctx.HTML(http.StatusOK, tplRepoHome) } +func HighlightCodeToImage() error { + + return nil +} + // RenderUserCards render a page show users according the input template func RenderUserCards(ctx *context.Context, total int, getter func(opts db.ListOptions) ([]*user_model.User, error), tpl base.TplName) { page := ctx.FormInt("page") diff --git a/routers/web/web.go b/routers/web/web.go index 6aee3dbed..ce1314735 100644 --- a/routers/web/web.go +++ b/routers/web/web.go @@ -1470,6 +1470,7 @@ func RegisterRoutes(m *web.Route) { m.Get("/branch/*", context.RepoRefByType(context.RepoRefBranch), repo.Home) m.Get("/tag/*", context.RepoRefByType(context.RepoRefTag), repo.Home) m.Get("/commit/*", context.RepoRefByType(context.RepoRefCommit), repo.Home) + m.Get("/og/*", context.RepoRefByType(context.RepoRefBranch), repo.OgImage) // "/*" route is deprecated, and kept for backward compatibility m.Get("/*", context.RepoRefByType(context.RepoRefLegacy), repo.Home) }, repo.SetEditorconfigIfExists) diff --git a/templates/base/head.tmpl b/templates/base/head.tmpl index 709be20cb..d4880a99c 100644 --- a/templates/base/head.tmpl +++ b/templates/base/head.tmpl @@ -37,6 +37,19 @@ {{if .Owner.Description}} {{end}} +{{else if .PageIsViewCode }} + + + + + + + + + + + + {{else if .Repository}} {{if .Issue}}