breakout_parser 0.0.11 → 0.0.12

Sign up to get free protection for your applications and to get access to all the features.
@@ -141,6 +141,11 @@ extern size_t in_buf_len;
141
141
  \[\[r:[0-9]+(\|[^\[\]]+)?\]\] { yylval.svalue = yytext+4; return SVN_REVISION_LINK; }
142
142
  \[\[r:[0-9a-f]+(\|[^\[\]]+)?\]\] { yylval.svalue = yytext+4; return GIT_REVISION_LINK; }
143
143
 
144
+ \[\[revision:[0-9]+:[0-9]+(\|[^\[\]]+)?\]\] { yylval.svalue = yytext+11; return SVN_N_REVISION_LINK; }
145
+ \[\[revision:[0-9]+:[0-9a-f]+(\|[^\[\]]+)?\]\] { yylval.svalue = yytext+11; return GIT_N_REVISION_LINK; }
146
+ \[\[r:[0-9]+:[0-9]+(\|[^\[\]]+)?\]\] { yylval.svalue = yytext+4; return SVN_N_REVISION_LINK; }
147
+ \[\[r:[0-9]+:[0-9a-f]+(\|[^\[\]]+)?\]\] { yylval.svalue = yytext+4; return GIT_N_REVISION_LINK; }
148
+
144
149
  \[\[url:[a-z]+:\/\/[^]]+\]\] { yylval.svalue = yytext+6; return URL_WITH_PROTO_LINK; }
145
150
  \[\[url:\/[^]]+\]\] { yylval.svalue = yytext+6; return URL_WITH_PROTO_LINK; }
146
151
  \[\[url:[^]]+\]\] { yylval.svalue = yytext+6; return URL_WITHOUT_PROTO_LINK; }
@@ -91,6 +91,11 @@ size_t bufsize = 0;
91
91
  const char *space_name = NULL;
92
92
  size_t space_name_len = 0;
93
93
 
94
+ const char *site_url = NULL;
95
+ size_t site_url_len = 0;
96
+
97
+ extern VALUE git_url;
98
+
94
99
  #define CHECK_BUF_SIZE(len) \
95
100
  if( (bufptr - buf + len + 1) >= bufsize ){ \
96
101
  /*printf("[.] REALLOC oldsz=%d, newsz=%d\n",bufsize, (bufsize+((len > 0x1000) ? (len+0x1000) : 0x1000)));*/ \
@@ -130,7 +135,7 @@ void yyerror(const char *msg)
130
135
 
131
136
 
132
137
  /* Line 189 of yacc.c */
133
- #line 134 "parser.tab.c"
138
+ #line 139 "parser.tab.c"
134
139
 
135
140
  /* Enabling traces. */
136
141
  #ifndef YYDEBUG
@@ -169,35 +174,37 @@ void yyerror(const char *msg)
169
174
  GIT_REVISION_LINK = 267,
170
175
  WIKI_LINK = 268,
171
176
  ANCHOR_LINK = 269,
172
- URL_WITH_PROTO_LINK = 270,
173
- URL_WITHOUT_PROTO_LINK = 271,
174
- FILE_LINK = 272,
175
- IMAGE_LINK = 273,
176
- URL = 274,
177
- EMAIL = 275,
178
- UL = 276,
179
- H1 = 277,
180
- H2 = 278,
181
- H3 = 279,
182
- H4 = 280,
183
- H5 = 281,
184
- INLINE_CODE = 282,
185
- SPACE = 283,
186
- BR = 284,
187
- OLI = 285,
188
- ULI = 286,
189
- PRE_CODE_START = 287,
190
- PRE_CODE_END = 288,
191
- PRE_START = 289,
192
- PRE_END = 290,
193
- CODE_START = 291,
194
- CODE_END = 292,
195
- NOTEXTILE_START = 293,
196
- NOTEXTILE_END = 294,
197
- BOLD_END = 295,
198
- ITALIC_END = 296,
199
- REVERT_BOLD = 297,
200
- REVERT_ITALIC = 298
177
+ SVN_N_REVISION_LINK = 270,
178
+ GIT_N_REVISION_LINK = 271,
179
+ URL_WITH_PROTO_LINK = 272,
180
+ URL_WITHOUT_PROTO_LINK = 273,
181
+ FILE_LINK = 274,
182
+ IMAGE_LINK = 275,
183
+ URL = 276,
184
+ EMAIL = 277,
185
+ UL = 278,
186
+ H1 = 279,
187
+ H2 = 280,
188
+ H3 = 281,
189
+ H4 = 282,
190
+ H5 = 283,
191
+ INLINE_CODE = 284,
192
+ SPACE = 285,
193
+ BR = 286,
194
+ OLI = 287,
195
+ ULI = 288,
196
+ PRE_CODE_START = 289,
197
+ PRE_CODE_END = 290,
198
+ PRE_START = 291,
199
+ PRE_END = 292,
200
+ CODE_START = 293,
201
+ CODE_END = 294,
202
+ NOTEXTILE_START = 295,
203
+ NOTEXTILE_END = 296,
204
+ BOLD_END = 297,
205
+ ITALIC_END = 298,
206
+ REVERT_BOLD = 299,
207
+ REVERT_ITALIC = 300
201
208
  };
202
209
  #endif
203
210
 
@@ -208,7 +215,7 @@ typedef union YYSTYPE
208
215
  {
209
216
 
210
217
  /* Line 214 of yacc.c */
211
- #line 61 "parser.y"
218
+ #line 66 "parser.y"
212
219
 
213
220
  double dvalue;
214
221
  int ivalue;
@@ -217,7 +224,7 @@ typedef union YYSTYPE
217
224
 
218
225
 
219
226
  /* Line 214 of yacc.c */
220
- #line 221 "parser.tab.c"
227
+ #line 228 "parser.tab.c"
221
228
  } YYSTYPE;
222
229
  # define YYSTYPE_IS_TRIVIAL 1
223
230
  # define yystype YYSTYPE /* obsolescent; will be withdrawn */
@@ -229,7 +236,7 @@ typedef union YYSTYPE
229
236
 
230
237
 
231
238
  /* Line 264 of yacc.c */
232
- #line 233 "parser.tab.c"
239
+ #line 240 "parser.tab.c"
233
240
 
234
241
  #ifdef short
235
242
  # undef short
@@ -442,22 +449,22 @@ union yyalloc
442
449
  #endif
443
450
 
444
451
  /* YYFINAL -- State number of the termination state. */
445
- #define YYFINAL 53
452
+ #define YYFINAL 55
446
453
  /* YYLAST -- Last index in YYTABLE. */
447
- #define YYLAST 128
454
+ #define YYLAST 134
448
455
 
449
456
  /* YYNTOKENS -- Number of terminals. */
450
- #define YYNTOKENS 44
457
+ #define YYNTOKENS 46
451
458
  /* YYNNTS -- Number of nonterminals. */
452
459
  #define YYNNTS 28
453
460
  /* YYNRULES -- Number of rules. */
454
- #define YYNRULES 68
461
+ #define YYNRULES 70
455
462
  /* YYNRULES -- Number of states. */
456
- #define YYNSTATES 82
463
+ #define YYNSTATES 84
457
464
 
458
465
  /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
459
466
  #define YYUNDEFTOK 2
460
- #define YYMAXUTOK 298
467
+ #define YYMAXUTOK 300
461
468
 
462
469
  #define YYTRANSLATE(YYX) \
463
470
  ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
@@ -494,7 +501,8 @@ static const yytype_uint8 yytranslate[] =
494
501
  5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
495
502
  15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
496
503
  25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
497
- 35, 36, 37, 38, 39, 40, 41, 42, 43
504
+ 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
505
+ 45
498
506
  };
499
507
 
500
508
  #if YYDEBUG
@@ -507,41 +515,43 @@ static const yytype_uint8 yyprhs[] =
507
515
  42, 45, 49, 51, 54, 57, 61, 63, 66, 68,
508
516
  70, 72, 74, 76, 78, 80, 82, 84, 86, 88,
509
517
  90, 92, 94, 96, 98, 100, 102, 104, 106, 108,
510
- 110, 112, 113, 116, 118, 120, 122, 124, 126, 128,
511
- 130, 132, 134, 135, 140, 144, 145, 150, 151
518
+ 110, 112, 114, 116, 117, 120, 122, 124, 126, 128,
519
+ 130, 132, 134, 136, 138, 139, 144, 148, 149, 154,
520
+ 155
512
521
  };
513
522
 
514
523
  /* YYRHS -- A `-1'-separated list of the rules' RHS. */
515
524
  static const yytype_int8 yyrhs[] =
516
525
  {
517
- 45, 0, -1, -1, 46, 45, -1, 67, -1, 55,
518
- -1, 60, -1, 61, -1, 62, -1, 63, -1, 64,
519
- -1, -1, -1, 47, 51, 48, 46, -1, -1, -1,
520
- 49, 53, 50, 46, -1, 68, -1, 52, -1, 51,
521
- 52, -1, 66, 55, -1, 66, 55, 29, -1, 54,
522
- -1, 53, 54, -1, 65, 55, -1, 65, 55, 29,
523
- -1, 56, -1, 56, 55, -1, 58, -1, 57, -1,
524
- 8, -1, 19, -1, 20, -1, 4, -1, 40, -1,
525
- 5, -1, 41, -1, 6, -1, 7, -1, 27, -1,
526
- 42, -1, 43, -1, 9, -1, 11, -1, 12, -1,
527
- 15, -1, 16, -1, 13, -1, 14, -1, 17, -1,
528
- 18, -1, -1, 59, 58, -1, 3, -1, 22, -1,
529
- 23, -1, 24, -1, 25, -1, 26, -1, 30, -1,
530
- 31, -1, 29, -1, -1, 32, 69, 58, 33, -1,
531
- 38, 58, 39, -1, -1, 34, 70, 58, 35, -1,
532
- -1, 36, 71, 58, 37, -1
526
+ 47, 0, -1, -1, 48, 47, -1, 69, -1, 57,
527
+ -1, 62, -1, 63, -1, 64, -1, 65, -1, 66,
528
+ -1, -1, -1, 49, 53, 50, 48, -1, -1, -1,
529
+ 51, 55, 52, 48, -1, 70, -1, 54, -1, 53,
530
+ 54, -1, 68, 57, -1, 68, 57, 31, -1, 56,
531
+ -1, 55, 56, -1, 67, 57, -1, 67, 57, 31,
532
+ -1, 58, -1, 58, 57, -1, 60, -1, 59, -1,
533
+ 8, -1, 21, -1, 22, -1, 4, -1, 42, -1,
534
+ 5, -1, 43, -1, 6, -1, 7, -1, 29, -1,
535
+ 44, -1, 45, -1, 9, -1, 11, -1, 12, -1,
536
+ 15, -1, 16, -1, 17, -1, 18, -1, 13, -1,
537
+ 14, -1, 19, -1, 20, -1, -1, 61, 60, -1,
538
+ 3, -1, 24, -1, 25, -1, 26, -1, 27, -1,
539
+ 28, -1, 32, -1, 33, -1, 31, -1, -1, 34,
540
+ 71, 60, 35, -1, 40, 60, 41, -1, -1, 36,
541
+ 72, 60, 37, -1, -1, 38, 73, 60, 39, -1
533
542
  };
534
543
 
535
544
  /* YYRLINE[YYN] -- source line where rule number YYN was defined. */
536
545
  static const yytype_uint8 yyrline[] =
537
546
  {
538
- 0, 87, 87, 88, 91, 92, 93, 94, 95, 96,
539
- 97, 98, 98, 98, 99, 99, 99, 100, 102, 103,
540
- 105, 106, 108, 109, 111, 112, 114, 115, 117, 118,
541
- 119, 120, 121, 122, 123, 124, 125, 126, 127, 128,
542
- 129, 130, 132, 133, 134, 135, 136, 137, 138, 139,
543
- 140, 142, 143, 145, 152, 153, 154, 155, 156, 158,
544
- 159, 160, 163, 163, 164, 165, 165, 166, 166
547
+ 0, 93, 93, 94, 97, 98, 99, 100, 101, 102,
548
+ 103, 104, 104, 104, 105, 105, 105, 106, 108, 109,
549
+ 111, 112, 114, 115, 117, 118, 120, 121, 123, 124,
550
+ 125, 126, 127, 128, 129, 130, 131, 132, 133, 134,
551
+ 135, 136, 138, 139, 140, 141, 142, 143, 144, 145,
552
+ 146, 147, 148, 150, 151, 153, 160, 161, 162, 163,
553
+ 164, 166, 167, 168, 171, 171, 172, 173, 173, 174,
554
+ 174
545
555
  };
546
556
  #endif
547
557
 
@@ -553,9 +563,10 @@ static const char *const yytname[] =
553
563
  "$end", "error", "$undefined", "T_CHAR", "BOLD_START", "ITALIC_START",
554
564
  "BOLD_ITALIC_START", "ITALIC_BOLD_START", "T_WORD", "TICKET_LINK",
555
565
  "LINK", "SVN_REVISION_LINK", "GIT_REVISION_LINK", "WIKI_LINK",
556
- "ANCHOR_LINK", "URL_WITH_PROTO_LINK", "URL_WITHOUT_PROTO_LINK",
557
- "FILE_LINK", "IMAGE_LINK", "URL", "EMAIL", "UL", "H1", "H2", "H3", "H4",
558
- "H5", "INLINE_CODE", "SPACE", "BR", "OLI", "ULI", "PRE_CODE_START",
566
+ "ANCHOR_LINK", "SVN_N_REVISION_LINK", "GIT_N_REVISION_LINK",
567
+ "URL_WITH_PROTO_LINK", "URL_WITHOUT_PROTO_LINK", "FILE_LINK",
568
+ "IMAGE_LINK", "URL", "EMAIL", "UL", "H1", "H2", "H3", "H4", "H5",
569
+ "INLINE_CODE", "SPACE", "BR", "OLI", "ULI", "PRE_CODE_START",
559
570
  "PRE_CODE_END", "PRE_START", "PRE_END", "CODE_START", "CODE_END",
560
571
  "NOTEXTILE_START", "NOTEXTILE_END", "BOLD_END", "ITALIC_END",
561
572
  "REVERT_BOLD", "REVERT_ITALIC", "$accept", "text", "textitem", "$@1",
@@ -574,20 +585,21 @@ static const yytype_uint16 yytoknum[] =
574
585
  265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
575
586
  275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
576
587
  285, 286, 287, 288, 289, 290, 291, 292, 293, 294,
577
- 295, 296, 297, 298
588
+ 295, 296, 297, 298, 299, 300
578
589
  };
579
590
  # endif
580
591
 
581
592
  /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
582
593
  static const yytype_uint8 yyr1[] =
583
594
  {
584
- 0, 44, 45, 45, 46, 46, 46, 46, 46, 46,
585
- 46, 47, 48, 46, 49, 50, 46, 46, 51, 51,
586
- 52, 52, 53, 53, 54, 54, 55, 55, 56, 56,
587
- 56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
588
- 56, 56, 57, 57, 57, 57, 57, 57, 57, 57,
589
- 57, 58, 58, 59, 60, 61, 62, 63, 64, 65,
590
- 66, 67, 69, 68, 68, 70, 68, 71, 68
595
+ 0, 46, 47, 47, 48, 48, 48, 48, 48, 48,
596
+ 48, 49, 50, 48, 51, 52, 48, 48, 53, 53,
597
+ 54, 54, 55, 55, 56, 56, 57, 57, 58, 58,
598
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
599
+ 58, 58, 59, 59, 59, 59, 59, 59, 59, 59,
600
+ 59, 59, 59, 60, 60, 61, 62, 63, 64, 65,
601
+ 66, 67, 68, 69, 71, 70, 70, 72, 70, 73,
602
+ 70
591
603
  };
592
604
 
593
605
  /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
@@ -598,8 +610,9 @@ static const yytype_uint8 yyr2[] =
598
610
  2, 3, 1, 2, 2, 3, 1, 2, 1, 1,
599
611
  1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
600
612
  1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
601
- 1, 0, 2, 1, 1, 1, 1, 1, 1, 1,
602
- 1, 1, 0, 4, 3, 0, 4, 0, 4
613
+ 1, 1, 1, 0, 2, 1, 1, 1, 1, 1,
614
+ 1, 1, 1, 1, 0, 4, 3, 0, 4, 0,
615
+ 4
603
616
  };
604
617
 
605
618
  /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
@@ -607,23 +620,23 @@ static const yytype_uint8 yyr2[] =
607
620
  means the default is an error. */
608
621
  static const yytype_uint8 yydefact[] =
609
622
  {
610
- 2, 53, 33, 35, 37, 38, 30, 42, 43, 44,
611
- 47, 48, 45, 46, 49, 50, 31, 32, 54, 55,
612
- 56, 57, 58, 39, 61, 62, 65, 67, 51, 34,
613
- 36, 40, 41, 0, 2, 0, 0, 5, 26, 29,
614
- 28, 51, 6, 7, 8, 9, 10, 4, 17, 51,
615
- 51, 51, 0, 1, 3, 60, 12, 18, 51, 59,
616
- 15, 22, 51, 27, 52, 0, 0, 0, 64, 11,
617
- 19, 20, 11, 23, 24, 63, 66, 68, 13, 21,
618
- 16, 25
623
+ 2, 55, 33, 35, 37, 38, 30, 42, 43, 44,
624
+ 49, 50, 45, 46, 47, 48, 51, 52, 31, 32,
625
+ 56, 57, 58, 59, 60, 39, 63, 64, 67, 69,
626
+ 53, 34, 36, 40, 41, 0, 2, 0, 0, 5,
627
+ 26, 29, 28, 53, 6, 7, 8, 9, 10, 4,
628
+ 17, 53, 53, 53, 0, 1, 3, 62, 12, 18,
629
+ 53, 61, 15, 22, 53, 27, 54, 0, 0, 0,
630
+ 66, 11, 19, 20, 11, 23, 24, 65, 68, 70,
631
+ 13, 21, 16, 25
619
632
  };
620
633
 
621
634
  /* YYDEFGOTO[NTERM-NUM]. */
622
635
  static const yytype_int8 yydefgoto[] =
623
636
  {
624
- -1, 33, 34, 35, 69, 36, 72, 56, 57, 60,
625
- 61, 37, 38, 39, 40, 41, 42, 43, 44, 45,
626
- 46, 62, 58, 47, 48, 49, 50, 51
637
+ -1, 35, 36, 37, 71, 38, 74, 58, 59, 62,
638
+ 63, 39, 40, 41, 42, 43, 44, 45, 46, 47,
639
+ 48, 64, 60, 49, 50, 51, 52, 53
627
640
  };
628
641
 
629
642
  /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
@@ -631,22 +644,22 @@ static const yytype_int8 yydefgoto[] =
631
644
  #define YYPACT_NINF -42
632
645
  static const yytype_int8 yypact[] =
633
646
  {
634
- 41, -42, -42, -42, -42, -42, -42, -42, -42, -42,
647
+ 43, -42, -42, -42, -42, -42, -42, -42, -42, -42,
635
648
  -42, -42, -42, -42, -42, -42, -42, -42, -42, -42,
636
- -42, -42, -42, -42, -42, -42, -42, -42, -2, -42,
637
- -42, -42, -42, 2, 41, -21, -9, -42, 82, -42,
638
- -42, -2, -42, -42, -42, -42, -42, -42, -42, -2,
639
- -2, -2, -6, -42, -42, -42, -21, -42, 82, -42,
640
- -9, -42, 82, -42, -42, 4, 16, 25, -42, 0,
641
- -42, 6, 0, -42, 10, -42, -42, -42, -42, -42,
642
- -42, -42
649
+ -42, -42, -42, -42, -42, -42, -42, -42, -42, -42,
650
+ -2, -42, -42, -42, -42, 2, 43, -23, -9, -42,
651
+ 86, -42, -42, -2, -42, -42, -42, -42, -42, -42,
652
+ -42, -2, -2, -2, -6, -42, -42, -42, -23, -42,
653
+ 86, -42, -9, -42, 86, -42, -42, 4, 16, 27,
654
+ -42, 0, -42, 6, 0, -42, 10, -42, -42, -42,
655
+ -42, -42, -42, -42
643
656
  };
644
657
 
645
658
  /* YYPGOTO[NTERM-NUM]. */
646
659
  static const yytype_int8 yypgoto[] =
647
660
  {
648
- -42, 35, -41, -42, -42, -42, -42, -42, 18, -42,
649
- 20, 54, -42, -42, 77, -42, -42, -42, -42, -42,
661
+ -42, 37, -41, -42, -42, -42, -42, -42, 20, -42,
662
+ 18, 56, -42, -42, 81, -42, -42, -42, -42, -42,
650
663
  -42, -42, -42, -42, -42, -42, -42, -42
651
664
  };
652
665
 
@@ -654,39 +667,41 @@ static const yytype_int8 yypgoto[] =
654
667
  positive, shift that token. If negative, reduce the rule which
655
668
  number is the opposite. If zero, do what YYDEFACT says.
656
669
  If YYTABLE_NINF, syntax error. */
657
- #define YYTABLE_NINF -52
670
+ #define YYTABLE_NINF -54
658
671
  static const yytype_int8 yytable[] =
659
672
  {
660
- -51, 1, 53, 1, 2, 3, 4, 5, 6, 7,
661
- 55, 8, 9, 10, 11, 12, 13, 14, 15, 16,
662
- 17, 59, 18, 19, 20, 21, 22, 23, 78, 24,
663
- -14, 80, 25, 68, 26, 79, 27, 75, 28, 81,
664
- 29, 30, 31, 32, 1, 2, 3, 4, 5, 6,
665
- 7, 76, 8, 9, 10, 11, 12, 13, 14, 15,
666
- 16, 17, 77, 18, 19, 20, 21, 22, 23, 54,
667
- 24, -14, -11, 25, 70, 26, 0, 27, 0, 28,
668
- 73, 29, 30, 31, 32, 1, 2, 3, 4, 5,
669
- 6, 7, 63, 8, 9, 10, 11, 12, 13, 14,
670
- 15, 16, 17, 0, 0, 52, 0, 0, 0, 23,
671
- 0, 0, 71, 0, 0, 0, 74, 0, 64, 0,
672
- 0, 0, 29, 30, 31, 32, 65, 66, 67
673
+ -53, 1, 55, 1, 2, 3, 4, 5, 6, 7,
674
+ 57, 8, 9, 10, 11, 12, 13, 14, 15, 16,
675
+ 17, 18, 19, 61, 20, 21, 22, 23, 24, 25,
676
+ 80, 26, -14, 82, 27, 70, 28, 81, 29, 77,
677
+ 30, 83, 31, 32, 33, 34, 1, 2, 3, 4,
678
+ 5, 6, 7, 78, 8, 9, 10, 11, 12, 13,
679
+ 14, 15, 16, 17, 18, 19, 79, 20, 21, 22,
680
+ 23, 24, 25, 56, 26, -14, -11, 27, 72, 28,
681
+ 75, 29, 0, 30, 0, 31, 32, 33, 34, 1,
682
+ 2, 3, 4, 5, 6, 7, 65, 8, 9, 10,
683
+ 11, 12, 13, 14, 15, 16, 17, 18, 19, 0,
684
+ 0, 54, 0, 0, 0, 25, 73, 0, 0, 0,
685
+ 76, 0, 0, 0, 66, 0, 0, 0, 31, 32,
686
+ 33, 34, 67, 68, 69
673
687
  };
674
688
 
675
689
  static const yytype_int8 yycheck[] =
676
690
  {
677
691
  0, 3, 0, 3, 4, 5, 6, 7, 8, 9,
678
- 31, 11, 12, 13, 14, 15, 16, 17, 18, 19,
679
- 20, 30, 22, 23, 24, 25, 26, 27, 69, 29,
680
- 30, 72, 32, 39, 34, 29, 36, 33, 38, 29,
681
- 40, 41, 42, 43, 3, 4, 5, 6, 7, 8,
682
- 9, 35, 11, 12, 13, 14, 15, 16, 17, 18,
683
- 19, 20, 37, 22, 23, 24, 25, 26, 27, 34,
684
- 29, 30, 31, 32, 56, 34, -1, 36, -1, 38,
685
- 60, 40, 41, 42, 43, 3, 4, 5, 6, 7,
686
- 8, 9, 38, 11, 12, 13, 14, 15, 16, 17,
687
- 18, 19, 20, -1, -1, 28, -1, -1, -1, 27,
688
- -1, -1, 58, -1, -1, -1, 62, -1, 41, -1,
689
- -1, -1, 40, 41, 42, 43, 49, 50, 51
692
+ 33, 11, 12, 13, 14, 15, 16, 17, 18, 19,
693
+ 20, 21, 22, 32, 24, 25, 26, 27, 28, 29,
694
+ 71, 31, 32, 74, 34, 41, 36, 31, 38, 35,
695
+ 40, 31, 42, 43, 44, 45, 3, 4, 5, 6,
696
+ 7, 8, 9, 37, 11, 12, 13, 14, 15, 16,
697
+ 17, 18, 19, 20, 21, 22, 39, 24, 25, 26,
698
+ 27, 28, 29, 36, 31, 32, 33, 34, 58, 36,
699
+ 62, 38, -1, 40, -1, 42, 43, 44, 45, 3,
700
+ 4, 5, 6, 7, 8, 9, 40, 11, 12, 13,
701
+ 14, 15, 16, 17, 18, 19, 20, 21, 22, -1,
702
+ -1, 30, -1, -1, -1, 29, 60, -1, -1, -1,
703
+ 64, -1, -1, -1, 43, -1, -1, -1, 42, 43,
704
+ 44, 45, 51, 52, 53
690
705
  };
691
706
 
692
707
  /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -694,14 +709,14 @@ static const yytype_int8 yycheck[] =
694
709
  static const yytype_uint8 yystos[] =
695
710
  {
696
711
  0, 3, 4, 5, 6, 7, 8, 9, 11, 12,
697
- 13, 14, 15, 16, 17, 18, 19, 20, 22, 23,
698
- 24, 25, 26, 27, 29, 32, 34, 36, 38, 40,
699
- 41, 42, 43, 45, 46, 47, 49, 55, 56, 57,
700
- 58, 59, 60, 61, 62, 63, 64, 67, 68, 69,
701
- 70, 71, 58, 0, 45, 31, 51, 52, 66, 30,
702
- 53, 54, 65, 55, 58, 58, 58, 58, 39, 48,
703
- 52, 55, 50, 54, 55, 33, 35, 37, 46, 29,
704
- 46, 29
712
+ 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
713
+ 24, 25, 26, 27, 28, 29, 31, 34, 36, 38,
714
+ 40, 42, 43, 44, 45, 47, 48, 49, 51, 57,
715
+ 58, 59, 60, 61, 62, 63, 64, 65, 66, 69,
716
+ 70, 71, 72, 73, 60, 0, 47, 33, 53, 54,
717
+ 68, 32, 55, 56, 67, 57, 60, 60, 60, 60,
718
+ 41, 50, 54, 57, 52, 56, 57, 35, 37, 39,
719
+ 48, 31, 48, 31
705
720
  };
706
721
 
707
722
  #define yyerrok (yyerrstatus = 0)
@@ -1515,350 +1530,364 @@ yyreduce:
1515
1530
  case 6:
1516
1531
 
1517
1532
  /* Line 1455 of yacc.c */
1518
- #line 93 "parser.y"
1533
+ #line 99 "parser.y"
1519
1534
  {concat("</h1>",5);}
1520
1535
  break;
1521
1536
 
1522
1537
  case 7:
1523
1538
 
1524
1539
  /* Line 1455 of yacc.c */
1525
- #line 94 "parser.y"
1540
+ #line 100 "parser.y"
1526
1541
  {concat("</h2>",5);}
1527
1542
  break;
1528
1543
 
1529
1544
  case 8:
1530
1545
 
1531
1546
  /* Line 1455 of yacc.c */
1532
- #line 95 "parser.y"
1547
+ #line 101 "parser.y"
1533
1548
  {concat("</h3>",5);}
1534
1549
  break;
1535
1550
 
1536
1551
  case 9:
1537
1552
 
1538
1553
  /* Line 1455 of yacc.c */
1539
- #line 96 "parser.y"
1554
+ #line 102 "parser.y"
1540
1555
  {concat("</h4>",5);}
1541
1556
  break;
1542
1557
 
1543
1558
  case 10:
1544
1559
 
1545
1560
  /* Line 1455 of yacc.c */
1546
- #line 97 "parser.y"
1561
+ #line 103 "parser.y"
1547
1562
  {concat("</h5>",5);}
1548
1563
  break;
1549
1564
 
1550
1565
  case 11:
1551
1566
 
1552
1567
  /* Line 1455 of yacc.c */
1553
- #line 98 "parser.y"
1568
+ #line 104 "parser.y"
1554
1569
  {concat("<ul>",4);}
1555
1570
  break;
1556
1571
 
1557
1572
  case 12:
1558
1573
 
1559
1574
  /* Line 1455 of yacc.c */
1560
- #line 98 "parser.y"
1575
+ #line 104 "parser.y"
1561
1576
  {concat("</ul>",5);}
1562
1577
  break;
1563
1578
 
1564
1579
  case 14:
1565
1580
 
1566
1581
  /* Line 1455 of yacc.c */
1567
- #line 99 "parser.y"
1582
+ #line 105 "parser.y"
1568
1583
  {concat("<ol>",4);}
1569
1584
  break;
1570
1585
 
1571
1586
  case 15:
1572
1587
 
1573
1588
  /* Line 1455 of yacc.c */
1574
- #line 99 "parser.y"
1589
+ #line 105 "parser.y"
1575
1590
  {concat("</ol>",5);}
1576
1591
  break;
1577
1592
 
1578
1593
  case 18:
1579
1594
 
1580
1595
  /* Line 1455 of yacc.c */
1581
- #line 102 "parser.y"
1596
+ #line 108 "parser.y"
1582
1597
  {concat("</li>",5);}
1583
1598
  break;
1584
1599
 
1585
1600
  case 19:
1586
1601
 
1587
1602
  /* Line 1455 of yacc.c */
1588
- #line 103 "parser.y"
1603
+ #line 109 "parser.y"
1589
1604
  {concat("</li>",5);}
1590
1605
  break;
1591
1606
 
1592
1607
  case 22:
1593
1608
 
1594
1609
  /* Line 1455 of yacc.c */
1595
- #line 108 "parser.y"
1610
+ #line 114 "parser.y"
1596
1611
  {concat("</li>",5);}
1597
1612
  break;
1598
1613
 
1599
1614
  case 23:
1600
1615
 
1601
1616
  /* Line 1455 of yacc.c */
1602
- #line 109 "parser.y"
1617
+ #line 115 "parser.y"
1603
1618
  {concat("</li>",5);}
1604
1619
  break;
1605
1620
 
1606
1621
  case 30:
1607
1622
 
1608
1623
  /* Line 1455 of yacc.c */
1609
- #line 119 "parser.y"
1624
+ #line 125 "parser.y"
1610
1625
  {concat2((yyvsp[(1) - (1)].svalue));}
1611
1626
  break;
1612
1627
 
1613
1628
  case 31:
1614
1629
 
1615
1630
  /* Line 1455 of yacc.c */
1616
- #line 120 "parser.y"
1631
+ #line 126 "parser.y"
1617
1632
  {process_url((yyvsp[(1) - (1)].svalue));}
1618
1633
  break;
1619
1634
 
1620
1635
  case 32:
1621
1636
 
1622
1637
  /* Line 1455 of yacc.c */
1623
- #line 121 "parser.y"
1638
+ #line 127 "parser.y"
1624
1639
  {process_email((yyvsp[(1) - (1)].svalue));}
1625
1640
  break;
1626
1641
 
1627
1642
  case 33:
1628
1643
 
1629
1644
  /* Line 1455 of yacc.c */
1630
- #line 122 "parser.y"
1645
+ #line 128 "parser.y"
1631
1646
  {(yyvsp[(1) - (1)].ivalue) ? concat(" <strong>",9) : concat("<strong>",8);}
1632
1647
  break;
1633
1648
 
1634
1649
  case 34:
1635
1650
 
1636
1651
  /* Line 1455 of yacc.c */
1637
- #line 123 "parser.y"
1652
+ #line 129 "parser.y"
1638
1653
  {concat("</strong>",9);}
1639
1654
  break;
1640
1655
 
1641
1656
  case 35:
1642
1657
 
1643
1658
  /* Line 1455 of yacc.c */
1644
- #line 124 "parser.y"
1659
+ #line 130 "parser.y"
1645
1660
  {(yyvsp[(1) - (1)].ivalue) ? concat(" <em>",5) : concat("<em>",4);}
1646
1661
  break;
1647
1662
 
1648
1663
  case 36:
1649
1664
 
1650
1665
  /* Line 1455 of yacc.c */
1651
- #line 125 "parser.y"
1666
+ #line 131 "parser.y"
1652
1667
  {concat("</em>",5);}
1653
1668
  break;
1654
1669
 
1655
1670
  case 37:
1656
1671
 
1657
1672
  /* Line 1455 of yacc.c */
1658
- #line 126 "parser.y"
1673
+ #line 132 "parser.y"
1659
1674
  {(yyvsp[(1) - (1)].ivalue) ? concat(" <strong><em>",13) : concat("<strong><em>",12);}
1660
1675
  break;
1661
1676
 
1662
1677
  case 38:
1663
1678
 
1664
1679
  /* Line 1455 of yacc.c */
1665
- #line 127 "parser.y"
1680
+ #line 133 "parser.y"
1666
1681
  {(yyvsp[(1) - (1)].ivalue) ? concat(" <em><strong>",13) : concat("<em><strong>",12);}
1667
1682
  break;
1668
1683
 
1669
1684
  case 39:
1670
1685
 
1671
1686
  /* Line 1455 of yacc.c */
1672
- #line 128 "parser.y"
1687
+ #line 134 "parser.y"
1673
1688
  {process_inline_code((yyvsp[(1) - (1)].svalue));}
1674
1689
  break;
1675
1690
 
1676
1691
  case 40:
1677
1692
 
1678
1693
  /* Line 1455 of yacc.c */
1679
- #line 129 "parser.y"
1694
+ #line 135 "parser.y"
1680
1695
  {revert_bold();}
1681
1696
  break;
1682
1697
 
1683
1698
  case 41:
1684
1699
 
1685
1700
  /* Line 1455 of yacc.c */
1686
- #line 130 "parser.y"
1701
+ #line 136 "parser.y"
1687
1702
  {revert_italic();}
1688
1703
  break;
1689
1704
 
1690
1705
  case 42:
1691
1706
 
1692
1707
  /* Line 1455 of yacc.c */
1693
- #line 132 "parser.y"
1708
+ #line 138 "parser.y"
1694
1709
  {process_ticket_link((yyvsp[(1) - (1)].svalue));}
1695
1710
  break;
1696
1711
 
1697
1712
  case 43:
1698
1713
 
1699
1714
  /* Line 1455 of yacc.c */
1700
- #line 133 "parser.y"
1701
- {process_svn_link((yyvsp[(1) - (1)].svalue));}
1715
+ #line 139 "parser.y"
1716
+ {process_svn_link((yyvsp[(1) - (1)].svalue),0);}
1702
1717
  break;
1703
1718
 
1704
1719
  case 44:
1705
1720
 
1706
1721
  /* Line 1455 of yacc.c */
1707
- #line 134 "parser.y"
1708
- {process_git_link((yyvsp[(1) - (1)].svalue));}
1722
+ #line 140 "parser.y"
1723
+ {process_git_link((yyvsp[(1) - (1)].svalue),0);}
1709
1724
  break;
1710
1725
 
1711
1726
  case 45:
1712
1727
 
1713
1728
  /* Line 1455 of yacc.c */
1714
- #line 135 "parser.y"
1715
- {process_url_link((yyvsp[(1) - (1)].svalue),NULL);}
1729
+ #line 141 "parser.y"
1730
+ {process_svn_link((yyvsp[(1) - (1)].svalue),1);}
1716
1731
  break;
1717
1732
 
1718
1733
  case 46:
1719
1734
 
1720
1735
  /* Line 1455 of yacc.c */
1721
- #line 136 "parser.y"
1722
- {process_url_link((yyvsp[(1) - (1)].svalue),"http://");}
1736
+ #line 142 "parser.y"
1737
+ {process_git_link((yyvsp[(1) - (1)].svalue),1);}
1723
1738
  break;
1724
1739
 
1725
1740
  case 47:
1726
1741
 
1727
1742
  /* Line 1455 of yacc.c */
1728
- #line 137 "parser.y"
1729
- {process_wiki_link((yyvsp[(1) - (1)].svalue));}
1743
+ #line 143 "parser.y"
1744
+ {process_url_link((yyvsp[(1) - (1)].svalue),NULL);}
1730
1745
  break;
1731
1746
 
1732
1747
  case 48:
1733
1748
 
1734
1749
  /* Line 1455 of yacc.c */
1735
- #line 138 "parser.y"
1736
- {process_anchor_link((yyvsp[(1) - (1)].svalue));}
1750
+ #line 144 "parser.y"
1751
+ {process_url_link((yyvsp[(1) - (1)].svalue),"http://");}
1737
1752
  break;
1738
1753
 
1739
1754
  case 49:
1740
1755
 
1741
1756
  /* Line 1455 of yacc.c */
1742
- #line 139 "parser.y"
1743
- {process_file_link((yyvsp[(1) - (1)].svalue));}
1757
+ #line 145 "parser.y"
1758
+ {process_wiki_link((yyvsp[(1) - (1)].svalue));}
1744
1759
  break;
1745
1760
 
1746
1761
  case 50:
1747
1762
 
1748
1763
  /* Line 1455 of yacc.c */
1749
- #line 140 "parser.y"
1764
+ #line 146 "parser.y"
1765
+ {process_anchor_link((yyvsp[(1) - (1)].svalue));}
1766
+ break;
1767
+
1768
+ case 51:
1769
+
1770
+ /* Line 1455 of yacc.c */
1771
+ #line 147 "parser.y"
1772
+ {process_file_link((yyvsp[(1) - (1)].svalue));}
1773
+ break;
1774
+
1775
+ case 52:
1776
+
1777
+ /* Line 1455 of yacc.c */
1778
+ #line 148 "parser.y"
1750
1779
  {process_image_link((yyvsp[(1) - (1)].svalue));}
1751
1780
  break;
1752
1781
 
1753
- case 53:
1782
+ case 55:
1754
1783
 
1755
1784
  /* Line 1455 of yacc.c */
1756
- #line 145 "parser.y"
1785
+ #line 153 "parser.y"
1757
1786
  {concat_escaped_char((yyvsp[(1) - (1)].ivalue));}
1758
1787
  break;
1759
1788
 
1760
- case 54:
1789
+ case 56:
1761
1790
 
1762
1791
  /* Line 1455 of yacc.c */
1763
- #line 152 "parser.y"
1792
+ #line 160 "parser.y"
1764
1793
  {concat("<h1 id=\"",8); process_header((yyvsp[(1) - (1)].svalue));}
1765
1794
  break;
1766
1795
 
1767
- case 55:
1796
+ case 57:
1768
1797
 
1769
1798
  /* Line 1455 of yacc.c */
1770
- #line 153 "parser.y"
1799
+ #line 161 "parser.y"
1771
1800
  {concat("<h2 id=\"",8); process_header((yyvsp[(1) - (1)].svalue));}
1772
1801
  break;
1773
1802
 
1774
- case 56:
1803
+ case 58:
1775
1804
 
1776
1805
  /* Line 1455 of yacc.c */
1777
- #line 154 "parser.y"
1806
+ #line 162 "parser.y"
1778
1807
  {concat("<h3 id=\"",8); process_header((yyvsp[(1) - (1)].svalue));}
1779
1808
  break;
1780
1809
 
1781
- case 57:
1810
+ case 59:
1782
1811
 
1783
1812
  /* Line 1455 of yacc.c */
1784
- #line 155 "parser.y"
1813
+ #line 163 "parser.y"
1785
1814
  {concat("<h4 id=\"",8); process_header((yyvsp[(1) - (1)].svalue));}
1786
1815
  break;
1787
1816
 
1788
- case 58:
1817
+ case 60:
1789
1818
 
1790
1819
  /* Line 1455 of yacc.c */
1791
- #line 156 "parser.y"
1820
+ #line 164 "parser.y"
1792
1821
  {concat("<h5 id=\"",8); process_header((yyvsp[(1) - (1)].svalue));}
1793
1822
  break;
1794
1823
 
1795
- case 59:
1824
+ case 61:
1796
1825
 
1797
1826
  /* Line 1455 of yacc.c */
1798
- #line 158 "parser.y"
1827
+ #line 166 "parser.y"
1799
1828
  {concat("<li>",4);}
1800
1829
  break;
1801
1830
 
1802
- case 60:
1831
+ case 62:
1803
1832
 
1804
1833
  /* Line 1455 of yacc.c */
1805
- #line 159 "parser.y"
1834
+ #line 167 "parser.y"
1806
1835
  {concat("<li>",4);}
1807
1836
  break;
1808
1837
 
1809
- case 61:
1838
+ case 63:
1810
1839
 
1811
1840
  /* Line 1455 of yacc.c */
1812
- #line 160 "parser.y"
1841
+ #line 168 "parser.y"
1813
1842
  {concat("<br />",6);}
1814
1843
  break;
1815
1844
 
1816
- case 62:
1845
+ case 64:
1817
1846
 
1818
1847
  /* Line 1455 of yacc.c */
1819
- #line 163 "parser.y"
1848
+ #line 171 "parser.y"
1820
1849
  {concat("<pre><code>",11);}
1821
1850
  break;
1822
1851
 
1823
- case 63:
1852
+ case 65:
1824
1853
 
1825
1854
  /* Line 1455 of yacc.c */
1826
- #line 163 "parser.y"
1855
+ #line 171 "parser.y"
1827
1856
  {concat("</code></pre>",13);}
1828
1857
  break;
1829
1858
 
1830
- case 65:
1859
+ case 67:
1831
1860
 
1832
1861
  /* Line 1455 of yacc.c */
1833
- #line 165 "parser.y"
1862
+ #line 173 "parser.y"
1834
1863
  {concat("<pre>",5);}
1835
1864
  break;
1836
1865
 
1837
- case 66:
1866
+ case 68:
1838
1867
 
1839
1868
  /* Line 1455 of yacc.c */
1840
- #line 165 "parser.y"
1869
+ #line 173 "parser.y"
1841
1870
  {concat("</pre>",6);}
1842
1871
  break;
1843
1872
 
1844
- case 67:
1873
+ case 69:
1845
1874
 
1846
1875
  /* Line 1455 of yacc.c */
1847
- #line 166 "parser.y"
1876
+ #line 174 "parser.y"
1848
1877
  {concat("<code>",6);}
1849
1878
  break;
1850
1879
 
1851
- case 68:
1880
+ case 70:
1852
1881
 
1853
1882
  /* Line 1455 of yacc.c */
1854
- #line 166 "parser.y"
1883
+ #line 174 "parser.y"
1855
1884
  {concat("</code>",7);}
1856
1885
  break;
1857
1886
 
1858
1887
 
1859
1888
 
1860
1889
  /* Line 1455 of yacc.c */
1861
- #line 1862 "parser.tab.c"
1890
+ #line 1891 "parser.tab.c"
1862
1891
  default: break;
1863
1892
  }
1864
1893
  YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
@@ -2070,7 +2099,7 @@ yyreturn:
2070
2099
 
2071
2100
 
2072
2101
  /* Line 1675 of yacc.c */
2073
- #line 170 "parser.y"
2102
+ #line 178 "parser.y"
2074
2103
 
2075
2104
 
2076
2105
  concat_hex_char(char c){
@@ -2190,29 +2219,72 @@ process_url_link(const char*target,const char* proto){
2190
2219
  process_link_tail(target,NULL,proto);
2191
2220
  }
2192
2221
 
2193
- process_svn_link(const char*target){
2222
+ concat_site_url(){
2223
+ if( site_url && site_url_len > 0 ){
2224
+ concat(site_url, site_url_len);
2225
+ }
2226
+ }
2227
+
2228
+ process_svn_link(const char*target, int numbered_repo){
2194
2229
  const char *c;
2195
- concat("<a href=\"/code/",15);
2230
+ // can use sprintf here.. but I think it's a way slower than raw concat
2231
+ concat("<a href=\"",9);
2232
+ concat_site_url();
2233
+ concat("/code/",6);
2196
2234
  concat(space_name,space_name_len);
2197
- concat("/subversion/changesets/",23);
2235
+ if( numbered_repo ){
2236
+ concat("/subversion-",12);
2237
+ while( *target >= '0' && *target <= '9' ) concat_raw_char(*target++);
2238
+ while( *target == ':' ) target++;
2239
+ concat("/changesets/",12);
2240
+ } else {
2241
+ concat("/subversion/changesets/",23);
2242
+ }
2198
2243
  for(c=target; *c && *c!=']' && *c!='|'; c++) concat_raw_char(*c);
2199
2244
  process_link_tail(target,NULL,"revision:");
2200
2245
  }
2201
2246
 
2202
- process_git_link(const char*target){
2247
+ int concat_custom_git_url(){
2203
2248
  const char *c;
2204
- concat("<a href=\"/code/",15);
2205
- concat(space_name,space_name_len);
2206
- concat("/git/changesets/",16);
2249
+ if( git_url && (c = StringValuePtr(git_url)) ){
2250
+ size_t l = strlen(c);
2251
+ if( l>0 ){
2252
+ concat2(c);
2253
+ return 1;
2254
+ }
2255
+ }
2256
+ return 0;
2257
+ }
2258
+
2259
+ process_git_link(const char*target, int numbered_repo){
2260
+ const char *c;
2261
+ // can use sprintf here.. but I think it's a way slower than raw concat
2262
+ concat("<a href=\"",9);
2263
+ if( !concat_custom_git_url() ){
2264
+ concat_site_url();
2265
+ concat("/code/",6);
2266
+ concat(space_name,space_name_len);
2267
+ if( numbered_repo ){
2268
+ concat("/git-",5);
2269
+ while( *target >= '0' && *target <= '9' ) concat_raw_char(*target++);
2270
+ while( *target == ':' ) target++;
2271
+ concat("/changesets/",12);
2272
+ } else {
2273
+ concat("/git/changesets/",16);
2274
+ }
2275
+ }
2207
2276
  for(c=target; *c && *c!=']' && *c!='|'; c++) concat_raw_char(*c);
2208
2277
  process_link_tail(target,NULL,"revision:");
2209
2278
  }
2210
2279
 
2211
2280
  process_wiki_link(const char*target){
2212
2281
  const char *c;
2282
+ // can use sprintf here.. but I think it's a way slower than raw concat
2213
2283
  concat("<a class=\"wiki_link\" title=\"",28);
2214
2284
  for(c=target; *c && *c!=']' && *c!='|'; c++) concat_raw_char(*c);
2215
- concat("\" href=\"/wiki/show/",19);
2285
+ concat("\" href=\"",8);
2286
+ concat_site_url();
2287
+ concat("/wiki/show/",11);
2216
2288
  concat(space_name,space_name_len);
2217
2289
  concat_raw_char('/');
2218
2290
  for(c=target; *c && *c!=']' && *c!='|'; c++) concat_raw_char(*c);
@@ -2221,7 +2293,10 @@ process_wiki_link(const char*target){
2221
2293
 
2222
2294
  process_file_link(const char*target){
2223
2295
  const char *c;
2224
- concat("<a href=\"/spaces/",17);
2296
+ // can use sprintf here.. but I think it's a way slower than raw concat
2297
+ concat("<a href=\"",9);
2298
+ concat_site_url();
2299
+ concat("/spaces/",8);
2225
2300
  concat(space_name,space_name_len);
2226
2301
  concat("/documents/download/",20);
2227
2302
  for(c=target; *c && *c!=']' && *c!='|'; c++) concat_raw_char(*c);
@@ -2230,7 +2305,10 @@ process_file_link(const char*target){
2230
2305
 
2231
2306
  process_image_link(const char*target){
2232
2307
  const char *c, *p;
2233
- concat("<img src=\"/spaces/",18);
2308
+ // can use sprintf here.. but I think it's a way slower than raw concat
2309
+ concat("<img src=\"",10);
2310
+ concat_site_url();
2311
+ concat("/spaces/",8);
2234
2312
  concat(space_name,space_name_len);
2235
2313
  concat("/documents/download/",20);
2236
2314
  for(c=target; *c && *c!=']' && *c!='|'; c++) concat_raw_char(*c);
@@ -2246,7 +2324,10 @@ process_image_link(const char*target){
2246
2324
  process_ticket_link(const char*ticket_id){
2247
2325
  const char *c;
2248
2326
  while(*ticket_id && (*ticket_id < '0' || *ticket_id > '9') ) ticket_id++;
2249
- concat("<a href=\"/spaces/",17);
2327
+ // can use sprintf here.. but I think it's a way slower than raw concat
2328
+ concat("<a href=\"",9);
2329
+ concat_site_url();
2330
+ concat("/spaces/",8);
2250
2331
  concat(space_name,space_name_len);
2251
2332
  concat("/tickets/",9);
2252
2333
  for(c=ticket_id; *c && *c>='0' && *c<='9'; c++) concat_raw_char(*c);
@@ -2279,36 +2360,6 @@ concat_raw_char(int c){
2279
2360
  *bufptr++ = c;
2280
2361
  }
2281
2362
 
2282
- /*
2283
- concat_escaping_html(const char*what){
2284
- char *po = buf + strlen(buf);
2285
- const char *pi = what;
2286
-
2287
- for(;*pi;pi++){
2288
- switch(*pi){
2289
- case '<':
2290
- strcpy(po,"&lt;");
2291
- po += 4;
2292
- break;
2293
- case '>':
2294
- strcpy(po,"&gt;");
2295
- po += 4;
2296
- break;
2297
- case '"':
2298
- strcpy(po,"&quot;");
2299
- po += 6;
2300
- break;
2301
- case '&':
2302
- strcpy(po,"&amp;");
2303
- po += 5;
2304
- break;
2305
- default:
2306
- *po++ = *pi;
2307
- }
2308
- }
2309
- *po = 0;
2310
- }*/
2311
-
2312
2363
  process_url(const char*url){
2313
2364
  const char *p;
2314
2365