dtext_rb 1.0.11 → 1.0.12
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/VERSION +1 -1
- data/dtext_rb.gemspec +3 -3
- data/ext/dtext/dtext.c +211 -179
- data/ext/dtext/dtext.rl +35 -17
- data/test/dtext_test.rb +3 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c6dc8726968b6ed437ba690472b77761d8d9d1e3
|
4
|
+
data.tar.gz: e0ef0b7f8183e18ca1406f116796a5e59c35ac64
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2b4b8c8f1cbf0819209b63e338425d0fea927ead929396536f9f44b15ed90eecae9182eab32bef172dcb5fb2b0d7342cda7b66b598fe781f89a9340b415df18e
|
7
|
+
data.tar.gz: 57807906d40b4f86ea8c57ea9fa61d039a45b6659e97ca69a7bc58314daa5a0cd2f552319fe49e6bb62c95c61396e8e93da54cc42d344cd9151d2975790404de
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.0.
|
1
|
+
1.0.12
|
data/dtext_rb.gemspec
CHANGED
@@ -2,17 +2,17 @@
|
|
2
2
|
# DO NOT EDIT THIS FILE DIRECTLY
|
3
3
|
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
|
-
# stub: dtext_rb 1.0.
|
5
|
+
# stub: dtext_rb 1.0.12 ruby lib
|
6
6
|
# stub: ext/dtext/extconf.rb
|
7
7
|
|
8
8
|
Gem::Specification.new do |s|
|
9
9
|
s.name = "dtext_rb"
|
10
|
-
s.version = "1.0.
|
10
|
+
s.version = "1.0.12"
|
11
11
|
|
12
12
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
13
13
|
s.require_paths = ["lib"]
|
14
14
|
s.authors = ["r888888888"]
|
15
|
-
s.date = "2016-09-
|
15
|
+
s.date = "2016-09-08"
|
16
16
|
s.description = "Compield DText parser"
|
17
17
|
s.email = "r888888888@gmail.com"
|
18
18
|
s.extensions = ["ext/dtext/extconf.rb"]
|
data/ext/dtext/dtext.c
CHANGED
@@ -28,6 +28,7 @@ typedef struct StateMachine {
|
|
28
28
|
const char * b2;
|
29
29
|
bool f_inline;
|
30
30
|
bool f_strip;
|
31
|
+
bool f_mentions;
|
31
32
|
bool list_mode;
|
32
33
|
bool header_mode;
|
33
34
|
GString * output;
|
@@ -71,11 +72,11 @@ static const int BLOCK_H5 = 27;
|
|
71
72
|
static const int BLOCK_H6 = 28;
|
72
73
|
|
73
74
|
|
74
|
-
#line
|
75
|
+
#line 1047 "ext/dtext/dtext.rl"
|
75
76
|
|
76
77
|
|
77
78
|
|
78
|
-
#line
|
79
|
+
#line 80 "ext/dtext/dtext.c"
|
79
80
|
static const unsigned char _dtext_to_state_actions[] = {
|
80
81
|
0, 0, 0, 0, 0, 0, 0, 0,
|
81
82
|
0, 0, 0, 0, 0, 0, 0, 0,
|
@@ -174,7 +175,7 @@ static const int dtext_en_list = 308;
|
|
174
175
|
static const int dtext_en_main = 249;
|
175
176
|
|
176
177
|
|
177
|
-
#line
|
178
|
+
#line 1050 "ext/dtext/dtext.rl"
|
178
179
|
|
179
180
|
static inline void underscore_string(char * str, size_t len) {
|
180
181
|
for (size_t i=0; i<len; ++i) {
|
@@ -475,6 +476,7 @@ static void init_machine(StateMachine * sm, const char * src, size_t len) {
|
|
475
476
|
sm->b2 = NULL;
|
476
477
|
sm->f_inline = false;
|
477
478
|
sm->f_strip = false;
|
479
|
+
sm->f_mentions = true;
|
478
480
|
sm->stack = g_array_sized_new(FALSE, TRUE, sizeof(int), 16);
|
479
481
|
sm->dstack = g_queue_new();
|
480
482
|
sm->list_nest = 0;
|
@@ -492,7 +494,7 @@ static void free_machine(StateMachine * sm) {
|
|
492
494
|
g_free(sm);
|
493
495
|
}
|
494
496
|
|
495
|
-
static StateMachine * parse_helper(const char * src, size_t len, bool f_strip, bool f_inline) {
|
497
|
+
static StateMachine * parse_helper(const char * src, size_t len, bool f_strip, bool f_inline, bool f_mentions) {
|
496
498
|
StateMachine * sm = NULL;
|
497
499
|
StateMachine * link_content_sm = NULL;
|
498
500
|
|
@@ -500,9 +502,10 @@ static StateMachine * parse_helper(const char * src, size_t len, bool f_strip, b
|
|
500
502
|
init_machine(sm, src, len);
|
501
503
|
sm->f_strip = f_strip;
|
502
504
|
sm->f_inline = f_inline;
|
505
|
+
sm->f_mentions = f_mentions;
|
503
506
|
|
504
507
|
|
505
|
-
#line
|
508
|
+
#line 509 "ext/dtext/dtext.c"
|
506
509
|
{
|
507
510
|
sm->cs = dtext_start;
|
508
511
|
( sm->top) = 0;
|
@@ -511,9 +514,9 @@ static StateMachine * parse_helper(const char * src, size_t len, bool f_strip, b
|
|
511
514
|
( sm->act) = 0;
|
512
515
|
}
|
513
516
|
|
514
|
-
#line
|
517
|
+
#line 1379 "ext/dtext/dtext.rl"
|
515
518
|
|
516
|
-
#line
|
519
|
+
#line 520 "ext/dtext/dtext.c"
|
517
520
|
{
|
518
521
|
if ( ( sm->p) == ( sm->pe) )
|
519
522
|
goto _test_eof;
|
@@ -523,7 +526,7 @@ _resume:
|
|
523
526
|
#line 1 "NONE"
|
524
527
|
{( sm->ts) = ( sm->p);}
|
525
528
|
break;
|
526
|
-
#line
|
529
|
+
#line 530 "ext/dtext/dtext.c"
|
527
530
|
}
|
528
531
|
|
529
532
|
switch ( sm->cs ) {
|
@@ -2742,25 +2745,25 @@ case 248:
|
|
2742
2745
|
tr297: sm->cs = 313; goto f3;
|
2743
2746
|
|
2744
2747
|
f7:
|
2745
|
-
#line
|
2748
|
+
#line 98 "ext/dtext/dtext.rl"
|
2746
2749
|
{
|
2747
2750
|
sm->a1 = sm->p;
|
2748
2751
|
}
|
2749
2752
|
goto _again;
|
2750
2753
|
f4:
|
2751
|
-
#line
|
2754
|
+
#line 102 "ext/dtext/dtext.rl"
|
2752
2755
|
{
|
2753
2756
|
sm->a2 = sm->p;
|
2754
2757
|
}
|
2755
2758
|
goto _again;
|
2756
2759
|
f3:
|
2757
|
-
#line
|
2760
|
+
#line 106 "ext/dtext/dtext.rl"
|
2758
2761
|
{
|
2759
2762
|
sm->b1 = sm->p;
|
2760
2763
|
}
|
2761
2764
|
goto _again;
|
2762
2765
|
f5:
|
2763
|
-
#line
|
2766
|
+
#line 110 "ext/dtext/dtext.rl"
|
2764
2767
|
{
|
2765
2768
|
sm->b2 = sm->p;
|
2766
2769
|
}
|
@@ -2770,7 +2773,7 @@ f61:
|
|
2770
2773
|
{( sm->te) = ( sm->p)+1;}
|
2771
2774
|
goto _again;
|
2772
2775
|
f38:
|
2773
|
-
#line
|
2776
|
+
#line 263 "ext/dtext/dtext.rl"
|
2774
2777
|
{( sm->te) = ( sm->p)+1;{
|
2775
2778
|
append(sm, true, "<a rel=\"nofollow\" href=\"/posts?tags=");
|
2776
2779
|
append_segment_uri_escaped(sm, sm->a1, sm->a2 - 1);
|
@@ -2780,7 +2783,7 @@ f38:
|
|
2780
2783
|
}}
|
2781
2784
|
goto _again;
|
2782
2785
|
f36:
|
2783
|
-
#line
|
2786
|
+
#line 271 "ext/dtext/dtext.rl"
|
2784
2787
|
{( sm->te) = ( sm->p)+1;{
|
2785
2788
|
GString * segment = g_string_new_len(sm->a1, sm->a2 - sm->a1);
|
2786
2789
|
GString * lowercase_segment = NULL;
|
@@ -2803,7 +2806,7 @@ f36:
|
|
2803
2806
|
}}
|
2804
2807
|
goto _again;
|
2805
2808
|
f37:
|
2806
|
-
#line
|
2809
|
+
#line 292 "ext/dtext/dtext.rl"
|
2807
2810
|
{( sm->te) = ( sm->p)+1;{
|
2808
2811
|
GString * segment = g_string_new_len(sm->a1, sm->a2 - sm->a1);
|
2809
2812
|
GString * lowercase_segment = NULL;
|
@@ -2826,14 +2829,14 @@ f37:
|
|
2826
2829
|
}}
|
2827
2830
|
goto _again;
|
2828
2831
|
f27:
|
2829
|
-
#line
|
2832
|
+
#line 416 "ext/dtext/dtext.rl"
|
2830
2833
|
{( sm->te) = ( sm->p)+1;{
|
2831
2834
|
dstack_push(sm, &INLINE_B);
|
2832
2835
|
append(sm, true, "<strong>");
|
2833
2836
|
}}
|
2834
2837
|
goto _again;
|
2835
2838
|
f18:
|
2836
|
-
#line
|
2839
|
+
#line 421 "ext/dtext/dtext.rl"
|
2837
2840
|
{( sm->te) = ( sm->p)+1;{
|
2838
2841
|
if (dstack_check(sm, INLINE_B)) {
|
2839
2842
|
dstack_pop(sm);
|
@@ -2844,14 +2847,14 @@ f18:
|
|
2844
2847
|
}}
|
2845
2848
|
goto _again;
|
2846
2849
|
f29:
|
2847
|
-
#line
|
2850
|
+
#line 430 "ext/dtext/dtext.rl"
|
2848
2851
|
{( sm->te) = ( sm->p)+1;{
|
2849
2852
|
dstack_push(sm, &INLINE_I);
|
2850
2853
|
append(sm, true, "<em>");
|
2851
2854
|
}}
|
2852
2855
|
goto _again;
|
2853
2856
|
f20:
|
2854
|
-
#line
|
2857
|
+
#line 435 "ext/dtext/dtext.rl"
|
2855
2858
|
{( sm->te) = ( sm->p)+1;{
|
2856
2859
|
if (dstack_check(sm, INLINE_I)) {
|
2857
2860
|
dstack_pop(sm);
|
@@ -2862,14 +2865,14 @@ f20:
|
|
2862
2865
|
}}
|
2863
2866
|
goto _again;
|
2864
2867
|
f32:
|
2865
|
-
#line
|
2868
|
+
#line 444 "ext/dtext/dtext.rl"
|
2866
2869
|
{( sm->te) = ( sm->p)+1;{
|
2867
2870
|
dstack_push(sm, &INLINE_S);
|
2868
2871
|
append(sm, true, "<s>");
|
2869
2872
|
}}
|
2870
2873
|
goto _again;
|
2871
2874
|
f21:
|
2872
|
-
#line
|
2875
|
+
#line 449 "ext/dtext/dtext.rl"
|
2873
2876
|
{( sm->te) = ( sm->p)+1;{
|
2874
2877
|
if (dstack_check(sm, INLINE_S)) {
|
2875
2878
|
dstack_pop(sm);
|
@@ -2880,14 +2883,14 @@ f21:
|
|
2880
2883
|
}}
|
2881
2884
|
goto _again;
|
2882
2885
|
f35:
|
2883
|
-
#line
|
2886
|
+
#line 458 "ext/dtext/dtext.rl"
|
2884
2887
|
{( sm->te) = ( sm->p)+1;{
|
2885
2888
|
dstack_push(sm, &INLINE_U);
|
2886
2889
|
append(sm, true, "<u>");
|
2887
2890
|
}}
|
2888
2891
|
goto _again;
|
2889
2892
|
f26:
|
2890
|
-
#line
|
2893
|
+
#line 463 "ext/dtext/dtext.rl"
|
2891
2894
|
{( sm->te) = ( sm->p)+1;{
|
2892
2895
|
if (dstack_check(sm, INLINE_U)) {
|
2893
2896
|
dstack_pop(sm);
|
@@ -2898,14 +2901,14 @@ f26:
|
|
2898
2901
|
}}
|
2899
2902
|
goto _again;
|
2900
2903
|
f34:
|
2901
|
-
#line
|
2904
|
+
#line 472 "ext/dtext/dtext.rl"
|
2902
2905
|
{( sm->te) = ( sm->p)+1;{
|
2903
2906
|
dstack_push(sm, &INLINE_TN);
|
2904
2907
|
append(sm, true, "<span class=\"tn\">");
|
2905
2908
|
}}
|
2906
2909
|
goto _again;
|
2907
2910
|
f25:
|
2908
|
-
#line
|
2911
|
+
#line 477 "ext/dtext/dtext.rl"
|
2909
2912
|
{( sm->te) = ( sm->p)+1;{
|
2910
2913
|
dstack_close_before_block(sm);
|
2911
2914
|
|
@@ -2921,7 +2924,7 @@ f25:
|
|
2921
2924
|
}}
|
2922
2925
|
goto _again;
|
2923
2926
|
f31:
|
2924
|
-
#line
|
2927
|
+
#line 505 "ext/dtext/dtext.rl"
|
2925
2928
|
{( sm->te) = ( sm->p)+1;{
|
2926
2929
|
g_debug("inline [quote]");
|
2927
2930
|
dstack_close_before_block(sm);
|
@@ -2930,7 +2933,7 @@ f31:
|
|
2930
2933
|
}}
|
2931
2934
|
goto _again;
|
2932
2935
|
f33:
|
2933
|
-
#line
|
2936
|
+
#line 528 "ext/dtext/dtext.rl"
|
2934
2937
|
{( sm->te) = ( sm->p)+1;{
|
2935
2938
|
g_debug("inline [spoiler]");
|
2936
2939
|
g_debug(" push <span>");
|
@@ -2939,7 +2942,7 @@ f33:
|
|
2939
2942
|
}}
|
2940
2943
|
goto _again;
|
2941
2944
|
f22:
|
2942
|
-
#line
|
2945
|
+
#line 535 "ext/dtext/dtext.rl"
|
2943
2946
|
{( sm->te) = ( sm->p)+1;{
|
2944
2947
|
g_debug("inline [/spoiler]");
|
2945
2948
|
dstack_close_before_block(sm);
|
@@ -2962,7 +2965,7 @@ f22:
|
|
2962
2965
|
}}
|
2963
2966
|
goto _again;
|
2964
2967
|
f28:
|
2965
|
-
#line
|
2968
|
+
#line 556 "ext/dtext/dtext.rl"
|
2966
2969
|
{( sm->te) = ( sm->p)+1;{
|
2967
2970
|
g_debug("inline [expand]");
|
2968
2971
|
dstack_rewind(sm);
|
@@ -2971,7 +2974,7 @@ f28:
|
|
2971
2974
|
}}
|
2972
2975
|
goto _again;
|
2973
2976
|
f19:
|
2974
|
-
#line
|
2977
|
+
#line 563 "ext/dtext/dtext.rl"
|
2975
2978
|
{( sm->te) = ( sm->p)+1;{
|
2976
2979
|
dstack_close_before_block(sm);
|
2977
2980
|
|
@@ -2985,7 +2988,7 @@ f19:
|
|
2985
2988
|
}}
|
2986
2989
|
goto _again;
|
2987
2990
|
f30:
|
2988
|
-
#line
|
2991
|
+
#line 575 "ext/dtext/dtext.rl"
|
2989
2992
|
{( sm->te) = ( sm->p)+1;{
|
2990
2993
|
dstack_push(sm, &INLINE_NODTEXT);
|
2991
2994
|
{
|
@@ -3003,7 +3006,7 @@ f30:
|
|
3003
3006
|
}}
|
3004
3007
|
goto _again;
|
3005
3008
|
f24:
|
3006
|
-
#line
|
3009
|
+
#line 580 "ext/dtext/dtext.rl"
|
3007
3010
|
{( sm->te) = ( sm->p)+1;{
|
3008
3011
|
if (dstack_check(sm, BLOCK_TH)) {
|
3009
3012
|
dstack_pop(sm);
|
@@ -3015,7 +3018,7 @@ f24:
|
|
3015
3018
|
}}
|
3016
3019
|
goto _again;
|
3017
3020
|
f23:
|
3018
|
-
#line
|
3021
|
+
#line 590 "ext/dtext/dtext.rl"
|
3019
3022
|
{( sm->te) = ( sm->p)+1;{
|
3020
3023
|
if (dstack_check(sm, BLOCK_TD)) {
|
3021
3024
|
dstack_pop(sm);
|
@@ -3027,7 +3030,7 @@ f23:
|
|
3027
3030
|
}}
|
3028
3031
|
goto _again;
|
3029
3032
|
f73:
|
3030
|
-
#line
|
3033
|
+
#line 600 "ext/dtext/dtext.rl"
|
3031
3034
|
{( sm->te) = ( sm->p)+1;{
|
3032
3035
|
g_debug("inline 0");
|
3033
3036
|
g_debug(" return");
|
@@ -3037,14 +3040,14 @@ f73:
|
|
3037
3040
|
}}
|
3038
3041
|
goto _again;
|
3039
3042
|
f72:
|
3040
|
-
#line
|
3043
|
+
#line 636 "ext/dtext/dtext.rl"
|
3041
3044
|
{( sm->te) = ( sm->p)+1;{
|
3042
3045
|
g_debug("inline char: %c", (*( sm->p)));
|
3043
3046
|
append_c_html_escaped(sm, (*( sm->p)));
|
3044
3047
|
}}
|
3045
3048
|
goto _again;
|
3046
3049
|
f99:
|
3047
|
-
#line
|
3050
|
+
#line 344 "ext/dtext/dtext.rl"
|
3048
3051
|
{( sm->te) = ( sm->p);( sm->p)--;{
|
3049
3052
|
if (is_boundary_c((*( sm->p)))) {
|
3050
3053
|
sm->b = true;
|
@@ -3066,7 +3069,7 @@ f99:
|
|
3066
3069
|
}}
|
3067
3070
|
goto _again;
|
3068
3071
|
f89:
|
3069
|
-
#line
|
3072
|
+
#line 493 "ext/dtext/dtext.rl"
|
3070
3073
|
{( sm->te) = ( sm->p);( sm->p)--;{
|
3071
3074
|
dstack_rewind(sm);
|
3072
3075
|
{( sm->p) = (( sm->a1 - 1))-1;}
|
@@ -3074,7 +3077,7 @@ f89:
|
|
3074
3077
|
}}
|
3075
3078
|
goto _again;
|
3076
3079
|
f88:
|
3077
|
-
#line
|
3080
|
+
#line 499 "ext/dtext/dtext.rl"
|
3078
3081
|
{( sm->te) = ( sm->p);( sm->p)--;{
|
3079
3082
|
dstack_rewind(sm);
|
3080
3083
|
{( sm->p) = (( sm->a1 - 1))-1;}
|
@@ -3082,7 +3085,7 @@ f88:
|
|
3082
3085
|
}}
|
3083
3086
|
goto _again;
|
3084
3087
|
f98:
|
3085
|
-
#line
|
3088
|
+
#line 512 "ext/dtext/dtext.rl"
|
3086
3089
|
{( sm->te) = ( sm->p);( sm->p)--;{
|
3087
3090
|
g_debug("inline [/quote]");
|
3088
3091
|
dstack_close_before_block(sm);
|
@@ -3100,7 +3103,7 @@ f98:
|
|
3100
3103
|
}}
|
3101
3104
|
goto _again;
|
3102
3105
|
f76:
|
3103
|
-
#line
|
3106
|
+
#line 608 "ext/dtext/dtext.rl"
|
3104
3107
|
{( sm->te) = ( sm->p);( sm->p)--;{
|
3105
3108
|
g_debug("inline newline2");
|
3106
3109
|
g_debug(" return");
|
@@ -3114,7 +3117,7 @@ f76:
|
|
3114
3117
|
}}
|
3115
3118
|
goto _again;
|
3116
3119
|
f75:
|
3117
|
-
#line
|
3120
|
+
#line 620 "ext/dtext/dtext.rl"
|
3118
3121
|
{( sm->te) = ( sm->p);( sm->p)--;{
|
3119
3122
|
g_debug("inline newline");
|
3120
3123
|
|
@@ -3128,20 +3131,20 @@ f75:
|
|
3128
3131
|
}}
|
3129
3132
|
goto _again;
|
3130
3133
|
f78:
|
3131
|
-
#line
|
3134
|
+
#line 632 "ext/dtext/dtext.rl"
|
3132
3135
|
{( sm->te) = ( sm->p);( sm->p)--;{
|
3133
3136
|
append_c(sm, ' ');
|
3134
3137
|
}}
|
3135
3138
|
goto _again;
|
3136
3139
|
f79:
|
3137
|
-
#line
|
3140
|
+
#line 636 "ext/dtext/dtext.rl"
|
3138
3141
|
{( sm->te) = ( sm->p);( sm->p)--;{
|
3139
3142
|
g_debug("inline char: %c", (*( sm->p)));
|
3140
3143
|
append_c_html_escaped(sm, (*( sm->p)));
|
3141
3144
|
}}
|
3142
3145
|
goto _again;
|
3143
3146
|
f17:
|
3144
|
-
#line
|
3147
|
+
#line 174 "ext/dtext/dtext.rl"
|
3145
3148
|
{{( sm->p) = ((( sm->te)))-1;}{
|
3146
3149
|
append(sm, true, "<a href=\"/forum_topics/");
|
3147
3150
|
append_segment(sm, true, sm->a1, sm->a2 - 1);
|
@@ -3152,7 +3155,7 @@ f17:
|
|
3152
3155
|
}}
|
3153
3156
|
goto _again;
|
3154
3157
|
f16:
|
3155
|
-
#line
|
3158
|
+
#line 241 "ext/dtext/dtext.rl"
|
3156
3159
|
{{( sm->p) = ((( sm->te)))-1;}{
|
3157
3160
|
append(sm, true, "<a href=\"http://www.pixiv.net/member_illust.php?mode=medium&illust_id=");
|
3158
3161
|
append_segment(sm, true, sm->a1, sm->a2 - 1);
|
@@ -3163,7 +3166,7 @@ f16:
|
|
3163
3166
|
}}
|
3164
3167
|
goto _again;
|
3165
3168
|
f12:
|
3166
|
-
#line
|
3169
|
+
#line 620 "ext/dtext/dtext.rl"
|
3167
3170
|
{{( sm->p) = ((( sm->te)))-1;}{
|
3168
3171
|
g_debug("inline newline");
|
3169
3172
|
|
@@ -3177,7 +3180,7 @@ f12:
|
|
3177
3180
|
}}
|
3178
3181
|
goto _again;
|
3179
3182
|
f13:
|
3180
|
-
#line
|
3183
|
+
#line 636 "ext/dtext/dtext.rl"
|
3181
3184
|
{{( sm->p) = ((( sm->te)))-1;}{
|
3182
3185
|
g_debug("inline char: %c", (*( sm->p)));
|
3183
3186
|
append_c_html_escaped(sm, (*( sm->p)));
|
@@ -3193,23 +3196,30 @@ f10:
|
|
3193
3196
|
break;
|
3194
3197
|
case 19:
|
3195
3198
|
{{( sm->p) = ((( sm->te)))-1;}
|
3196
|
-
if (
|
3197
|
-
|
3198
|
-
sm
|
3199
|
+
if (!sm->f_mentions || (sm->a1 > sm->pb && sm->a1 - 1 > sm->pb && sm->a1[-2] != ' ' && sm->a1[-2] != '\r' && sm->a1[-2] != '\n')) {
|
3200
|
+
// handle emails
|
3201
|
+
append_c(sm, '@');
|
3202
|
+
append_segment_html_escaped(sm, sm->a1, sm->a2 - 1);
|
3203
|
+
|
3199
3204
|
} else {
|
3200
|
-
sm->
|
3201
|
-
|
3202
|
-
|
3205
|
+
if (is_boundary_c((*( sm->p)))) {
|
3206
|
+
sm->b = true;
|
3207
|
+
sm->d = 2;
|
3208
|
+
} else {
|
3209
|
+
sm->b = false;
|
3210
|
+
sm->d = 1;
|
3211
|
+
}
|
3203
3212
|
|
3204
|
-
|
3205
|
-
|
3206
|
-
|
3207
|
-
|
3208
|
-
|
3209
|
-
|
3213
|
+
append(sm, true, "<a rel=\"nofollow\" href=\"/users?name=");
|
3214
|
+
append_segment_uri_escaped(sm, sm->a1, sm->a2 - sm->d);
|
3215
|
+
append(sm, true, "\">");
|
3216
|
+
append_c(sm, '@');
|
3217
|
+
append_segment_html_escaped(sm, sm->a1, sm->a2 - sm->d);
|
3218
|
+
append(sm, true, "</a>");
|
3210
3219
|
|
3211
|
-
|
3212
|
-
|
3220
|
+
if (sm->b) {
|
3221
|
+
append_c_html_escaped(sm, (*( sm->p)));
|
3222
|
+
}
|
3213
3223
|
}
|
3214
3224
|
}
|
3215
3225
|
break;
|
@@ -3243,7 +3253,7 @@ f10:
|
|
3243
3253
|
}
|
3244
3254
|
goto _again;
|
3245
3255
|
f40:
|
3246
|
-
#line
|
3256
|
+
#line 643 "ext/dtext/dtext.rl"
|
3247
3257
|
{( sm->te) = ( sm->p)+1;{
|
3248
3258
|
if (dstack_check(sm, BLOCK_CODE)) {
|
3249
3259
|
dstack_rewind(sm);
|
@@ -3254,32 +3264,32 @@ f40:
|
|
3254
3264
|
}}
|
3255
3265
|
goto _again;
|
3256
3266
|
f101:
|
3257
|
-
#line
|
3267
|
+
#line 652 "ext/dtext/dtext.rl"
|
3258
3268
|
{( sm->te) = ( sm->p)+1;{
|
3259
3269
|
( sm->p)--;
|
3260
3270
|
{ sm->cs = ( ((int *)sm->stack->data))[--( sm->top)];goto _again;}
|
3261
3271
|
}}
|
3262
3272
|
goto _again;
|
3263
3273
|
f100:
|
3264
|
-
#line
|
3274
|
+
#line 657 "ext/dtext/dtext.rl"
|
3265
3275
|
{( sm->te) = ( sm->p)+1;{
|
3266
3276
|
append_c_html_escaped(sm, (*( sm->p)));
|
3267
3277
|
}}
|
3268
3278
|
goto _again;
|
3269
3279
|
f102:
|
3270
|
-
#line
|
3280
|
+
#line 657 "ext/dtext/dtext.rl"
|
3271
3281
|
{( sm->te) = ( sm->p);( sm->p)--;{
|
3272
3282
|
append_c_html_escaped(sm, (*( sm->p)));
|
3273
3283
|
}}
|
3274
3284
|
goto _again;
|
3275
3285
|
f39:
|
3276
|
-
#line
|
3286
|
+
#line 657 "ext/dtext/dtext.rl"
|
3277
3287
|
{{( sm->p) = ((( sm->te)))-1;}{
|
3278
3288
|
append_c_html_escaped(sm, (*( sm->p)));
|
3279
3289
|
}}
|
3280
3290
|
goto _again;
|
3281
3291
|
f42:
|
3282
|
-
#line
|
3292
|
+
#line 663 "ext/dtext/dtext.rl"
|
3283
3293
|
{( sm->te) = ( sm->p)+1;{
|
3284
3294
|
if (dstack_check(sm, BLOCK_NODTEXT)) {
|
3285
3295
|
dstack_pop(sm);
|
@@ -3294,39 +3304,39 @@ f42:
|
|
3294
3304
|
}}
|
3295
3305
|
goto _again;
|
3296
3306
|
f104:
|
3297
|
-
#line
|
3307
|
+
#line 676 "ext/dtext/dtext.rl"
|
3298
3308
|
{( sm->te) = ( sm->p)+1;{
|
3299
3309
|
( sm->p)--;
|
3300
3310
|
{ sm->cs = ( ((int *)sm->stack->data))[--( sm->top)];goto _again;}
|
3301
3311
|
}}
|
3302
3312
|
goto _again;
|
3303
3313
|
f103:
|
3304
|
-
#line
|
3314
|
+
#line 681 "ext/dtext/dtext.rl"
|
3305
3315
|
{( sm->te) = ( sm->p)+1;{
|
3306
3316
|
append_c_html_escaped(sm, (*( sm->p)));
|
3307
3317
|
}}
|
3308
3318
|
goto _again;
|
3309
3319
|
f105:
|
3310
|
-
#line
|
3320
|
+
#line 681 "ext/dtext/dtext.rl"
|
3311
3321
|
{( sm->te) = ( sm->p);( sm->p)--;{
|
3312
3322
|
append_c_html_escaped(sm, (*( sm->p)));
|
3313
3323
|
}}
|
3314
3324
|
goto _again;
|
3315
3325
|
f41:
|
3316
|
-
#line
|
3326
|
+
#line 681 "ext/dtext/dtext.rl"
|
3317
3327
|
{{( sm->p) = ((( sm->te)))-1;}{
|
3318
3328
|
append_c_html_escaped(sm, (*( sm->p)));
|
3319
3329
|
}}
|
3320
3330
|
goto _again;
|
3321
3331
|
f51:
|
3322
|
-
#line
|
3332
|
+
#line 687 "ext/dtext/dtext.rl"
|
3323
3333
|
{( sm->te) = ( sm->p)+1;{
|
3324
3334
|
dstack_push(sm, &BLOCK_THEAD);
|
3325
3335
|
append_block(sm, "<thead>");
|
3326
3336
|
}}
|
3327
3337
|
goto _again;
|
3328
3338
|
f46:
|
3329
|
-
#line
|
3339
|
+
#line 692 "ext/dtext/dtext.rl"
|
3330
3340
|
{( sm->te) = ( sm->p)+1;{
|
3331
3341
|
if (dstack_check(sm, BLOCK_THEAD)) {
|
3332
3342
|
dstack_pop(sm);
|
@@ -3337,14 +3347,14 @@ f46:
|
|
3337
3347
|
}}
|
3338
3348
|
goto _again;
|
3339
3349
|
f48:
|
3340
|
-
#line
|
3350
|
+
#line 701 "ext/dtext/dtext.rl"
|
3341
3351
|
{( sm->te) = ( sm->p)+1;{
|
3342
3352
|
dstack_push(sm, &BLOCK_TBODY);
|
3343
3353
|
append_block(sm, "<tbody>");
|
3344
3354
|
}}
|
3345
3355
|
goto _again;
|
3346
3356
|
f45:
|
3347
|
-
#line
|
3357
|
+
#line 706 "ext/dtext/dtext.rl"
|
3348
3358
|
{( sm->te) = ( sm->p)+1;{
|
3349
3359
|
if (dstack_check(sm, BLOCK_TBODY)) {
|
3350
3360
|
dstack_pop(sm);
|
@@ -3355,7 +3365,7 @@ f45:
|
|
3355
3365
|
}}
|
3356
3366
|
goto _again;
|
3357
3367
|
f50:
|
3358
|
-
#line
|
3368
|
+
#line 715 "ext/dtext/dtext.rl"
|
3359
3369
|
{( sm->te) = ( sm->p)+1;{
|
3360
3370
|
dstack_push(sm, &BLOCK_TH);
|
3361
3371
|
append_block(sm, "<th>");
|
@@ -3374,14 +3384,14 @@ f50:
|
|
3374
3384
|
}}
|
3375
3385
|
goto _again;
|
3376
3386
|
f52:
|
3377
|
-
#line
|
3387
|
+
#line 721 "ext/dtext/dtext.rl"
|
3378
3388
|
{( sm->te) = ( sm->p)+1;{
|
3379
3389
|
dstack_push(sm, &BLOCK_TR);
|
3380
3390
|
append_block(sm, "<tr>");
|
3381
3391
|
}}
|
3382
3392
|
goto _again;
|
3383
3393
|
f47:
|
3384
|
-
#line
|
3394
|
+
#line 726 "ext/dtext/dtext.rl"
|
3385
3395
|
{( sm->te) = ( sm->p)+1;{
|
3386
3396
|
if (dstack_check(sm, BLOCK_TR)) {
|
3387
3397
|
dstack_pop(sm);
|
@@ -3392,7 +3402,7 @@ f47:
|
|
3392
3402
|
}}
|
3393
3403
|
goto _again;
|
3394
3404
|
f49:
|
3395
|
-
#line
|
3405
|
+
#line 735 "ext/dtext/dtext.rl"
|
3396
3406
|
{( sm->te) = ( sm->p)+1;{
|
3397
3407
|
dstack_push(sm, &BLOCK_TD);
|
3398
3408
|
append_block(sm, "<td>");
|
@@ -3411,7 +3421,7 @@ f49:
|
|
3411
3421
|
}}
|
3412
3422
|
goto _again;
|
3413
3423
|
f44:
|
3414
|
-
#line
|
3424
|
+
#line 741 "ext/dtext/dtext.rl"
|
3415
3425
|
{( sm->te) = ( sm->p)+1;{
|
3416
3426
|
if (dstack_check(sm, BLOCK_TABLE)) {
|
3417
3427
|
dstack_pop(sm);
|
@@ -3423,26 +3433,26 @@ f44:
|
|
3423
3433
|
}}
|
3424
3434
|
goto _again;
|
3425
3435
|
f107:
|
3426
|
-
#line
|
3436
|
+
#line 751 "ext/dtext/dtext.rl"
|
3427
3437
|
{( sm->te) = ( sm->p)+1;{
|
3428
3438
|
( sm->p)--;
|
3429
3439
|
{ sm->cs = ( ((int *)sm->stack->data))[--( sm->top)];goto _again;}
|
3430
3440
|
}}
|
3431
3441
|
goto _again;
|
3432
3442
|
f106:
|
3433
|
-
#line
|
3443
|
+
#line 756 "ext/dtext/dtext.rl"
|
3434
3444
|
{( sm->te) = ( sm->p)+1;}
|
3435
3445
|
goto _again;
|
3436
3446
|
f108:
|
3437
|
-
#line
|
3447
|
+
#line 756 "ext/dtext/dtext.rl"
|
3438
3448
|
{( sm->te) = ( sm->p);( sm->p)--;}
|
3439
3449
|
goto _again;
|
3440
3450
|
f43:
|
3441
|
-
#line
|
3451
|
+
#line 756 "ext/dtext/dtext.rl"
|
3442
3452
|
{{( sm->p) = ((( sm->te)))-1;}}
|
3443
3453
|
goto _again;
|
3444
3454
|
f110:
|
3445
|
-
#line
|
3455
|
+
#line 799 "ext/dtext/dtext.rl"
|
3446
3456
|
{( sm->te) = ( sm->p)+1;{
|
3447
3457
|
dstack_close_list(sm);
|
3448
3458
|
{( sm->p) = (( sm->ts))-1;}
|
@@ -3450,7 +3460,7 @@ f110:
|
|
3450
3460
|
}}
|
3451
3461
|
goto _again;
|
3452
3462
|
f109:
|
3453
|
-
#line
|
3463
|
+
#line 807 "ext/dtext/dtext.rl"
|
3454
3464
|
{( sm->te) = ( sm->p)+1;{
|
3455
3465
|
dstack_rewind(sm);
|
3456
3466
|
( sm->p)--;
|
@@ -3458,7 +3468,7 @@ f109:
|
|
3458
3468
|
}}
|
3459
3469
|
goto _again;
|
3460
3470
|
f112:
|
3461
|
-
#line
|
3471
|
+
#line 807 "ext/dtext/dtext.rl"
|
3462
3472
|
{( sm->te) = ( sm->p);( sm->p)--;{
|
3463
3473
|
dstack_rewind(sm);
|
3464
3474
|
( sm->p)--;
|
@@ -3466,7 +3476,7 @@ f112:
|
|
3466
3476
|
}}
|
3467
3477
|
goto _again;
|
3468
3478
|
f55:
|
3469
|
-
#line
|
3479
|
+
#line 807 "ext/dtext/dtext.rl"
|
3470
3480
|
{{( sm->p) = ((( sm->te)))-1;}{
|
3471
3481
|
dstack_rewind(sm);
|
3472
3482
|
( sm->p)--;
|
@@ -3490,7 +3500,7 @@ f53:
|
|
3490
3500
|
}
|
3491
3501
|
goto _again;
|
3492
3502
|
f6:
|
3493
|
-
#line
|
3503
|
+
#line 939 "ext/dtext/dtext.rl"
|
3494
3504
|
{( sm->te) = ( sm->p)+1;{
|
3495
3505
|
g_debug("block [/spoiler]");
|
3496
3506
|
dstack_close_before_block(sm);
|
@@ -3501,7 +3511,7 @@ f6:
|
|
3501
3511
|
}}
|
3502
3512
|
goto _again;
|
3503
3513
|
f8:
|
3504
|
-
#line
|
3514
|
+
#line 986 "ext/dtext/dtext.rl"
|
3505
3515
|
{( sm->te) = ( sm->p)+1;{
|
3506
3516
|
dstack_close_before_block(sm);
|
3507
3517
|
dstack_push(sm, &BLOCK_TABLE);
|
@@ -3521,7 +3531,7 @@ f8:
|
|
3521
3531
|
}}
|
3522
3532
|
goto _again;
|
3523
3533
|
f9:
|
3524
|
-
#line
|
3534
|
+
#line 993 "ext/dtext/dtext.rl"
|
3525
3535
|
{( sm->te) = ( sm->p)+1;{
|
3526
3536
|
dstack_push(sm, &BLOCK_TN);
|
3527
3537
|
append_block(sm, "<p class=\"tn\">");
|
@@ -3540,7 +3550,7 @@ f9:
|
|
3540
3550
|
}}
|
3541
3551
|
goto _again;
|
3542
3552
|
f59:
|
3543
|
-
#line
|
3553
|
+
#line 1009 "ext/dtext/dtext.rl"
|
3544
3554
|
{( sm->te) = ( sm->p)+1;{
|
3545
3555
|
g_debug("block 0");
|
3546
3556
|
g_debug(" close dstack");
|
@@ -3548,7 +3558,7 @@ f59:
|
|
3548
3558
|
}}
|
3549
3559
|
goto _again;
|
3550
3560
|
f58:
|
3551
|
-
#line
|
3561
|
+
#line 1032 "ext/dtext/dtext.rl"
|
3552
3562
|
{( sm->te) = ( sm->p)+1;{
|
3553
3563
|
g_debug("block char: %c", (*( sm->p)));
|
3554
3564
|
( sm->p)--;
|
@@ -3575,10 +3585,11 @@ f58:
|
|
3575
3585
|
}}
|
3576
3586
|
goto _again;
|
3577
3587
|
f64:
|
3578
|
-
#line
|
3588
|
+
#line 815 "ext/dtext/dtext.rl"
|
3579
3589
|
{( sm->te) = ( sm->p);( sm->p)--;{
|
3580
3590
|
char header = *sm->a1;
|
3581
3591
|
GString * id_name = g_string_new_len(sm->b1, sm->b2 - sm->b1);
|
3592
|
+
id_name = g_string_prepend(id_name, "dtext-");
|
3582
3593
|
|
3583
3594
|
if (sm->f_inline) {
|
3584
3595
|
header = '6';
|
@@ -3648,7 +3659,7 @@ f64:
|
|
3648
3659
|
}}
|
3649
3660
|
goto _again;
|
3650
3661
|
f65:
|
3651
|
-
#line
|
3662
|
+
#line 876 "ext/dtext/dtext.rl"
|
3652
3663
|
{( sm->te) = ( sm->p);( sm->p)--;{
|
3653
3664
|
char header = *sm->a1;
|
3654
3665
|
|
@@ -3706,7 +3717,7 @@ f65:
|
|
3706
3717
|
}}
|
3707
3718
|
goto _again;
|
3708
3719
|
f70:
|
3709
|
-
#line
|
3720
|
+
#line 921 "ext/dtext/dtext.rl"
|
3710
3721
|
{( sm->te) = ( sm->p);( sm->p)--;{
|
3711
3722
|
g_debug("block [quote]");
|
3712
3723
|
g_debug(" push quote");
|
@@ -3717,7 +3728,7 @@ f70:
|
|
3717
3728
|
}}
|
3718
3729
|
goto _again;
|
3719
3730
|
f71:
|
3720
|
-
#line
|
3731
|
+
#line 930 "ext/dtext/dtext.rl"
|
3721
3732
|
{( sm->te) = ( sm->p);( sm->p)--;{
|
3722
3733
|
g_debug("block [spoiler]");
|
3723
3734
|
g_debug(" push spoiler");
|
@@ -3728,7 +3739,7 @@ f71:
|
|
3728
3739
|
}}
|
3729
3740
|
goto _again;
|
3730
3741
|
f66:
|
3731
|
-
#line
|
3742
|
+
#line 948 "ext/dtext/dtext.rl"
|
3732
3743
|
{( sm->te) = ( sm->p);( sm->p)--;{
|
3733
3744
|
g_debug("block [code]");
|
3734
3745
|
dstack_close_before_block(sm);
|
@@ -3749,7 +3760,7 @@ f66:
|
|
3749
3760
|
}}
|
3750
3761
|
goto _again;
|
3751
3762
|
f68:
|
3752
|
-
#line
|
3763
|
+
#line 956 "ext/dtext/dtext.rl"
|
3753
3764
|
{( sm->te) = ( sm->p);( sm->p)--;{
|
3754
3765
|
g_debug("block [expand]");
|
3755
3766
|
dstack_close_before_block(sm);
|
@@ -3760,7 +3771,7 @@ f68:
|
|
3760
3771
|
}}
|
3761
3772
|
goto _again;
|
3762
3773
|
f67:
|
3763
|
-
#line
|
3774
|
+
#line 965 "ext/dtext/dtext.rl"
|
3764
3775
|
{( sm->te) = ( sm->p);( sm->p)--;{
|
3765
3776
|
g_debug("block [expand=]");
|
3766
3777
|
dstack_close_before_block(sm);
|
@@ -3774,7 +3785,7 @@ f67:
|
|
3774
3785
|
}}
|
3775
3786
|
goto _again;
|
3776
3787
|
f69:
|
3777
|
-
#line
|
3788
|
+
#line 977 "ext/dtext/dtext.rl"
|
3778
3789
|
{( sm->te) = ( sm->p);( sm->p)--;{
|
3779
3790
|
g_debug("block [nodtext]");
|
3780
3791
|
dstack_close_before_block(sm);
|
@@ -3796,7 +3807,7 @@ f69:
|
|
3796
3807
|
}}
|
3797
3808
|
goto _again;
|
3798
3809
|
f62:
|
3799
|
-
#line
|
3810
|
+
#line 1032 "ext/dtext/dtext.rl"
|
3800
3811
|
{( sm->te) = ( sm->p);( sm->p)--;{
|
3801
3812
|
g_debug("block char: %c", (*( sm->p)));
|
3802
3813
|
( sm->p)--;
|
@@ -3823,7 +3834,7 @@ f62:
|
|
3823
3834
|
}}
|
3824
3835
|
goto _again;
|
3825
3836
|
f2:
|
3826
|
-
#line
|
3837
|
+
#line 1032 "ext/dtext/dtext.rl"
|
3827
3838
|
{{( sm->p) = ((( sm->te)))-1;}{
|
3828
3839
|
g_debug("block char: %c", (*( sm->p)));
|
3829
3840
|
( sm->p)--;
|
@@ -3875,11 +3886,11 @@ f0:
|
|
3875
3886
|
}
|
3876
3887
|
goto _again;
|
3877
3888
|
f94:
|
3878
|
-
#line
|
3889
|
+
#line 102 "ext/dtext/dtext.rl"
|
3879
3890
|
{
|
3880
3891
|
sm->a2 = sm->p;
|
3881
3892
|
}
|
3882
|
-
#line
|
3893
|
+
#line 156 "ext/dtext/dtext.rl"
|
3883
3894
|
{( sm->te) = ( sm->p);( sm->p)--;{
|
3884
3895
|
append(sm, true, "<a href=\"/posts/");
|
3885
3896
|
append_segment(sm, true, sm->a1, sm->a2 - 1);
|
@@ -3890,11 +3901,11 @@ f94:
|
|
3890
3901
|
}}
|
3891
3902
|
goto _again;
|
3892
3903
|
f87:
|
3893
|
-
#line
|
3904
|
+
#line 102 "ext/dtext/dtext.rl"
|
3894
3905
|
{
|
3895
3906
|
sm->a2 = sm->p;
|
3896
3907
|
}
|
3897
|
-
#line
|
3908
|
+
#line 165 "ext/dtext/dtext.rl"
|
3898
3909
|
{( sm->te) = ( sm->p);( sm->p)--;{
|
3899
3910
|
append(sm, true, "<a href=\"/forum_posts/");
|
3900
3911
|
append_segment(sm, true, sm->a1, sm->a2 - 1);
|
@@ -3905,11 +3916,11 @@ f87:
|
|
3905
3916
|
}}
|
3906
3917
|
goto _again;
|
3907
3918
|
f95:
|
3908
|
-
#line
|
3919
|
+
#line 102 "ext/dtext/dtext.rl"
|
3909
3920
|
{
|
3910
3921
|
sm->a2 = sm->p;
|
3911
3922
|
}
|
3912
|
-
#line
|
3923
|
+
#line 174 "ext/dtext/dtext.rl"
|
3913
3924
|
{( sm->te) = ( sm->p);( sm->p)--;{
|
3914
3925
|
append(sm, true, "<a href=\"/forum_topics/");
|
3915
3926
|
append_segment(sm, true, sm->a1, sm->a2 - 1);
|
@@ -3920,11 +3931,11 @@ f95:
|
|
3920
3931
|
}}
|
3921
3932
|
goto _again;
|
3922
3933
|
f86:
|
3923
|
-
#line
|
3934
|
+
#line 102 "ext/dtext/dtext.rl"
|
3924
3935
|
{
|
3925
3936
|
sm->a2 = sm->p;
|
3926
3937
|
}
|
3927
|
-
#line
|
3938
|
+
#line 196 "ext/dtext/dtext.rl"
|
3928
3939
|
{( sm->te) = ( sm->p);( sm->p)--;{
|
3929
3940
|
append(sm, true, "<a href=\"/comments/");
|
3930
3941
|
append_segment(sm, true, sm->a1, sm->a2 - 1);
|
@@ -3935,11 +3946,11 @@ f86:
|
|
3935
3946
|
}}
|
3936
3947
|
goto _again;
|
3937
3948
|
f93:
|
3938
|
-
#line
|
3949
|
+
#line 102 "ext/dtext/dtext.rl"
|
3939
3950
|
{
|
3940
3951
|
sm->a2 = sm->p;
|
3941
3952
|
}
|
3942
|
-
#line
|
3953
|
+
#line 205 "ext/dtext/dtext.rl"
|
3943
3954
|
{( sm->te) = ( sm->p);( sm->p)--;{
|
3944
3955
|
append(sm, true, "<a href=\"/pools/");
|
3945
3956
|
append_segment(sm, true, sm->a1, sm->a2 - 1);
|
@@ -3950,11 +3961,11 @@ f93:
|
|
3950
3961
|
}}
|
3951
3962
|
goto _again;
|
3952
3963
|
f97:
|
3953
|
-
#line
|
3964
|
+
#line 102 "ext/dtext/dtext.rl"
|
3954
3965
|
{
|
3955
3966
|
sm->a2 = sm->p;
|
3956
3967
|
}
|
3957
|
-
#line
|
3968
|
+
#line 214 "ext/dtext/dtext.rl"
|
3958
3969
|
{( sm->te) = ( sm->p);( sm->p)--;{
|
3959
3970
|
append(sm, true, "<a href=\"/users/");
|
3960
3971
|
append_segment(sm, true, sm->a1, sm->a2 - 1);
|
@@ -3965,11 +3976,11 @@ f97:
|
|
3965
3976
|
}}
|
3966
3977
|
goto _again;
|
3967
3978
|
f85:
|
3968
|
-
#line
|
3979
|
+
#line 102 "ext/dtext/dtext.rl"
|
3969
3980
|
{
|
3970
3981
|
sm->a2 = sm->p;
|
3971
3982
|
}
|
3972
|
-
#line
|
3983
|
+
#line 223 "ext/dtext/dtext.rl"
|
3973
3984
|
{( sm->te) = ( sm->p);( sm->p)--;{
|
3974
3985
|
append(sm, true, "<a href=\"/artists/");
|
3975
3986
|
append_segment(sm, true, sm->a1, sm->a2 - 1);
|
@@ -3980,11 +3991,11 @@ f85:
|
|
3980
3991
|
}}
|
3981
3992
|
goto _again;
|
3982
3993
|
f90:
|
3983
|
-
#line
|
3994
|
+
#line 102 "ext/dtext/dtext.rl"
|
3984
3995
|
{
|
3985
3996
|
sm->a2 = sm->p;
|
3986
3997
|
}
|
3987
|
-
#line
|
3998
|
+
#line 232 "ext/dtext/dtext.rl"
|
3988
3999
|
{( sm->te) = ( sm->p);( sm->p)--;{
|
3989
4000
|
append(sm, true, "<a href=\"https://github.com/r888888888/danbooru/issues/");
|
3990
4001
|
append_segment(sm, true, sm->a1, sm->a2 - 1);
|
@@ -3995,11 +4006,11 @@ f90:
|
|
3995
4006
|
}}
|
3996
4007
|
goto _again;
|
3997
4008
|
f91:
|
3998
|
-
#line
|
4009
|
+
#line 102 "ext/dtext/dtext.rl"
|
3999
4010
|
{
|
4000
4011
|
sm->a2 = sm->p;
|
4001
4012
|
}
|
4002
|
-
#line
|
4013
|
+
#line 241 "ext/dtext/dtext.rl"
|
4003
4014
|
{( sm->te) = ( sm->p);( sm->p)--;{
|
4004
4015
|
append(sm, true, "<a href=\"http://www.pixiv.net/member_illust.php?mode=medium&illust_id=");
|
4005
4016
|
append_segment(sm, true, sm->a1, sm->a2 - 1);
|
@@ -4010,34 +4021,41 @@ f91:
|
|
4010
4021
|
}}
|
4011
4022
|
goto _again;
|
4012
4023
|
f81:
|
4013
|
-
#line
|
4024
|
+
#line 102 "ext/dtext/dtext.rl"
|
4014
4025
|
{
|
4015
4026
|
sm->a2 = sm->p;
|
4016
4027
|
}
|
4017
|
-
#line
|
4028
|
+
#line 369 "ext/dtext/dtext.rl"
|
4018
4029
|
{( sm->te) = ( sm->p);( sm->p)--;{
|
4019
|
-
if (
|
4020
|
-
|
4021
|
-
sm
|
4030
|
+
if (!sm->f_mentions || (sm->a1 > sm->pb && sm->a1 - 1 > sm->pb && sm->a1[-2] != ' ' && sm->a1[-2] != '\r' && sm->a1[-2] != '\n')) {
|
4031
|
+
// handle emails
|
4032
|
+
append_c(sm, '@');
|
4033
|
+
append_segment_html_escaped(sm, sm->a1, sm->a2 - 1);
|
4034
|
+
|
4022
4035
|
} else {
|
4023
|
-
sm->
|
4024
|
-
|
4025
|
-
|
4036
|
+
if (is_boundary_c((*( sm->p)))) {
|
4037
|
+
sm->b = true;
|
4038
|
+
sm->d = 2;
|
4039
|
+
} else {
|
4040
|
+
sm->b = false;
|
4041
|
+
sm->d = 1;
|
4042
|
+
}
|
4026
4043
|
|
4027
|
-
|
4028
|
-
|
4029
|
-
|
4030
|
-
|
4031
|
-
|
4032
|
-
|
4044
|
+
append(sm, true, "<a rel=\"nofollow\" href=\"/users?name=");
|
4045
|
+
append_segment_uri_escaped(sm, sm->a1, sm->a2 - sm->d);
|
4046
|
+
append(sm, true, "\">");
|
4047
|
+
append_c(sm, '@');
|
4048
|
+
append_segment_html_escaped(sm, sm->a1, sm->a2 - sm->d);
|
4049
|
+
append(sm, true, "</a>");
|
4033
4050
|
|
4034
|
-
|
4035
|
-
|
4051
|
+
if (sm->b) {
|
4052
|
+
append_c_html_escaped(sm, (*( sm->p)));
|
4053
|
+
}
|
4036
4054
|
}
|
4037
4055
|
}}
|
4038
4056
|
goto _again;
|
4039
4057
|
f84:
|
4040
|
-
#line
|
4058
|
+
#line 102 "ext/dtext/dtext.rl"
|
4041
4059
|
{
|
4042
4060
|
sm->a2 = sm->p;
|
4043
4061
|
}
|
@@ -4050,23 +4068,30 @@ f84:
|
|
4050
4068
|
break;
|
4051
4069
|
case 19:
|
4052
4070
|
{{( sm->p) = ((( sm->te)))-1;}
|
4053
|
-
if (
|
4054
|
-
|
4055
|
-
sm
|
4071
|
+
if (!sm->f_mentions || (sm->a1 > sm->pb && sm->a1 - 1 > sm->pb && sm->a1[-2] != ' ' && sm->a1[-2] != '\r' && sm->a1[-2] != '\n')) {
|
4072
|
+
// handle emails
|
4073
|
+
append_c(sm, '@');
|
4074
|
+
append_segment_html_escaped(sm, sm->a1, sm->a2 - 1);
|
4075
|
+
|
4056
4076
|
} else {
|
4057
|
-
sm->
|
4058
|
-
|
4059
|
-
|
4077
|
+
if (is_boundary_c((*( sm->p)))) {
|
4078
|
+
sm->b = true;
|
4079
|
+
sm->d = 2;
|
4080
|
+
} else {
|
4081
|
+
sm->b = false;
|
4082
|
+
sm->d = 1;
|
4083
|
+
}
|
4060
4084
|
|
4061
|
-
|
4062
|
-
|
4063
|
-
|
4064
|
-
|
4065
|
-
|
4066
|
-
|
4085
|
+
append(sm, true, "<a rel=\"nofollow\" href=\"/users?name=");
|
4086
|
+
append_segment_uri_escaped(sm, sm->a1, sm->a2 - sm->d);
|
4087
|
+
append(sm, true, "\">");
|
4088
|
+
append_c(sm, '@');
|
4089
|
+
append_segment_html_escaped(sm, sm->a1, sm->a2 - sm->d);
|
4090
|
+
append(sm, true, "</a>");
|
4067
4091
|
|
4068
|
-
|
4069
|
-
|
4092
|
+
if (sm->b) {
|
4093
|
+
append_c_html_escaped(sm, (*( sm->p)));
|
4094
|
+
}
|
4070
4095
|
}
|
4071
4096
|
}
|
4072
4097
|
break;
|
@@ -4100,11 +4125,11 @@ f84:
|
|
4100
4125
|
}
|
4101
4126
|
goto _again;
|
4102
4127
|
f14:
|
4103
|
-
#line
|
4128
|
+
#line 110 "ext/dtext/dtext.rl"
|
4104
4129
|
{
|
4105
4130
|
sm->b2 = sm->p;
|
4106
4131
|
}
|
4107
|
-
#line
|
4132
|
+
#line 336 "ext/dtext/dtext.rl"
|
4108
4133
|
{( sm->te) = ( sm->p)+1;{
|
4109
4134
|
append(sm, true, "<a href=\"");
|
4110
4135
|
append_segment_html_escaped(sm, sm->b1, sm->b2 - 1);
|
@@ -4114,11 +4139,11 @@ f14:
|
|
4114
4139
|
}}
|
4115
4140
|
goto _again;
|
4116
4141
|
f96:
|
4117
|
-
#line
|
4142
|
+
#line 110 "ext/dtext/dtext.rl"
|
4118
4143
|
{
|
4119
4144
|
sm->b2 = sm->p;
|
4120
4145
|
}
|
4121
|
-
#line
|
4146
|
+
#line 183 "ext/dtext/dtext.rl"
|
4122
4147
|
{( sm->te) = ( sm->p);( sm->p)--;{
|
4123
4148
|
append(sm, true, "<a href=\"/forum_topics/");
|
4124
4149
|
append_segment(sm, true, sm->a1, sm->a2 - 1);
|
@@ -4133,11 +4158,11 @@ f96:
|
|
4133
4158
|
}}
|
4134
4159
|
goto _again;
|
4135
4160
|
f92:
|
4136
|
-
#line
|
4161
|
+
#line 110 "ext/dtext/dtext.rl"
|
4137
4162
|
{
|
4138
4163
|
sm->b2 = sm->p;
|
4139
4164
|
}
|
4140
|
-
#line
|
4165
|
+
#line 250 "ext/dtext/dtext.rl"
|
4141
4166
|
{( sm->te) = ( sm->p);( sm->p)--;{
|
4142
4167
|
append(sm, true, "<a href=\"http://www.pixiv.net/member_illust.php?mode=manga_big&illust_id=");
|
4143
4168
|
append_segment(sm, true, sm->a1, sm->a2 - 1);
|
@@ -4152,11 +4177,11 @@ f92:
|
|
4152
4177
|
}}
|
4153
4178
|
goto _again;
|
4154
4179
|
f80:
|
4155
|
-
#line
|
4180
|
+
#line 110 "ext/dtext/dtext.rl"
|
4156
4181
|
{
|
4157
4182
|
sm->b2 = sm->p;
|
4158
4183
|
}
|
4159
|
-
#line
|
4184
|
+
#line 313 "ext/dtext/dtext.rl"
|
4160
4185
|
{( sm->te) = ( sm->p);( sm->p)--;{
|
4161
4186
|
if (is_boundary_c((*( sm->p)))) {
|
4162
4187
|
sm->d = 2;
|
@@ -4169,7 +4194,7 @@ f80:
|
|
4169
4194
|
append(sm, true, "<a href=\"");
|
4170
4195
|
append_segment_html_escaped(sm, sm->b1, sm->b2 - sm->d);
|
4171
4196
|
append(sm, true, "\">");
|
4172
|
-
link_content_sm = parse_helper(sm->a1, sm->a2 - sm->a1, false, true);
|
4197
|
+
link_content_sm = parse_helper(sm->a1, sm->a2 - sm->a1, false, true, false);
|
4173
4198
|
append(sm, true, link_content_sm->output->str);
|
4174
4199
|
free_machine(link_content_sm);
|
4175
4200
|
link_content_sm = NULL;
|
@@ -4181,11 +4206,11 @@ f80:
|
|
4181
4206
|
}}
|
4182
4207
|
goto _again;
|
4183
4208
|
f77:
|
4184
|
-
#line
|
4209
|
+
#line 110 "ext/dtext/dtext.rl"
|
4185
4210
|
{
|
4186
4211
|
sm->b2 = sm->p;
|
4187
4212
|
}
|
4188
|
-
#line
|
4213
|
+
#line 397 "ext/dtext/dtext.rl"
|
4189
4214
|
{( sm->te) = ( sm->p);( sm->p)--;{
|
4190
4215
|
g_debug("inline list");
|
4191
4216
|
|
@@ -4206,11 +4231,11 @@ f77:
|
|
4206
4231
|
}}
|
4207
4232
|
goto _again;
|
4208
4233
|
f113:
|
4209
|
-
#line
|
4234
|
+
#line 110 "ext/dtext/dtext.rl"
|
4210
4235
|
{
|
4211
4236
|
sm->b2 = sm->p;
|
4212
4237
|
}
|
4213
|
-
#line
|
4238
|
+
#line 760 "ext/dtext/dtext.rl"
|
4214
4239
|
{( sm->te) = ( sm->p);( sm->p)--;{
|
4215
4240
|
int prev_nest = sm->list_nest;
|
4216
4241
|
append_closing_p_if(sm);
|
@@ -4261,11 +4286,11 @@ f113:
|
|
4261
4286
|
}}
|
4262
4287
|
goto _again;
|
4263
4288
|
f63:
|
4264
|
-
#line
|
4289
|
+
#line 110 "ext/dtext/dtext.rl"
|
4265
4290
|
{
|
4266
4291
|
sm->b2 = sm->p;
|
4267
4292
|
}
|
4268
|
-
#line
|
4293
|
+
#line 999 "ext/dtext/dtext.rl"
|
4269
4294
|
{( sm->te) = ( sm->p);( sm->p)--;{
|
4270
4295
|
g_debug("block list");
|
4271
4296
|
g_debug(" call list");
|
@@ -4290,7 +4315,7 @@ f63:
|
|
4290
4315
|
f15:
|
4291
4316
|
#line 1 "NONE"
|
4292
4317
|
{( sm->te) = ( sm->p)+1;}
|
4293
|
-
#line
|
4318
|
+
#line 98 "ext/dtext/dtext.rl"
|
4294
4319
|
{
|
4295
4320
|
sm->a1 = sm->p;
|
4296
4321
|
}
|
@@ -4298,49 +4323,49 @@ f15:
|
|
4298
4323
|
f83:
|
4299
4324
|
#line 1 "NONE"
|
4300
4325
|
{( sm->te) = ( sm->p)+1;}
|
4301
|
-
#line
|
4326
|
+
#line 365 "ext/dtext/dtext.rl"
|
4302
4327
|
{( sm->act) = 18;}
|
4303
4328
|
goto _again;
|
4304
4329
|
f82:
|
4305
4330
|
#line 1 "NONE"
|
4306
4331
|
{( sm->te) = ( sm->p)+1;}
|
4307
|
-
#line
|
4332
|
+
#line 369 "ext/dtext/dtext.rl"
|
4308
4333
|
{( sm->act) = 19;}
|
4309
4334
|
goto _again;
|
4310
4335
|
f11:
|
4311
4336
|
#line 1 "NONE"
|
4312
4337
|
{( sm->te) = ( sm->p)+1;}
|
4313
|
-
#line
|
4338
|
+
#line 608 "ext/dtext/dtext.rl"
|
4314
4339
|
{( sm->act) = 43;}
|
4315
4340
|
goto _again;
|
4316
4341
|
f74:
|
4317
4342
|
#line 1 "NONE"
|
4318
4343
|
{( sm->te) = ( sm->p)+1;}
|
4319
|
-
#line
|
4344
|
+
#line 620 "ext/dtext/dtext.rl"
|
4320
4345
|
{( sm->act) = 44;}
|
4321
4346
|
goto _again;
|
4322
4347
|
f54:
|
4323
4348
|
#line 1 "NONE"
|
4324
4349
|
{( sm->te) = ( sm->p)+1;}
|
4325
|
-
#line
|
4350
|
+
#line 799 "ext/dtext/dtext.rl"
|
4326
4351
|
{( sm->act) = 65;}
|
4327
4352
|
goto _again;
|
4328
4353
|
f111:
|
4329
4354
|
#line 1 "NONE"
|
4330
4355
|
{( sm->te) = ( sm->p)+1;}
|
4331
|
-
#line
|
4356
|
+
#line 805 "ext/dtext/dtext.rl"
|
4332
4357
|
{( sm->act) = 66;}
|
4333
4358
|
goto _again;
|
4334
4359
|
f1:
|
4335
4360
|
#line 1 "NONE"
|
4336
4361
|
{( sm->te) = ( sm->p)+1;}
|
4337
|
-
#line
|
4362
|
+
#line 1015 "ext/dtext/dtext.rl"
|
4338
4363
|
{( sm->act) = 81;}
|
4339
4364
|
goto _again;
|
4340
4365
|
f60:
|
4341
4366
|
#line 1 "NONE"
|
4342
4367
|
{( sm->te) = ( sm->p)+1;}
|
4343
|
-
#line
|
4368
|
+
#line 1028 "ext/dtext/dtext.rl"
|
4344
4369
|
{( sm->act) = 82;}
|
4345
4370
|
goto _again;
|
4346
4371
|
|
@@ -4350,7 +4375,7 @@ _again:
|
|
4350
4375
|
#line 1 "NONE"
|
4351
4376
|
{( sm->ts) = 0;}
|
4352
4377
|
break;
|
4353
|
-
#line
|
4378
|
+
#line 4379 "ext/dtext/dtext.c"
|
4354
4379
|
}
|
4355
4380
|
|
4356
4381
|
if ( ++( sm->p) != ( sm->pe) )
|
@@ -4672,7 +4697,7 @@ _again:
|
|
4672
4697
|
|
4673
4698
|
}
|
4674
4699
|
|
4675
|
-
#line
|
4700
|
+
#line 1380 "ext/dtext/dtext.rl"
|
4676
4701
|
|
4677
4702
|
dstack_close(sm);
|
4678
4703
|
|
@@ -4685,11 +4710,13 @@ static VALUE parse(int argc, VALUE * argv, VALUE self) {
|
|
4685
4710
|
VALUE options;
|
4686
4711
|
VALUE opt_inline;
|
4687
4712
|
VALUE opt_strip;
|
4713
|
+
VALUE opt_mentions;
|
4688
4714
|
VALUE ret;
|
4689
4715
|
rb_encoding * encoding = NULL;
|
4690
4716
|
StateMachine * sm = NULL;
|
4691
4717
|
bool f_strip = false;
|
4692
4718
|
bool f_inline = false;
|
4719
|
+
bool f_mentions = true;
|
4693
4720
|
|
4694
4721
|
g_debug("start\n");
|
4695
4722
|
|
@@ -4719,10 +4746,15 @@ static VALUE parse(int argc, VALUE * argv, VALUE self) {
|
|
4719
4746
|
if (RTEST(opt_inline)) {
|
4720
4747
|
f_inline = true;
|
4721
4748
|
}
|
4749
|
+
|
4750
|
+
opt_mentions = rb_hash_aref(options, ID2SYM(rb_intern("disable_mentions")));
|
4751
|
+
if (RTEST(opt_mentions)) {
|
4752
|
+
f_mentions = false;
|
4753
|
+
}
|
4722
4754
|
}
|
4723
4755
|
}
|
4724
4756
|
|
4725
|
-
sm = parse_helper(RSTRING_PTR(input0), RSTRING_LEN(input0), f_strip, f_inline);
|
4757
|
+
sm = parse_helper(RSTRING_PTR(input0), RSTRING_LEN(input0), f_strip, f_inline, f_mentions);
|
4726
4758
|
|
4727
4759
|
encoding = rb_enc_find("utf-8");
|
4728
4760
|
ret = rb_enc_str_new(sm->output->str, sm->output->len, encoding);
|