breakout_parser 0.0.20 → 0.0.23
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/ChangeLog +11 -5
- data/README +6 -1
- data/ext/breakout_parser/lex.yy.c +24 -20
- data/ext/breakout_parser/parser.tab.c +79 -85
- data/ext/breakout_parser/parser.tab.h +7 -6
- data/ext/breakout_parser/parser.y +14 -12
- data/ext/breakout_parser/ruby_ext.c +3 -3
- data/spec/parser_spec.rb +57 -55
- metadata +6 -6
data/ChangeLog
CHANGED
@@ -1,3 +1,9 @@
|
|
1
|
+
[ 0.0.21 ]
|
2
|
+
* emit correct urls for external svn links
|
3
|
+
(https://www.assembla.com/spaces/breakout/tickets/8472)
|
4
|
+
* emit restful wiki links
|
5
|
+
(https://www.assembla.com/spaces/breakout/tickets/8396)
|
6
|
+
|
1
7
|
[ 0.0.20 ]
|
2
8
|
|
3
9
|
* parse "$REV$" in external repo links
|
@@ -9,26 +15,26 @@
|
|
9
15
|
(https://www.assembla.com/spaces/breakout/tickets/6513)
|
10
16
|
|
11
17
|
[ 0.0.18 ]
|
12
|
-
|
18
|
+
|
13
19
|
* added README
|
14
20
|
* added option to make relative urls absolute
|
15
21
|
(https://www.assembla.com/spaces/breakout/tickets/6513)
|
16
22
|
|
17
23
|
[ 0.0.17 ]
|
18
|
-
|
24
|
+
|
19
25
|
* fix not-closing bold/italics tags when opened before <pre> and/or <code>
|
20
26
|
(https://www.assembla.com/spaces/breakout/tickets/6385)
|
21
27
|
|
22
28
|
[ 0.0.16 ]
|
23
|
-
|
29
|
+
|
24
30
|
* make a [[issue:123]] as a synonym to [[ticket:123]]
|
25
31
|
|
26
32
|
[ 0.0.15 ]
|
27
|
-
|
33
|
+
|
28
34
|
* allow spaces in links to wiki pages, re http://www.assembla.com/spaces/breakout/tickets/5916
|
29
35
|
|
30
36
|
[ 0.0.14 ]
|
31
|
-
|
37
|
+
|
32
38
|
* fix handling of broken multilevel lists, re https://www.assembla.com/spaces/breakout/tickets/5902
|
33
39
|
|
34
40
|
[ 0.0.13 ]
|
data/README
CHANGED
@@ -4,6 +4,11 @@ Breakout Parser
|
|
4
4
|
- simplified Textile parser with some Assembla-specific features
|
5
5
|
- converts Textile into HTML
|
6
6
|
|
7
|
+
Build dependencies
|
8
|
+
==================
|
9
|
+
|
10
|
+
You will need Flex, Bison, GCC, and GNU Make to build this gem.
|
11
|
+
|
7
12
|
|
8
13
|
Usage
|
9
14
|
===============
|
@@ -24,5 +29,5 @@ Arguments
|
|
24
29
|
data, # data to parse
|
25
30
|
space_name, # space name - for links parsing
|
26
31
|
site_url, # [optional] global site url
|
27
|
-
|
32
|
+
vcs_url # [optional] custom VCS url - f.ex. for github-hosted repos
|
28
33
|
)
|
@@ -53,7 +53,6 @@ typedef int flex_int32_t;
|
|
53
53
|
typedef unsigned char flex_uint8_t;
|
54
54
|
typedef unsigned short int flex_uint16_t;
|
55
55
|
typedef unsigned int flex_uint32_t;
|
56
|
-
#endif /* ! C99 */
|
57
56
|
|
58
57
|
/* Limits of integral types. */
|
59
58
|
#ifndef INT8_MIN
|
@@ -84,6 +83,8 @@ typedef unsigned int flex_uint32_t;
|
|
84
83
|
#define UINT32_MAX (4294967295U)
|
85
84
|
#endif
|
86
85
|
|
86
|
+
#endif /* ! C99 */
|
87
|
+
|
87
88
|
#endif /* ! FLEXINT_H */
|
88
89
|
|
89
90
|
#ifdef __cplusplus
|
@@ -140,7 +141,15 @@ typedef unsigned int flex_uint32_t;
|
|
140
141
|
|
141
142
|
/* Size of default input buffer. */
|
142
143
|
#ifndef YY_BUF_SIZE
|
144
|
+
#ifdef __ia64__
|
145
|
+
/* On IA-64, the buffer size is 16k, not 8k.
|
146
|
+
* Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case.
|
147
|
+
* Ditto for the __ia64__ case accordingly.
|
148
|
+
*/
|
149
|
+
#define YY_BUF_SIZE 32768
|
150
|
+
#else
|
143
151
|
#define YY_BUF_SIZE 16384
|
152
|
+
#endif /* __ia64__ */
|
144
153
|
#endif
|
145
154
|
|
146
155
|
/* The state buf must be large enough to hold one state per character in the main buffer.
|
@@ -1188,7 +1197,7 @@ extern size_t in_buf_len;
|
|
1188
1197
|
|
1189
1198
|
|
1190
1199
|
|
1191
|
-
#line
|
1200
|
+
#line 1201 "lex.yy.c"
|
1192
1201
|
|
1193
1202
|
#define INITIAL 0
|
1194
1203
|
#define _PRE_CODE 1
|
@@ -1286,7 +1295,12 @@ static int input (void );
|
|
1286
1295
|
|
1287
1296
|
/* Amount of stuff to slurp up with each read. */
|
1288
1297
|
#ifndef YY_READ_BUF_SIZE
|
1298
|
+
#ifdef __ia64__
|
1299
|
+
/* On IA-64, the buffer size is 16k, not 8k */
|
1300
|
+
#define YY_READ_BUF_SIZE 16384
|
1301
|
+
#else
|
1289
1302
|
#define YY_READ_BUF_SIZE 8192
|
1303
|
+
#endif /* __ia64__ */
|
1290
1304
|
#endif
|
1291
1305
|
|
1292
1306
|
/* Copy whatever the last rule matched to the standard output. */
|
@@ -1294,7 +1308,7 @@ static int input (void );
|
|
1294
1308
|
/* This used to be an fputs(), but since the string might contain NUL's,
|
1295
1309
|
* we now use fwrite().
|
1296
1310
|
*/
|
1297
|
-
#define ECHO fwrite( yytext, yyleng, 1, yyout )
|
1311
|
+
#define ECHO do { if (fwrite( yytext, yyleng, 1, yyout )) {} } while (0)
|
1298
1312
|
#endif
|
1299
1313
|
|
1300
1314
|
/* Gets input and stuffs it into "buf". number of characters read, or YY_NULL,
|
@@ -1305,7 +1319,7 @@ static int input (void );
|
|
1305
1319
|
if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \
|
1306
1320
|
{ \
|
1307
1321
|
int c = '*'; \
|
1308
|
-
|
1322
|
+
size_t n; \
|
1309
1323
|
for ( n = 0; n < max_size && \
|
1310
1324
|
(c = getc( yyin )) != EOF && c != '\n'; ++n ) \
|
1311
1325
|
buf[n] = (char) c; \
|
@@ -1394,7 +1408,7 @@ YY_DECL
|
|
1394
1408
|
|
1395
1409
|
if( parse_links_only ) BEGIN(_LINKS_ONLY);
|
1396
1410
|
|
1397
|
-
#line
|
1411
|
+
#line 1412 "lex.yy.c"
|
1398
1412
|
|
1399
1413
|
if ( !(yy_init) )
|
1400
1414
|
{
|
@@ -1954,7 +1968,7 @@ YY_RULE_SETUP
|
|
1954
1968
|
#line 203 "parser.l"
|
1955
1969
|
ECHO;
|
1956
1970
|
YY_BREAK
|
1957
|
-
#line
|
1971
|
+
#line 1972 "lex.yy.c"
|
1958
1972
|
case YY_STATE_EOF(INITIAL):
|
1959
1973
|
case YY_STATE_EOF(_LINKS_ONLY):
|
1960
1974
|
yyterminate();
|
@@ -2474,19 +2488,9 @@ static void yy_load_buffer_state (void)
|
|
2474
2488
|
yyfree((void *) b );
|
2475
2489
|
}
|
2476
2490
|
|
2477
|
-
#ifndef
|
2478
|
-
#ifdef __cplusplus
|
2479
|
-
extern "C" {
|
2480
|
-
#endif
|
2481
|
-
#ifdef __THROW /* this is a gnuism */
|
2482
|
-
extern int isatty (int ) __THROW;
|
2483
|
-
#else
|
2491
|
+
#ifndef __cplusplus
|
2484
2492
|
extern int isatty (int );
|
2485
|
-
#endif
|
2486
|
-
#ifdef __cplusplus
|
2487
|
-
}
|
2488
|
-
#endif
|
2489
|
-
#endif
|
2493
|
+
#endif /* __cplusplus */
|
2490
2494
|
|
2491
2495
|
/* Initializes or reinitializes a buffer.
|
2492
2496
|
* This function is sometimes called more than once on the same buffer,
|
@@ -2692,8 +2696,8 @@ YY_BUFFER_STATE yy_scan_string (yyconst char * yystr )
|
|
2692
2696
|
|
2693
2697
|
/** Setup the input buffer state to scan the given bytes. The next call to yylex() will
|
2694
2698
|
* scan from a @e copy of @a bytes.
|
2695
|
-
* @param
|
2696
|
-
* @param
|
2699
|
+
* @param yybytes the byte buffer to scan
|
2700
|
+
* @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes.
|
2697
2701
|
*
|
2698
2702
|
* @return the newly allocated buffer state object.
|
2699
2703
|
*/
|
@@ -1,9 +1,10 @@
|
|
1
|
-
|
1
|
+
|
2
|
+
/* A Bison parser, made by GNU Bison 2.4.1. */
|
2
3
|
|
3
4
|
/* Skeleton implementation for Bison's Yacc-like parsers in C
|
4
5
|
|
5
|
-
Copyright (C) 1984, 1989
|
6
|
-
Foundation, Inc.
|
6
|
+
Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
|
7
|
+
Free Software Foundation, Inc.
|
7
8
|
|
8
9
|
This program is free software: you can redistribute it and/or modify
|
9
10
|
it under the terms of the GNU General Public License as published by
|
@@ -45,7 +46,7 @@
|
|
45
46
|
#define YYBISON 1
|
46
47
|
|
47
48
|
/* Bison version. */
|
48
|
-
#define YYBISON_VERSION "2.4.
|
49
|
+
#define YYBISON_VERSION "2.4.1"
|
49
50
|
|
50
51
|
/* Skeleton name. */
|
51
52
|
#define YYSKELETON_NAME "yacc.c"
|
@@ -93,7 +94,7 @@ size_t space_name_len = 0;
|
|
93
94
|
const char *site_url = NULL;
|
94
95
|
size_t site_url_len = 0;
|
95
96
|
|
96
|
-
extern VALUE
|
97
|
+
extern VALUE vcs_url;
|
97
98
|
|
98
99
|
int list_level = 1;
|
99
100
|
int absolute_urls = 0;
|
@@ -137,7 +138,7 @@ void yyerror(const char *msg)
|
|
137
138
|
|
138
139
|
|
139
140
|
/* Line 189 of yacc.c */
|
140
|
-
#line
|
141
|
+
#line 142 "parser.tab.c"
|
141
142
|
|
142
143
|
/* Enabling traces. */
|
143
144
|
#ifndef YYDEBUG
|
@@ -226,7 +227,7 @@ typedef union YYSTYPE
|
|
226
227
|
|
227
228
|
|
228
229
|
/* Line 214 of yacc.c */
|
229
|
-
#line
|
230
|
+
#line 231 "parser.tab.c"
|
230
231
|
} YYSTYPE;
|
231
232
|
# define YYSTYPE_IS_TRIVIAL 1
|
232
233
|
# define yystype YYSTYPE /* obsolescent; will be withdrawn */
|
@@ -238,7 +239,7 @@ typedef union YYSTYPE
|
|
238
239
|
|
239
240
|
|
240
241
|
/* Line 264 of yacc.c */
|
241
|
-
#line
|
242
|
+
#line 243 "parser.tab.c"
|
242
243
|
|
243
244
|
#ifdef short
|
244
245
|
# undef short
|
@@ -288,7 +289,7 @@ typedef short int yytype_int16;
|
|
288
289
|
#define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
|
289
290
|
|
290
291
|
#ifndef YY_
|
291
|
-
# if
|
292
|
+
# if YYENABLE_NLS
|
292
293
|
# if ENABLE_NLS
|
293
294
|
# include <libintl.h> /* INFRINGES ON USER NAME SPACE */
|
294
295
|
# define YY_(msgid) dgettext ("bison-runtime", msgid)
|
@@ -733,18 +734,9 @@ static const yytype_uint8 yystos[] =
|
|
733
734
|
|
734
735
|
/* Like YYERROR except do call yyerror. This remains here temporarily
|
735
736
|
to ease the transition to the new meaning of YYERROR, for GCC.
|
736
|
-
Once GCC version 2 has supplanted version 1, this can go.
|
737
|
-
YYFAIL appears to be in use. Nevertheless, it is formally deprecated
|
738
|
-
in Bison 2.4.2's NEWS entry, where a plan to phase it out is
|
739
|
-
discussed. */
|
737
|
+
Once GCC version 2 has supplanted version 1, this can go. */
|
740
738
|
|
741
739
|
#define YYFAIL goto yyerrlab
|
742
|
-
#if defined YYFAIL
|
743
|
-
/* This is here to suppress warnings from the GCC cpp's
|
744
|
-
-Wunused-macros. Normally we don't worry about that warning, but
|
745
|
-
some users do, and we want to make it easy for users to remove
|
746
|
-
YYFAIL uses, which will produce warnings from Bison 2.5. */
|
747
|
-
#endif
|
748
740
|
|
749
741
|
#define YYRECOVERING() (!!yyerrstatus)
|
750
742
|
|
@@ -801,7 +793,7 @@ while (YYID (0))
|
|
801
793
|
we won't break user code: when these are the locations we know. */
|
802
794
|
|
803
795
|
#ifndef YY_LOCATION_PRINT
|
804
|
-
# if
|
796
|
+
# if YYLTYPE_IS_TRIVIAL
|
805
797
|
# define YY_LOCATION_PRINT(File, Loc) \
|
806
798
|
fprintf (File, "%d.%d-%d.%d", \
|
807
799
|
(Loc).first_line, (Loc).first_column, \
|
@@ -1540,42 +1532,42 @@ yyreduce:
|
|
1540
1532
|
{
|
1541
1533
|
case 6:
|
1542
1534
|
|
1543
|
-
/* Line
|
1535
|
+
/* Line 1455 of yacc.c */
|
1544
1536
|
#line 104 "parser.y"
|
1545
1537
|
{concat("</h1>",5);}
|
1546
1538
|
break;
|
1547
1539
|
|
1548
1540
|
case 7:
|
1549
1541
|
|
1550
|
-
/* Line
|
1542
|
+
/* Line 1455 of yacc.c */
|
1551
1543
|
#line 105 "parser.y"
|
1552
1544
|
{concat("</h2>",5);}
|
1553
1545
|
break;
|
1554
1546
|
|
1555
1547
|
case 8:
|
1556
1548
|
|
1557
|
-
/* Line
|
1549
|
+
/* Line 1455 of yacc.c */
|
1558
1550
|
#line 106 "parser.y"
|
1559
1551
|
{concat("</h3>",5);}
|
1560
1552
|
break;
|
1561
1553
|
|
1562
1554
|
case 9:
|
1563
1555
|
|
1564
|
-
/* Line
|
1556
|
+
/* Line 1455 of yacc.c */
|
1565
1557
|
#line 107 "parser.y"
|
1566
1558
|
{concat("</h4>",5);}
|
1567
1559
|
break;
|
1568
1560
|
|
1569
1561
|
case 10:
|
1570
1562
|
|
1571
|
-
/* Line
|
1563
|
+
/* Line 1455 of yacc.c */
|
1572
1564
|
#line 108 "parser.y"
|
1573
1565
|
{concat("</h5>",5);}
|
1574
1566
|
break;
|
1575
1567
|
|
1576
1568
|
case 11:
|
1577
1569
|
|
1578
|
-
/* Line
|
1570
|
+
/* Line 1455 of yacc.c */
|
1579
1571
|
#line 109 "parser.y"
|
1580
1572
|
{
|
1581
1573
|
list_level=1;
|
@@ -1585,7 +1577,7 @@ yyreduce:
|
|
1585
1577
|
|
1586
1578
|
case 12:
|
1587
1579
|
|
1588
|
-
/* Line
|
1580
|
+
/* Line 1455 of yacc.c */
|
1589
1581
|
#line 112 "parser.y"
|
1590
1582
|
{
|
1591
1583
|
concat("</ul>",5);
|
@@ -1595,7 +1587,7 @@ yyreduce:
|
|
1595
1587
|
|
1596
1588
|
case 14:
|
1597
1589
|
|
1598
|
-
/* Line
|
1590
|
+
/* Line 1455 of yacc.c */
|
1599
1591
|
#line 116 "parser.y"
|
1600
1592
|
{
|
1601
1593
|
list_level=1;
|
@@ -1605,7 +1597,7 @@ yyreduce:
|
|
1605
1597
|
|
1606
1598
|
case 15:
|
1607
1599
|
|
1608
|
-
/* Line
|
1600
|
+
/* Line 1455 of yacc.c */
|
1609
1601
|
#line 119 "parser.y"
|
1610
1602
|
{
|
1611
1603
|
concat("</ol>",5);
|
@@ -1615,302 +1607,302 @@ yyreduce:
|
|
1615
1607
|
|
1616
1608
|
case 18:
|
1617
1609
|
|
1618
|
-
/* Line
|
1610
|
+
/* Line 1455 of yacc.c */
|
1619
1611
|
#line 125 "parser.y"
|
1620
1612
|
{concat("</li>",5);}
|
1621
1613
|
break;
|
1622
1614
|
|
1623
1615
|
case 19:
|
1624
1616
|
|
1625
|
-
/* Line
|
1617
|
+
/* Line 1455 of yacc.c */
|
1626
1618
|
#line 126 "parser.y"
|
1627
1619
|
{concat("</li>",5);}
|
1628
1620
|
break;
|
1629
1621
|
|
1630
1622
|
case 22:
|
1631
1623
|
|
1632
|
-
/* Line
|
1624
|
+
/* Line 1455 of yacc.c */
|
1633
1625
|
#line 131 "parser.y"
|
1634
1626
|
{concat("</li>",5);}
|
1635
1627
|
break;
|
1636
1628
|
|
1637
1629
|
case 23:
|
1638
1630
|
|
1639
|
-
/* Line
|
1631
|
+
/* Line 1455 of yacc.c */
|
1640
1632
|
#line 132 "parser.y"
|
1641
1633
|
{concat("</li>",5);}
|
1642
1634
|
break;
|
1643
1635
|
|
1644
1636
|
case 30:
|
1645
1637
|
|
1646
|
-
/* Line
|
1638
|
+
/* Line 1455 of yacc.c */
|
1647
1639
|
#line 142 "parser.y"
|
1648
1640
|
{concat2((yyvsp[(1) - (1)].svalue));}
|
1649
1641
|
break;
|
1650
1642
|
|
1651
1643
|
case 31:
|
1652
1644
|
|
1653
|
-
/* Line
|
1645
|
+
/* Line 1455 of yacc.c */
|
1654
1646
|
#line 143 "parser.y"
|
1655
1647
|
{process_url((yyvsp[(1) - (1)].svalue));}
|
1656
1648
|
break;
|
1657
1649
|
|
1658
1650
|
case 32:
|
1659
1651
|
|
1660
|
-
/* Line
|
1652
|
+
/* Line 1455 of yacc.c */
|
1661
1653
|
#line 144 "parser.y"
|
1662
1654
|
{process_email((yyvsp[(1) - (1)].svalue));}
|
1663
1655
|
break;
|
1664
1656
|
|
1665
1657
|
case 33:
|
1666
1658
|
|
1667
|
-
/* Line
|
1659
|
+
/* Line 1455 of yacc.c */
|
1668
1660
|
#line 145 "parser.y"
|
1669
1661
|
{(yyvsp[(1) - (1)].ivalue) ? concat(" <strong>",9) : concat("<strong>",8);}
|
1670
1662
|
break;
|
1671
1663
|
|
1672
1664
|
case 34:
|
1673
1665
|
|
1674
|
-
/* Line
|
1666
|
+
/* Line 1455 of yacc.c */
|
1675
1667
|
#line 146 "parser.y"
|
1676
1668
|
{concat("</strong>",9);}
|
1677
1669
|
break;
|
1678
1670
|
|
1679
1671
|
case 35:
|
1680
1672
|
|
1681
|
-
/* Line
|
1673
|
+
/* Line 1455 of yacc.c */
|
1682
1674
|
#line 147 "parser.y"
|
1683
1675
|
{(yyvsp[(1) - (1)].ivalue) ? concat(" <em>",5) : concat("<em>",4);}
|
1684
1676
|
break;
|
1685
1677
|
|
1686
1678
|
case 36:
|
1687
1679
|
|
1688
|
-
/* Line
|
1680
|
+
/* Line 1455 of yacc.c */
|
1689
1681
|
#line 148 "parser.y"
|
1690
1682
|
{concat("</em>",5);}
|
1691
1683
|
break;
|
1692
1684
|
|
1693
1685
|
case 37:
|
1694
1686
|
|
1695
|
-
/* Line
|
1687
|
+
/* Line 1455 of yacc.c */
|
1696
1688
|
#line 149 "parser.y"
|
1697
1689
|
{(yyvsp[(1) - (1)].ivalue) ? concat(" <strong><em>",13) : concat("<strong><em>",12);}
|
1698
1690
|
break;
|
1699
1691
|
|
1700
1692
|
case 38:
|
1701
1693
|
|
1702
|
-
/* Line
|
1694
|
+
/* Line 1455 of yacc.c */
|
1703
1695
|
#line 150 "parser.y"
|
1704
1696
|
{(yyvsp[(1) - (1)].ivalue) ? concat(" <em><strong>",13) : concat("<em><strong>",12);}
|
1705
1697
|
break;
|
1706
1698
|
|
1707
1699
|
case 39:
|
1708
1700
|
|
1709
|
-
/* Line
|
1701
|
+
/* Line 1455 of yacc.c */
|
1710
1702
|
#line 151 "parser.y"
|
1711
1703
|
{process_inline_code((yyvsp[(1) - (1)].svalue));}
|
1712
1704
|
break;
|
1713
1705
|
|
1714
1706
|
case 40:
|
1715
1707
|
|
1716
|
-
/* Line
|
1708
|
+
/* Line 1455 of yacc.c */
|
1717
1709
|
#line 152 "parser.y"
|
1718
1710
|
{revert_bold();}
|
1719
1711
|
break;
|
1720
1712
|
|
1721
1713
|
case 41:
|
1722
1714
|
|
1723
|
-
/* Line
|
1715
|
+
/* Line 1455 of yacc.c */
|
1724
1716
|
#line 153 "parser.y"
|
1725
1717
|
{revert_italic();}
|
1726
1718
|
break;
|
1727
1719
|
|
1728
1720
|
case 42:
|
1729
1721
|
|
1730
|
-
/* Line
|
1722
|
+
/* Line 1455 of yacc.c */
|
1731
1723
|
#line 155 "parser.y"
|
1732
1724
|
{process_ticket_link((yyvsp[(1) - (1)].svalue));}
|
1733
1725
|
break;
|
1734
1726
|
|
1735
1727
|
case 43:
|
1736
1728
|
|
1737
|
-
/* Line
|
1729
|
+
/* Line 1455 of yacc.c */
|
1738
1730
|
#line 156 "parser.y"
|
1739
1731
|
{process_svn_link((yyvsp[(1) - (1)].svalue),0);}
|
1740
1732
|
break;
|
1741
1733
|
|
1742
1734
|
case 44:
|
1743
1735
|
|
1744
|
-
/* Line
|
1736
|
+
/* Line 1455 of yacc.c */
|
1745
1737
|
#line 157 "parser.y"
|
1746
1738
|
{process_git_link((yyvsp[(1) - (1)].svalue),0);}
|
1747
1739
|
break;
|
1748
1740
|
|
1749
1741
|
case 45:
|
1750
1742
|
|
1751
|
-
/* Line
|
1743
|
+
/* Line 1455 of yacc.c */
|
1752
1744
|
#line 158 "parser.y"
|
1753
1745
|
{process_svn_link((yyvsp[(1) - (1)].svalue),1);}
|
1754
1746
|
break;
|
1755
1747
|
|
1756
1748
|
case 46:
|
1757
1749
|
|
1758
|
-
/* Line
|
1750
|
+
/* Line 1455 of yacc.c */
|
1759
1751
|
#line 159 "parser.y"
|
1760
1752
|
{process_git_link((yyvsp[(1) - (1)].svalue),1);}
|
1761
1753
|
break;
|
1762
1754
|
|
1763
1755
|
case 47:
|
1764
1756
|
|
1765
|
-
/* Line
|
1757
|
+
/* Line 1455 of yacc.c */
|
1766
1758
|
#line 160 "parser.y"
|
1767
1759
|
{process_url_link((yyvsp[(1) - (1)].svalue),NULL);}
|
1768
1760
|
break;
|
1769
1761
|
|
1770
1762
|
case 48:
|
1771
1763
|
|
1772
|
-
/* Line
|
1764
|
+
/* Line 1455 of yacc.c */
|
1773
1765
|
#line 161 "parser.y"
|
1774
1766
|
{process_url_link((yyvsp[(1) - (1)].svalue),"http://");}
|
1775
1767
|
break;
|
1776
1768
|
|
1777
1769
|
case 49:
|
1778
1770
|
|
1779
|
-
/* Line
|
1771
|
+
/* Line 1455 of yacc.c */
|
1780
1772
|
#line 162 "parser.y"
|
1781
1773
|
{process_wiki_link((yyvsp[(1) - (1)].svalue));}
|
1782
1774
|
break;
|
1783
1775
|
|
1784
1776
|
case 50:
|
1785
1777
|
|
1786
|
-
/* Line
|
1778
|
+
/* Line 1455 of yacc.c */
|
1787
1779
|
#line 163 "parser.y"
|
1788
1780
|
{process_anchor_link((yyvsp[(1) - (1)].svalue));}
|
1789
1781
|
break;
|
1790
1782
|
|
1791
1783
|
case 51:
|
1792
1784
|
|
1793
|
-
/* Line
|
1785
|
+
/* Line 1455 of yacc.c */
|
1794
1786
|
#line 164 "parser.y"
|
1795
1787
|
{process_file_link((yyvsp[(1) - (1)].svalue));}
|
1796
1788
|
break;
|
1797
1789
|
|
1798
1790
|
case 52:
|
1799
1791
|
|
1800
|
-
/* Line
|
1792
|
+
/* Line 1455 of yacc.c */
|
1801
1793
|
#line 165 "parser.y"
|
1802
1794
|
{process_image_link((yyvsp[(1) - (1)].svalue));}
|
1803
1795
|
break;
|
1804
1796
|
|
1805
1797
|
case 55:
|
1806
1798
|
|
1807
|
-
/* Line
|
1799
|
+
/* Line 1455 of yacc.c */
|
1808
1800
|
#line 170 "parser.y"
|
1809
1801
|
{concat_escaped_char((yyvsp[(1) - (1)].ivalue));}
|
1810
1802
|
break;
|
1811
1803
|
|
1812
1804
|
case 56:
|
1813
1805
|
|
1814
|
-
/* Line
|
1806
|
+
/* Line 1455 of yacc.c */
|
1815
1807
|
#line 177 "parser.y"
|
1816
1808
|
{concat("<h1 id=\"h-",10); process_header((yyvsp[(1) - (1)].svalue));}
|
1817
1809
|
break;
|
1818
1810
|
|
1819
1811
|
case 57:
|
1820
1812
|
|
1821
|
-
/* Line
|
1813
|
+
/* Line 1455 of yacc.c */
|
1822
1814
|
#line 178 "parser.y"
|
1823
1815
|
{concat("<h2 id=\"h-",10); process_header((yyvsp[(1) - (1)].svalue));}
|
1824
1816
|
break;
|
1825
1817
|
|
1826
1818
|
case 58:
|
1827
1819
|
|
1828
|
-
/* Line
|
1820
|
+
/* Line 1455 of yacc.c */
|
1829
1821
|
#line 179 "parser.y"
|
1830
1822
|
{concat("<h3 id=\"h-",10); process_header((yyvsp[(1) - (1)].svalue));}
|
1831
1823
|
break;
|
1832
1824
|
|
1833
1825
|
case 59:
|
1834
1826
|
|
1835
|
-
/* Line
|
1827
|
+
/* Line 1455 of yacc.c */
|
1836
1828
|
#line 180 "parser.y"
|
1837
1829
|
{concat("<h4 id=\"h-",10); process_header((yyvsp[(1) - (1)].svalue));}
|
1838
1830
|
break;
|
1839
1831
|
|
1840
1832
|
case 60:
|
1841
1833
|
|
1842
|
-
/* Line
|
1834
|
+
/* Line 1455 of yacc.c */
|
1843
1835
|
#line 181 "parser.y"
|
1844
1836
|
{concat("<h5 id=\"h-",10); process_header((yyvsp[(1) - (1)].svalue));}
|
1845
1837
|
break;
|
1846
1838
|
|
1847
1839
|
case 61:
|
1848
1840
|
|
1849
|
-
/* Line
|
1841
|
+
/* Line 1455 of yacc.c */
|
1850
1842
|
#line 183 "parser.y"
|
1851
1843
|
{process_oli((yyvsp[(1) - (1)].ivalue));}
|
1852
1844
|
break;
|
1853
1845
|
|
1854
1846
|
case 62:
|
1855
1847
|
|
1856
|
-
/* Line
|
1848
|
+
/* Line 1455 of yacc.c */
|
1857
1849
|
#line 184 "parser.y"
|
1858
1850
|
{process_uli((yyvsp[(1) - (1)].ivalue));}
|
1859
1851
|
break;
|
1860
1852
|
|
1861
1853
|
case 63:
|
1862
1854
|
|
1863
|
-
/* Line
|
1855
|
+
/* Line 1455 of yacc.c */
|
1864
1856
|
#line 185 "parser.y"
|
1865
1857
|
{concat("<br />",6);}
|
1866
1858
|
break;
|
1867
1859
|
|
1868
1860
|
case 64:
|
1869
1861
|
|
1870
|
-
/* Line
|
1862
|
+
/* Line 1455 of yacc.c */
|
1871
1863
|
#line 188 "parser.y"
|
1872
1864
|
{concat("<pre><code>",11);}
|
1873
1865
|
break;
|
1874
1866
|
|
1875
1867
|
case 65:
|
1876
1868
|
|
1877
|
-
/* Line
|
1869
|
+
/* Line 1455 of yacc.c */
|
1878
1870
|
#line 188 "parser.y"
|
1879
1871
|
{concat("</code></pre>",13);}
|
1880
1872
|
break;
|
1881
1873
|
|
1882
1874
|
case 67:
|
1883
1875
|
|
1884
|
-
/* Line
|
1876
|
+
/* Line 1455 of yacc.c */
|
1885
1877
|
#line 190 "parser.y"
|
1886
1878
|
{concat("<pre>",5);}
|
1887
1879
|
break;
|
1888
1880
|
|
1889
1881
|
case 68:
|
1890
1882
|
|
1891
|
-
/* Line
|
1883
|
+
/* Line 1455 of yacc.c */
|
1892
1884
|
#line 190 "parser.y"
|
1893
1885
|
{concat("</pre>",6);}
|
1894
1886
|
break;
|
1895
1887
|
|
1896
1888
|
case 69:
|
1897
1889
|
|
1898
|
-
/* Line
|
1890
|
+
/* Line 1455 of yacc.c */
|
1899
1891
|
#line 191 "parser.y"
|
1900
1892
|
{concat("<code>",6);}
|
1901
1893
|
break;
|
1902
1894
|
|
1903
1895
|
case 70:
|
1904
1896
|
|
1905
|
-
/* Line
|
1897
|
+
/* Line 1455 of yacc.c */
|
1906
1898
|
#line 191 "parser.y"
|
1907
1899
|
{concat("</code>",7);}
|
1908
1900
|
break;
|
1909
1901
|
|
1910
1902
|
|
1911
1903
|
|
1912
|
-
/* Line
|
1913
|
-
#line
|
1904
|
+
/* Line 1455 of yacc.c */
|
1905
|
+
#line 1906 "parser.tab.c"
|
1914
1906
|
default: break;
|
1915
1907
|
}
|
1916
1908
|
YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
|
@@ -2121,7 +2113,7 @@ yyreturn:
|
|
2121
2113
|
|
2122
2114
|
|
2123
2115
|
|
2124
|
-
/* Line
|
2116
|
+
/* Line 1675 of yacc.c */
|
2125
2117
|
#line 195 "parser.y"
|
2126
2118
|
|
2127
2119
|
|
@@ -2290,24 +2282,26 @@ process_svn_link(const char*target, int numbered_repo){
|
|
2290
2282
|
const char *c;
|
2291
2283
|
// can use sprintf here.. but I think it's a way slower than raw concat
|
2292
2284
|
concat("<a href=\"",9);
|
2293
|
-
|
2294
|
-
|
2295
|
-
|
2296
|
-
|
2285
|
+
if( !concat_custom_vcs_url(target) ){
|
2286
|
+
concat_site_url();
|
2287
|
+
concat("/code/",6);
|
2288
|
+
concat(space_name,space_name_len);
|
2289
|
+
if( numbered_repo ){
|
2297
2290
|
concat("/subversion-",12);
|
2298
2291
|
while( *target >= '0' && *target <= '9' ) concat_raw_char(*target++);
|
2299
2292
|
while( *target == ':' ) target++;
|
2300
2293
|
concat("/changesets/",12);
|
2301
|
-
|
2294
|
+
} else {
|
2302
2295
|
concat("/subversion/changesets/",23);
|
2296
|
+
}
|
2297
|
+
for(c=target; *c && *c!=']' && *c!='|'; c++) concat_raw_char(*c);
|
2303
2298
|
}
|
2304
|
-
for(c=target; *c && *c!=']' && *c!='|'; c++) concat_raw_char(*c);
|
2305
2299
|
process_link_tail(target,NULL,"revision:");
|
2306
2300
|
}
|
2307
2301
|
|
2308
|
-
int
|
2302
|
+
int concat_custom_vcs_url(const char*rev){
|
2309
2303
|
const char *c,*p,*t;
|
2310
|
-
if(
|
2304
|
+
if( vcs_url && (c = StringValuePtr(vcs_url)) ){
|
2311
2305
|
size_t l = strlen(c);
|
2312
2306
|
if( l>0 ){
|
2313
2307
|
if( p=strstr(c, "$REV$") ){
|
@@ -2330,7 +2324,7 @@ process_git_link(const char*target, int numbered_repo){
|
|
2330
2324
|
const char *c;
|
2331
2325
|
// can use sprintf here.. but I think it's a way slower than raw concat
|
2332
2326
|
concat("<a href=\"",9);
|
2333
|
-
if( !
|
2327
|
+
if( !concat_custom_vcs_url(target) ){
|
2334
2328
|
concat_site_url();
|
2335
2329
|
concat("/code/",6);
|
2336
2330
|
concat(space_name,space_name_len);
|
@@ -2354,9 +2348,9 @@ process_wiki_link(const char*target){
|
|
2354
2348
|
for(c=target; *c && *c!=']' && *c!='|'; c++) concat_raw_char(*c);
|
2355
2349
|
concat("\" href=\"",8);
|
2356
2350
|
concat_site_url();
|
2357
|
-
concat("/
|
2351
|
+
concat("/spaces/",8);
|
2358
2352
|
concat(space_name,space_name_len);
|
2359
|
-
|
2353
|
+
concat("/wiki/",6);
|
2360
2354
|
for(c=target; *c && *c!=']' && *c!='|' && *c!='#'; c++) concat_raw_char( *c == ' ' ? '_' : *c );
|
2361
2355
|
if( *c == '#' ){
|
2362
2356
|
concat_raw_char('#');
|
@@ -1,9 +1,10 @@
|
|
1
|
-
|
1
|
+
|
2
|
+
/* A Bison parser, made by GNU Bison 2.4.1. */
|
2
3
|
|
3
4
|
/* Skeleton interface for Bison's Yacc-like parsers in C
|
4
5
|
|
5
|
-
Copyright (C) 1984, 1989
|
6
|
-
Foundation, Inc.
|
6
|
+
Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
|
7
|
+
Free Software Foundation, Inc.
|
7
8
|
|
8
9
|
This program is free software: you can redistribute it and/or modify
|
9
10
|
it under the terms of the GNU General Public License as published by
|
@@ -90,7 +91,7 @@
|
|
90
91
|
typedef union YYSTYPE
|
91
92
|
{
|
92
93
|
|
93
|
-
/* Line
|
94
|
+
/* Line 1676 of yacc.c */
|
94
95
|
#line 70 "parser.y"
|
95
96
|
|
96
97
|
double dvalue;
|
@@ -99,8 +100,8 @@ typedef union YYSTYPE
|
|
99
100
|
|
100
101
|
|
101
102
|
|
102
|
-
/* Line
|
103
|
-
#line
|
103
|
+
/* Line 1676 of yacc.c */
|
104
|
+
#line 105 "parser.tab.h"
|
104
105
|
} YYSTYPE;
|
105
106
|
# define YYSTYPE_IS_TRIVIAL 1
|
106
107
|
# define yystype YYSTYPE /* obsolescent; will be withdrawn */
|
@@ -24,7 +24,7 @@ size_t space_name_len = 0;
|
|
24
24
|
const char *site_url = NULL;
|
25
25
|
size_t site_url_len = 0;
|
26
26
|
|
27
|
-
extern VALUE
|
27
|
+
extern VALUE vcs_url;
|
28
28
|
|
29
29
|
int list_level = 1;
|
30
30
|
int absolute_urls = 0;
|
@@ -359,24 +359,26 @@ process_svn_link(const char*target, int numbered_repo){
|
|
359
359
|
const char *c;
|
360
360
|
// can use sprintf here.. but I think it's a way slower than raw concat
|
361
361
|
concat("<a href=\"",9);
|
362
|
-
|
363
|
-
|
364
|
-
|
365
|
-
|
362
|
+
if( !concat_custom_vcs_url(target) ){
|
363
|
+
concat_site_url();
|
364
|
+
concat("/code/",6);
|
365
|
+
concat(space_name,space_name_len);
|
366
|
+
if( numbered_repo ){
|
366
367
|
concat("/subversion-",12);
|
367
368
|
while( *target >= '0' && *target <= '9' ) concat_raw_char(*target++);
|
368
369
|
while( *target == ':' ) target++;
|
369
370
|
concat("/changesets/",12);
|
370
|
-
|
371
|
+
} else {
|
371
372
|
concat("/subversion/changesets/",23);
|
373
|
+
}
|
374
|
+
for(c=target; *c && *c!=']' && *c!='|'; c++) concat_raw_char(*c);
|
372
375
|
}
|
373
|
-
for(c=target; *c && *c!=']' && *c!='|'; c++) concat_raw_char(*c);
|
374
376
|
process_link_tail(target,NULL,"revision:");
|
375
377
|
}
|
376
378
|
|
377
|
-
int
|
379
|
+
int concat_custom_vcs_url(const char*rev){
|
378
380
|
const char *c,*p,*t;
|
379
|
-
if(
|
381
|
+
if( vcs_url && (c = StringValuePtr(vcs_url)) ){
|
380
382
|
size_t l = strlen(c);
|
381
383
|
if( l>0 ){
|
382
384
|
if( p=strstr(c, "$REV$") ){
|
@@ -399,7 +401,7 @@ process_git_link(const char*target, int numbered_repo){
|
|
399
401
|
const char *c;
|
400
402
|
// can use sprintf here.. but I think it's a way slower than raw concat
|
401
403
|
concat("<a href=\"",9);
|
402
|
-
if( !
|
404
|
+
if( !concat_custom_vcs_url(target) ){
|
403
405
|
concat_site_url();
|
404
406
|
concat("/code/",6);
|
405
407
|
concat(space_name,space_name_len);
|
@@ -423,9 +425,9 @@ process_wiki_link(const char*target){
|
|
423
425
|
for(c=target; *c && *c!=']' && *c!='|'; c++) concat_raw_char(*c);
|
424
426
|
concat("\" href=\"",8);
|
425
427
|
concat_site_url();
|
426
|
-
concat("/
|
428
|
+
concat("/spaces/",8);
|
427
429
|
concat(space_name,space_name_len);
|
428
|
-
|
430
|
+
concat("/wiki/",6);
|
429
431
|
for(c=target; *c && *c!=']' && *c!='|' && *c!='#'; c++) concat_raw_char( *c == ' ' ? '_' : *c );
|
430
432
|
if( *c == '#' ){
|
431
433
|
concat_raw_char('#');
|
@@ -22,7 +22,7 @@ extern size_t in_buf_len, bufsize, space_name_len;
|
|
22
22
|
extern const char *site_url;
|
23
23
|
extern size_t site_url_len;
|
24
24
|
|
25
|
-
VALUE
|
25
|
+
VALUE vcs_url;
|
26
26
|
|
27
27
|
extern int parse_links_only, absolute_urls;
|
28
28
|
|
@@ -48,9 +48,9 @@ VALUE do_parse(int argc, VALUE *argv, VALUE self) {
|
|
48
48
|
}
|
49
49
|
}
|
50
50
|
|
51
|
-
|
51
|
+
vcs_url = NULL;
|
52
52
|
if( argc > 3 && argv[3] != Qnil && argv[3] != Qfalse ){
|
53
|
-
|
53
|
+
vcs_url = argv[3];
|
54
54
|
}
|
55
55
|
|
56
56
|
absolute_urls = 0;
|
data/spec/parser_spec.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
1
2
|
require 'breakout_parser'
|
2
3
|
require File.dirname(__FILE__) + '/obj_proxy'
|
3
4
|
|
@@ -808,12 +809,12 @@ describe 'BreakoutParser' do
|
|
808
809
|
|
809
810
|
describe "Assembla Links" do
|
810
811
|
a = {}
|
811
|
-
a["wiki:Name"] = '<a class="wiki_link" title="Name" href="/
|
812
|
-
a["wiki:Name With Space"] = '<a class="wiki_link" title="Name With Space" href="/
|
813
|
-
a["Name"] = '<a class="wiki_link" title="Name" href="/
|
814
|
-
a["Name With Space"] = '<a class="wiki_link" title="Name With Space" href="/
|
815
|
-
a["Name#Ref"] = '<a class="wiki_link" title="Name#Ref" href="/
|
816
|
-
a["Name#h-Ref"] = '<a class="wiki_link" title="Name#h-Ref" href="/
|
812
|
+
a["wiki:Name"] = '<a class="wiki_link" title="Name" href="/spaces/test_space/wiki/Name">Name</a>'
|
813
|
+
a["wiki:Name With Space"] = '<a class="wiki_link" title="Name With Space" href="/spaces/test_space/wiki/Name_With_Space">Name With Space</a>'
|
814
|
+
a["Name"] = '<a class="wiki_link" title="Name" href="/spaces/test_space/wiki/Name">Name</a>'
|
815
|
+
a["Name With Space"] = '<a class="wiki_link" title="Name With Space" href="/spaces/test_space/wiki/Name_With_Space">Name With Space</a>'
|
816
|
+
a["Name#Ref"] = '<a class="wiki_link" title="Name#Ref" href="/spaces/test_space/wiki/Name#h-Ref">Name#Ref</a>'
|
817
|
+
a["Name#h-Ref"] = '<a class="wiki_link" title="Name#h-Ref" href="/spaces/test_space/wiki/Name#h-h-Ref">Name#h-Ref</a>'
|
817
818
|
a["#Ref"] = '<a href="#h-Ref" title="#Ref" class="wiki_link">#Ref</a>'
|
818
819
|
a["#привет"] = %Q|<a href="#h-#{hex_string("привет")}" title="#привет" class="wiki_link">#привет</a>|
|
819
820
|
a["#with spc"] = %Q|<a href="#h-with__spc" title="#with spc" class="wiki_link">#with spc</a>|
|
@@ -849,6 +850,8 @@ describe 'BreakoutParser' do
|
|
849
850
|
a["file:cVJUz6ejWr35pEab_qKWB8"] =
|
850
851
|
'<a href="/spaces/test_space/documents/download/cVJUz6ejWr35pEab_qKWB8">file:cVJUz6ejWr35pEab_qKWB8</a>'
|
851
852
|
|
853
|
+
pat = Regexp.new('/code/test_space/(git|subversion)/changesets/')
|
854
|
+
|
852
855
|
a.each do |k,v|
|
853
856
|
it "parses [[#{k}]]" do
|
854
857
|
parse("[[#{k}]]").should == v
|
@@ -878,82 +881,81 @@ describe 'BreakoutParser' do
|
|
878
881
|
v.gsub('href="/',"href=\"#{site_url}/")
|
879
882
|
end
|
880
883
|
end
|
881
|
-
if v['/git/']
|
882
|
-
it "parses [[#{k}]] with custom
|
883
|
-
|
884
|
+
if v['/git/'] || v['/subversion/']
|
885
|
+
it "parses [[#{k}]] with custom vcs_url (String)" do
|
886
|
+
vcs_url = "http://www.ru/"
|
884
887
|
rev = k.split(':').last.tr(']','')
|
885
|
-
parse("[[#{k}]]", :
|
886
|
-
v.sub(
|
888
|
+
parse("[[#{k}]]", :vcs_url => vcs_url).should ==
|
889
|
+
v.sub(pat,vcs_url)
|
887
890
|
end
|
888
891
|
|
889
|
-
it "parses [[#{k}]] with custom
|
892
|
+
it "parses [[#{k}]] with custom vcs_url (ObjProxy)" do
|
890
893
|
rev = k.split(':').last.tr(']','')
|
891
894
|
@asdfg = 'http://mmm.us'
|
892
|
-
|
895
|
+
vcs_url = Breakout::ObjProxy.new do
|
893
896
|
@asdfg + '/'
|
894
897
|
end
|
895
|
-
parse("[[#{k}]]", :
|
896
|
-
v.sub(
|
898
|
+
parse("[[#{k}]]", :vcs_url => vcs_url).should ==
|
899
|
+
v.sub(pat,vcs_url)
|
897
900
|
end
|
898
901
|
|
899
|
-
it "parses [[#{k}]] with custom
|
900
|
-
|
902
|
+
it "parses [[#{k}]] with custom vcs_url (String) + $REV$" do
|
903
|
+
vcs_url = "http://www.ru/$REV$/show"
|
901
904
|
rev = k.split(':').last.tr(']','')
|
902
|
-
parse("[[#{k}]]", :
|
903
|
-
v.sub(
|
905
|
+
parse("[[#{k}]]", :vcs_url => vcs_url).should ==
|
906
|
+
v.sub(pat,vcs_url).sub(rev,'').sub('$REV$',rev)
|
904
907
|
|
905
|
-
|
906
|
-
parse("[[#{k}]]", :
|
907
|
-
v.sub(
|
908
|
+
vcs_url = "http://www.ru/$REV$"
|
909
|
+
parse("[[#{k}]]", :vcs_url => vcs_url).should ==
|
910
|
+
v.sub(pat,vcs_url).sub(rev,'').sub('$REV$',rev)
|
908
911
|
|
909
|
-
|
910
|
-
parse("[[#{k}]]", :
|
911
|
-
v.sub(
|
912
|
+
vcs_url = "$REV$"
|
913
|
+
parse("[[#{k}]]", :vcs_url => vcs_url).should ==
|
914
|
+
v.sub(pat,vcs_url).sub(rev,'').sub('$REV$',rev)
|
912
915
|
end
|
913
916
|
|
914
|
-
it "parses [[#{k}]] with custom
|
917
|
+
it "parses [[#{k}]] with custom vcs_url (ObjProxy) + $REV$" do
|
915
918
|
rev = k.split(':').last.tr(']','')
|
916
919
|
@asdfg = 'http://mmm.us/$REV$/show'
|
917
|
-
|
920
|
+
vcs_url = Breakout::ObjProxy.new do
|
918
921
|
@asdfg
|
919
922
|
end
|
920
|
-
parse("[[#{k}]]", :
|
921
|
-
v.sub(
|
923
|
+
parse("[[#{k}]]", :vcs_url => vcs_url).should ==
|
924
|
+
v.sub(pat,vcs_url).sub(rev,'').sub('$REV$',rev)
|
922
925
|
|
923
926
|
@asdfg = 'http://mmm.us/$REV$'
|
924
|
-
parse("[[#{k}]]", :
|
925
|
-
v.sub(
|
927
|
+
parse("[[#{k}]]", :vcs_url => vcs_url).should ==
|
928
|
+
v.sub(pat,vcs_url).sub(rev,'').sub('$REV$',rev)
|
926
929
|
|
927
930
|
@asdfg = '$REV$'
|
928
|
-
parse("[[#{k}]]", :
|
929
|
-
v.sub(
|
931
|
+
parse("[[#{k}]]", :vcs_url => vcs_url).should ==
|
932
|
+
v.sub(pat,vcs_url).sub(rev,'').sub('$REV$',rev)
|
930
933
|
end
|
931
934
|
|
932
|
-
it "parses [[#{k}]] with NULL
|
935
|
+
it "parses [[#{k}]] with NULL vcs_url (ObjProxy)" do
|
933
936
|
rev = k.split(':').last.tr(']','')
|
934
|
-
|
937
|
+
vcs_url = Breakout::ObjProxy.new do
|
935
938
|
nil
|
936
939
|
end
|
937
|
-
parse("[[#{k}]]", :
|
940
|
+
parse("[[#{k}]]", :vcs_url => vcs_url).should == v
|
938
941
|
end
|
939
942
|
|
940
|
-
it "parses [[#{k}]] with FALSE
|
943
|
+
it "parses [[#{k}]] with FALSE vcs_url (ObjProxy)" do
|
941
944
|
rev = k.split(':').last.tr(']','')
|
942
|
-
|
945
|
+
vcs_url = Breakout::ObjProxy.new do
|
943
946
|
false
|
944
947
|
end
|
945
|
-
parse("[[#{k}]]", :
|
948
|
+
parse("[[#{k}]]", :vcs_url => vcs_url).should == v
|
946
949
|
end
|
947
950
|
end
|
948
951
|
end
|
949
952
|
|
950
|
-
it "should not instantiate ObjProxy's internal object if there
|
951
|
-
|
953
|
+
it "should not instantiate ObjProxy's internal object if there are no git or svn links in text" do
|
954
|
+
vcs_url = Breakout::ObjProxy.new do
|
952
955
|
raise 'should not be raised'
|
953
956
|
end
|
954
957
|
lambda {
|
955
|
-
parse("
|
956
|
-
'<a href="/code/test_space/subversion/changesets/2345">revision:2345</a>'
|
958
|
+
parse("no revision tag", :vcs_url => vcs_url).should == 'no revision tag'
|
957
959
|
}.should_not raise_error
|
958
960
|
end
|
959
961
|
|
@@ -961,30 +963,30 @@ describe 'BreakoutParser' do
|
|
961
963
|
# 'true' values
|
962
964
|
[true, 1, 'x'].each do |v|
|
963
965
|
it "should NOT convert relative url to absolute when absolute_urls = #{v.inspect} AND site_url is NULL" do
|
964
|
-
parse("[[url:/rel]]", :absolute_urls => v).should ==
|
966
|
+
parse("[[url:/rel]]", :absolute_urls => v).should ==
|
965
967
|
'<a rel="nofollow" href="/rel">/rel</a>'
|
966
|
-
parse("[[url:/rel|text]]", :absolute_urls => v).should ==
|
968
|
+
parse("[[url:/rel|text]]", :absolute_urls => v).should ==
|
967
969
|
'<a rel="nofollow" href="/rel">text</a>'
|
968
970
|
end
|
969
971
|
it "should convert relative url to absolute when absolute_urls = #{v.inspect}" do
|
970
|
-
parse("[[url:/rel]]", :absolute_urls => v, :site_url => 'http://www.ru').should ==
|
972
|
+
parse("[[url:/rel]]", :absolute_urls => v, :site_url => 'http://www.ru').should ==
|
971
973
|
'<a rel="nofollow" href="http://www.ru/rel">/rel</a>'
|
972
|
-
parse("[[url:/rel|text]]", :absolute_urls => v, :site_url => 'http://www.ru').should ==
|
974
|
+
parse("[[url:/rel|text]]", :absolute_urls => v, :site_url => 'http://www.ru').should ==
|
973
975
|
'<a rel="nofollow" href="http://www.ru/rel">text</a>'
|
974
976
|
end
|
975
977
|
it "should strip redundant '/' when absolute_urls = #{v.inspect}" do
|
976
|
-
parse("[[url:/rel]]", :absolute_urls => v, :site_url => 'http://www.ru/').should ==
|
978
|
+
parse("[[url:/rel]]", :absolute_urls => v, :site_url => 'http://www.ru/').should ==
|
977
979
|
'<a rel="nofollow" href="http://www.ru/rel">/rel</a>'
|
978
|
-
parse("[[url:/rel|text]]", :absolute_urls => v, :site_url => 'http://www.ru/').should ==
|
980
|
+
parse("[[url:/rel|text]]", :absolute_urls => v, :site_url => 'http://www.ru/').should ==
|
979
981
|
'<a rel="nofollow" href="http://www.ru/rel">text</a>'
|
980
982
|
end
|
981
983
|
end
|
982
984
|
# 'false' values
|
983
985
|
[false, nil].each do |v|
|
984
986
|
it "should not convert relative url to absolute when absolute_urls = #{v.inspect}" do
|
985
|
-
parse("[[url:/rel]]", :absolute_urls => v).should ==
|
987
|
+
parse("[[url:/rel]]", :absolute_urls => v).should ==
|
986
988
|
'<a rel="nofollow" href="/rel">/rel</a>'
|
987
|
-
parse("[[url:/rel|text]]", :absolute_urls => v).should ==
|
989
|
+
parse("[[url:/rel|text]]", :absolute_urls => v).should ==
|
988
990
|
'<a rel="nofollow" href="/rel">text</a>'
|
989
991
|
end
|
990
992
|
end
|
@@ -1048,10 +1050,10 @@ describe 'BreakoutParser' do
|
|
1048
1050
|
|
1049
1051
|
def parse s, h = {}
|
1050
1052
|
h[:space_name] = "test_space" unless h.key?(:space_name)
|
1051
|
-
BreakoutParser.parse(s,
|
1052
|
-
h[:space_name],
|
1053
|
-
h[:site_url],
|
1054
|
-
h[:
|
1053
|
+
BreakoutParser.parse(s,
|
1054
|
+
h[:space_name],
|
1055
|
+
h[:site_url],
|
1056
|
+
h[:vcs_url],
|
1055
1057
|
h[:absolute_urls]
|
1056
1058
|
).strip
|
1057
1059
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: breakout_parser
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 49
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
9
|
+
- 23
|
10
|
+
version: 0.0.23
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Andrey "Zed" Zaikin
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date:
|
18
|
+
date: 2011-05-20 00:00:00 -07:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -66,8 +66,8 @@ homepage: http://assembla.com
|
|
66
66
|
licenses: []
|
67
67
|
|
68
68
|
post_install_message:
|
69
|
-
rdoc_options:
|
70
|
-
|
69
|
+
rdoc_options: []
|
70
|
+
|
71
71
|
require_paths:
|
72
72
|
- lib
|
73
73
|
required_ruby_version: !ruby/object:Gem::Requirement
|