breakout_parser 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
@@ -87,7 +87,9 @@ size_t in_buf_len = 0;
|
|
87
87
|
|
88
88
|
char *buf = NULL, *bufptr = NULL;
|
89
89
|
size_t bufsize = 0;
|
90
|
-
|
90
|
+
|
91
|
+
const char *space_name = NULL;
|
92
|
+
size_t space_name_len = 0;
|
91
93
|
|
92
94
|
#define CHECK_BUF_SIZE(len) \
|
93
95
|
if( (bufptr - buf + len + 1) >= bufsize ){ \
|
@@ -128,7 +130,7 @@ void yyerror(const char *msg)
|
|
128
130
|
|
129
131
|
|
130
132
|
/* Line 189 of yacc.c */
|
131
|
-
#line
|
133
|
+
#line 134 "parser.tab.c"
|
132
134
|
|
133
135
|
/* Enabling traces. */
|
134
136
|
#ifndef YYDEBUG
|
@@ -193,7 +195,7 @@ typedef union YYSTYPE
|
|
193
195
|
{
|
194
196
|
|
195
197
|
/* Line 214 of yacc.c */
|
196
|
-
#line
|
198
|
+
#line 61 "parser.y"
|
197
199
|
|
198
200
|
double dvalue;
|
199
201
|
int ivalue;
|
@@ -202,7 +204,7 @@ typedef union YYSTYPE
|
|
202
204
|
|
203
205
|
|
204
206
|
/* Line 214 of yacc.c */
|
205
|
-
#line
|
207
|
+
#line 208 "parser.tab.c"
|
206
208
|
} YYSTYPE;
|
207
209
|
# define YYSTYPE_IS_TRIVIAL 1
|
208
210
|
# define yystype YYSTYPE /* obsolescent; will be withdrawn */
|
@@ -214,7 +216,7 @@ typedef union YYSTYPE
|
|
214
216
|
|
215
217
|
|
216
218
|
/* Line 264 of yacc.c */
|
217
|
-
#line
|
219
|
+
#line 220 "parser.tab.c"
|
218
220
|
|
219
221
|
#ifdef short
|
220
222
|
# undef short
|
@@ -515,12 +517,12 @@ static const yytype_int8 yyrhs[] =
|
|
515
517
|
/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
|
516
518
|
static const yytype_uint8 yyrline[] =
|
517
519
|
{
|
518
|
-
0,
|
519
|
-
|
520
|
-
|
521
|
-
|
522
|
-
|
523
|
-
|
520
|
+
0, 82, 82, 83, 86, 87, 88, 89, 90, 91,
|
521
|
+
92, 93, 93, 93, 94, 94, 94, 95, 97, 98,
|
522
|
+
100, 101, 103, 104, 106, 107, 109, 110, 112, 113,
|
523
|
+
114, 115, 116, 117, 118, 119, 121, 122, 123, 124,
|
524
|
+
125, 126, 127, 129, 130, 132, 139, 140, 141, 142,
|
525
|
+
143, 145, 146, 147, 148, 149, 149
|
524
526
|
};
|
525
527
|
#endif
|
526
528
|
|
@@ -1475,273 +1477,273 @@ yyreduce:
|
|
1475
1477
|
case 6:
|
1476
1478
|
|
1477
1479
|
/* Line 1455 of yacc.c */
|
1478
|
-
#line
|
1480
|
+
#line 88 "parser.y"
|
1479
1481
|
{concat("</h1>",5);}
|
1480
1482
|
break;
|
1481
1483
|
|
1482
1484
|
case 7:
|
1483
1485
|
|
1484
1486
|
/* Line 1455 of yacc.c */
|
1485
|
-
#line
|
1487
|
+
#line 89 "parser.y"
|
1486
1488
|
{concat("</h2>",5);}
|
1487
1489
|
break;
|
1488
1490
|
|
1489
1491
|
case 8:
|
1490
1492
|
|
1491
1493
|
/* Line 1455 of yacc.c */
|
1492
|
-
#line
|
1494
|
+
#line 90 "parser.y"
|
1493
1495
|
{concat("</h3>",5);}
|
1494
1496
|
break;
|
1495
1497
|
|
1496
1498
|
case 9:
|
1497
1499
|
|
1498
1500
|
/* Line 1455 of yacc.c */
|
1499
|
-
#line
|
1501
|
+
#line 91 "parser.y"
|
1500
1502
|
{concat("</h4>",5);}
|
1501
1503
|
break;
|
1502
1504
|
|
1503
1505
|
case 10:
|
1504
1506
|
|
1505
1507
|
/* Line 1455 of yacc.c */
|
1506
|
-
#line
|
1508
|
+
#line 92 "parser.y"
|
1507
1509
|
{concat("</h5>",5);}
|
1508
1510
|
break;
|
1509
1511
|
|
1510
1512
|
case 11:
|
1511
1513
|
|
1512
1514
|
/* Line 1455 of yacc.c */
|
1513
|
-
#line
|
1515
|
+
#line 93 "parser.y"
|
1514
1516
|
{concat("<ul>",4);}
|
1515
1517
|
break;
|
1516
1518
|
|
1517
1519
|
case 12:
|
1518
1520
|
|
1519
1521
|
/* Line 1455 of yacc.c */
|
1520
|
-
#line
|
1522
|
+
#line 93 "parser.y"
|
1521
1523
|
{concat("</ul>",5);}
|
1522
1524
|
break;
|
1523
1525
|
|
1524
1526
|
case 14:
|
1525
1527
|
|
1526
1528
|
/* Line 1455 of yacc.c */
|
1527
|
-
#line
|
1529
|
+
#line 94 "parser.y"
|
1528
1530
|
{concat("<ol>",4);}
|
1529
1531
|
break;
|
1530
1532
|
|
1531
1533
|
case 15:
|
1532
1534
|
|
1533
1535
|
/* Line 1455 of yacc.c */
|
1534
|
-
#line
|
1536
|
+
#line 94 "parser.y"
|
1535
1537
|
{concat("</ol>",5);}
|
1536
1538
|
break;
|
1537
1539
|
|
1538
1540
|
case 18:
|
1539
1541
|
|
1540
1542
|
/* Line 1455 of yacc.c */
|
1541
|
-
#line
|
1543
|
+
#line 97 "parser.y"
|
1542
1544
|
{concat("</li>",5);}
|
1543
1545
|
break;
|
1544
1546
|
|
1545
1547
|
case 19:
|
1546
1548
|
|
1547
1549
|
/* Line 1455 of yacc.c */
|
1548
|
-
#line
|
1550
|
+
#line 98 "parser.y"
|
1549
1551
|
{concat("</li>",5);}
|
1550
1552
|
break;
|
1551
1553
|
|
1552
1554
|
case 22:
|
1553
1555
|
|
1554
1556
|
/* Line 1455 of yacc.c */
|
1555
|
-
#line
|
1557
|
+
#line 103 "parser.y"
|
1556
1558
|
{concat("</li>",5);}
|
1557
1559
|
break;
|
1558
1560
|
|
1559
1561
|
case 23:
|
1560
1562
|
|
1561
1563
|
/* Line 1455 of yacc.c */
|
1562
|
-
#line
|
1564
|
+
#line 104 "parser.y"
|
1563
1565
|
{concat("</li>",5);}
|
1564
1566
|
break;
|
1565
1567
|
|
1566
1568
|
case 30:
|
1567
1569
|
|
1568
1570
|
/* Line 1455 of yacc.c */
|
1569
|
-
#line
|
1571
|
+
#line 114 "parser.y"
|
1570
1572
|
{concat2((yyvsp[(1) - (1)].svalue));}
|
1571
1573
|
break;
|
1572
1574
|
|
1573
1575
|
case 31:
|
1574
1576
|
|
1575
1577
|
/* Line 1455 of yacc.c */
|
1576
|
-
#line
|
1578
|
+
#line 115 "parser.y"
|
1577
1579
|
{process_url((yyvsp[(1) - (1)].svalue));}
|
1578
1580
|
break;
|
1579
1581
|
|
1580
1582
|
case 32:
|
1581
1583
|
|
1582
1584
|
/* Line 1455 of yacc.c */
|
1583
|
-
#line
|
1585
|
+
#line 116 "parser.y"
|
1584
1586
|
{(yyvsp[(1) - (1)].ivalue) ? concat(" <strong>",9) : concat("<strong>",8);}
|
1585
1587
|
break;
|
1586
1588
|
|
1587
1589
|
case 33:
|
1588
1590
|
|
1589
1591
|
/* Line 1455 of yacc.c */
|
1590
|
-
#line
|
1592
|
+
#line 117 "parser.y"
|
1591
1593
|
{concat("</strong>",9);}
|
1592
1594
|
break;
|
1593
1595
|
|
1594
1596
|
case 34:
|
1595
1597
|
|
1596
1598
|
/* Line 1455 of yacc.c */
|
1597
|
-
#line
|
1599
|
+
#line 118 "parser.y"
|
1598
1600
|
{(yyvsp[(1) - (1)].ivalue) ? concat(" <em>",5) : concat("<em>",4);}
|
1599
1601
|
break;
|
1600
1602
|
|
1601
1603
|
case 35:
|
1602
1604
|
|
1603
1605
|
/* Line 1455 of yacc.c */
|
1604
|
-
#line
|
1606
|
+
#line 119 "parser.y"
|
1605
1607
|
{concat("</em>",5);}
|
1606
1608
|
break;
|
1607
1609
|
|
1608
1610
|
case 36:
|
1609
1611
|
|
1610
1612
|
/* Line 1455 of yacc.c */
|
1611
|
-
#line
|
1613
|
+
#line 121 "parser.y"
|
1612
1614
|
{process_ticket_link((yyvsp[(1) - (1)].svalue));}
|
1613
1615
|
break;
|
1614
1616
|
|
1615
1617
|
case 37:
|
1616
1618
|
|
1617
1619
|
/* Line 1455 of yacc.c */
|
1618
|
-
#line
|
1620
|
+
#line 122 "parser.y"
|
1619
1621
|
{process_svn_link((yyvsp[(1) - (1)].svalue));}
|
1620
1622
|
break;
|
1621
1623
|
|
1622
1624
|
case 38:
|
1623
1625
|
|
1624
1626
|
/* Line 1455 of yacc.c */
|
1625
|
-
#line
|
1627
|
+
#line 123 "parser.y"
|
1626
1628
|
{process_git_link((yyvsp[(1) - (1)].svalue));}
|
1627
1629
|
break;
|
1628
1630
|
|
1629
1631
|
case 39:
|
1630
1632
|
|
1631
1633
|
/* Line 1455 of yacc.c */
|
1632
|
-
#line
|
1634
|
+
#line 124 "parser.y"
|
1633
1635
|
{process_url_link((yyvsp[(1) - (1)].svalue),NULL);}
|
1634
1636
|
break;
|
1635
1637
|
|
1636
1638
|
case 40:
|
1637
1639
|
|
1638
1640
|
/* Line 1455 of yacc.c */
|
1639
|
-
#line
|
1641
|
+
#line 125 "parser.y"
|
1640
1642
|
{process_url_link((yyvsp[(1) - (1)].svalue),"http://");}
|
1641
1643
|
break;
|
1642
1644
|
|
1643
1645
|
case 41:
|
1644
1646
|
|
1645
1647
|
/* Line 1455 of yacc.c */
|
1646
|
-
#line
|
1648
|
+
#line 126 "parser.y"
|
1647
1649
|
{process_wiki_link((yyvsp[(1) - (1)].svalue));}
|
1648
1650
|
break;
|
1649
1651
|
|
1650
1652
|
case 42:
|
1651
1653
|
|
1652
1654
|
/* Line 1455 of yacc.c */
|
1653
|
-
#line
|
1655
|
+
#line 127 "parser.y"
|
1654
1656
|
{process_anchor_link((yyvsp[(1) - (1)].svalue));}
|
1655
1657
|
break;
|
1656
1658
|
|
1657
1659
|
case 45:
|
1658
1660
|
|
1659
1661
|
/* Line 1455 of yacc.c */
|
1660
|
-
#line
|
1662
|
+
#line 132 "parser.y"
|
1661
1663
|
{concat_escaped_char((yyvsp[(1) - (1)].ivalue));}
|
1662
1664
|
break;
|
1663
1665
|
|
1664
1666
|
case 46:
|
1665
1667
|
|
1666
1668
|
/* Line 1455 of yacc.c */
|
1667
|
-
#line
|
1669
|
+
#line 139 "parser.y"
|
1668
1670
|
{concat("<h1 id=\"",8); process_header((yyvsp[(1) - (1)].svalue));}
|
1669
1671
|
break;
|
1670
1672
|
|
1671
1673
|
case 47:
|
1672
1674
|
|
1673
1675
|
/* Line 1455 of yacc.c */
|
1674
|
-
#line
|
1676
|
+
#line 140 "parser.y"
|
1675
1677
|
{concat("<h2 id=\"",8); process_header((yyvsp[(1) - (1)].svalue));}
|
1676
1678
|
break;
|
1677
1679
|
|
1678
1680
|
case 48:
|
1679
1681
|
|
1680
1682
|
/* Line 1455 of yacc.c */
|
1681
|
-
#line
|
1683
|
+
#line 141 "parser.y"
|
1682
1684
|
{concat("<h3 id=\"",8); process_header((yyvsp[(1) - (1)].svalue));}
|
1683
1685
|
break;
|
1684
1686
|
|
1685
1687
|
case 49:
|
1686
1688
|
|
1687
1689
|
/* Line 1455 of yacc.c */
|
1688
|
-
#line
|
1690
|
+
#line 142 "parser.y"
|
1689
1691
|
{concat("<h4 id=\"",8); process_header((yyvsp[(1) - (1)].svalue));}
|
1690
1692
|
break;
|
1691
1693
|
|
1692
1694
|
case 50:
|
1693
1695
|
|
1694
1696
|
/* Line 1455 of yacc.c */
|
1695
|
-
#line
|
1697
|
+
#line 143 "parser.y"
|
1696
1698
|
{concat("<h5 id=\"",8); process_header((yyvsp[(1) - (1)].svalue));}
|
1697
1699
|
break;
|
1698
1700
|
|
1699
1701
|
case 51:
|
1700
1702
|
|
1701
1703
|
/* Line 1455 of yacc.c */
|
1702
|
-
#line
|
1704
|
+
#line 145 "parser.y"
|
1703
1705
|
{concat("<li>",4);}
|
1704
1706
|
break;
|
1705
1707
|
|
1706
1708
|
case 52:
|
1707
1709
|
|
1708
1710
|
/* Line 1455 of yacc.c */
|
1709
|
-
#line
|
1711
|
+
#line 146 "parser.y"
|
1710
1712
|
{concat("<li>",4);}
|
1711
1713
|
break;
|
1712
1714
|
|
1713
1715
|
case 53:
|
1714
1716
|
|
1715
1717
|
/* Line 1455 of yacc.c */
|
1716
|
-
#line
|
1718
|
+
#line 147 "parser.y"
|
1717
1719
|
{concat("<br />",6);}
|
1718
1720
|
break;
|
1719
1721
|
|
1720
1722
|
case 54:
|
1721
1723
|
|
1722
1724
|
/* Line 1455 of yacc.c */
|
1723
|
-
#line
|
1725
|
+
#line 148 "parser.y"
|
1724
1726
|
{concat("<br /><br />",12);}
|
1725
1727
|
break;
|
1726
1728
|
|
1727
1729
|
case 55:
|
1728
1730
|
|
1729
1731
|
/* Line 1455 of yacc.c */
|
1730
|
-
#line
|
1732
|
+
#line 149 "parser.y"
|
1731
1733
|
{concat("<pre><code>",11);}
|
1732
1734
|
break;
|
1733
1735
|
|
1734
1736
|
case 56:
|
1735
1737
|
|
1736
1738
|
/* Line 1455 of yacc.c */
|
1737
|
-
#line
|
1739
|
+
#line 149 "parser.y"
|
1738
1740
|
{concat("</code></pre>",13);}
|
1739
1741
|
break;
|
1740
1742
|
|
1741
1743
|
|
1742
1744
|
|
1743
1745
|
/* Line 1455 of yacc.c */
|
1744
|
-
#line
|
1746
|
+
#line 1747 "parser.tab.c"
|
1745
1747
|
default: break;
|
1746
1748
|
}
|
1747
1749
|
YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
|
@@ -1953,7 +1955,7 @@ yyreturn:
|
|
1953
1955
|
|
1954
1956
|
|
1955
1957
|
/* Line 1675 of yacc.c */
|
1956
|
-
#line
|
1958
|
+
#line 153 "parser.y"
|
1957
1959
|
|
1958
1960
|
|
1959
1961
|
concat_hex_char(char c){
|
@@ -2062,7 +2064,7 @@ process_url_link(const char*target,const char* proto){
|
|
2062
2064
|
process_svn_link(const char*target){
|
2063
2065
|
const char *c;
|
2064
2066
|
concat("<a href=\"http://code.assembla.com/",34);
|
2065
|
-
|
2067
|
+
concat(space_name,space_name_len);
|
2066
2068
|
concat("/svn/changesets/",16);
|
2067
2069
|
for(c=target; *c && *c!=']' && *c!='|'; c++) concat_raw_char(*c);
|
2068
2070
|
process_link_tail(target,NULL,"revision:");
|
@@ -2071,7 +2073,7 @@ process_svn_link(const char*target){
|
|
2071
2073
|
process_git_link(const char*target){
|
2072
2074
|
const char *c;
|
2073
2075
|
concat("<a href=\"http://code.assembla.com/",34);
|
2074
|
-
|
2076
|
+
concat(space_name,space_name_len);
|
2075
2077
|
concat("/git/changesets/",16);
|
2076
2078
|
for(c=target; *c && *c!=']' && *c!='|'; c++) concat_raw_char(*c);
|
2077
2079
|
process_link_tail(target,NULL,"revision:");
|
@@ -2082,7 +2084,7 @@ process_wiki_link(const char*target){
|
|
2082
2084
|
concat("<a class=\"wiki_link\" title=\"",28);
|
2083
2085
|
for(c=target; *c && *c!=']' && *c!='|'; c++) concat_raw_char(*c);
|
2084
2086
|
concat("\" href=\"/wiki/show/",19);
|
2085
|
-
|
2087
|
+
concat(space_name,space_name_len);
|
2086
2088
|
concat_raw_char('/');
|
2087
2089
|
for(c=target; *c && *c!=']' && *c!='|'; c++) concat_raw_char(*c);
|
2088
2090
|
process_link_tail(target,NULL,NULL);
|
@@ -2092,7 +2094,7 @@ process_ticket_link(const char*ticket_id){
|
|
2092
2094
|
const char *c;
|
2093
2095
|
while(*ticket_id && (*ticket_id < '0' || *ticket_id > '9') ) ticket_id++;
|
2094
2096
|
concat("<a href=\"/spaces/",17);
|
2095
|
-
|
2097
|
+
concat(space_name,space_name_len);
|
2096
2098
|
concat("/tickets/",9);
|
2097
2099
|
for(c=ticket_id; *c && *c>='0' && *c<='9'; c++) concat_raw_char(*c);
|
2098
2100
|
process_link_tail(ticket_id,NULL,"#");
|
@@ -16,7 +16,9 @@ size_t in_buf_len = 0;
|
|
16
16
|
|
17
17
|
char *buf = NULL, *bufptr = NULL;
|
18
18
|
size_t bufsize = 0;
|
19
|
-
|
19
|
+
|
20
|
+
const char *space_name = NULL;
|
21
|
+
size_t space_name_len = 0;
|
20
22
|
|
21
23
|
#define CHECK_BUF_SIZE(len) \
|
22
24
|
if( (bufptr - buf + len + 1) >= bufsize ){ \
|
@@ -256,7 +258,7 @@ process_url_link(const char*target,const char* proto){
|
|
256
258
|
process_svn_link(const char*target){
|
257
259
|
const char *c;
|
258
260
|
concat("<a href=\"http://code.assembla.com/",34);
|
259
|
-
|
261
|
+
concat(space_name,space_name_len);
|
260
262
|
concat("/svn/changesets/",16);
|
261
263
|
for(c=target; *c && *c!=']' && *c!='|'; c++) concat_raw_char(*c);
|
262
264
|
process_link_tail(target,NULL,"revision:");
|
@@ -265,7 +267,7 @@ process_svn_link(const char*target){
|
|
265
267
|
process_git_link(const char*target){
|
266
268
|
const char *c;
|
267
269
|
concat("<a href=\"http://code.assembla.com/",34);
|
268
|
-
|
270
|
+
concat(space_name,space_name_len);
|
269
271
|
concat("/git/changesets/",16);
|
270
272
|
for(c=target; *c && *c!=']' && *c!='|'; c++) concat_raw_char(*c);
|
271
273
|
process_link_tail(target,NULL,"revision:");
|
@@ -276,7 +278,7 @@ process_wiki_link(const char*target){
|
|
276
278
|
concat("<a class=\"wiki_link\" title=\"",28);
|
277
279
|
for(c=target; *c && *c!=']' && *c!='|'; c++) concat_raw_char(*c);
|
278
280
|
concat("\" href=\"/wiki/show/",19);
|
279
|
-
|
281
|
+
concat(space_name,space_name_len);
|
280
282
|
concat_raw_char('/');
|
281
283
|
for(c=target; *c && *c!=']' && *c!='|'; c++) concat_raw_char(*c);
|
282
284
|
process_link_tail(target,NULL,NULL);
|
@@ -286,7 +288,7 @@ process_ticket_link(const char*ticket_id){
|
|
286
288
|
const char *c;
|
287
289
|
while(*ticket_id && (*ticket_id < '0' || *ticket_id > '9') ) ticket_id++;
|
288
290
|
concat("<a href=\"/spaces/",17);
|
289
|
-
|
291
|
+
concat(space_name,space_name_len);
|
290
292
|
concat("/tickets/",9);
|
291
293
|
for(c=ticket_id; *c && *c>='0' && *c<='9'; c++) concat_raw_char(*c);
|
292
294
|
process_link_tail(ticket_id,NULL,"#");
|
@@ -3,20 +3,21 @@
|
|
3
3
|
#include "ruby.h"
|
4
4
|
|
5
5
|
void Init_breakout_parser();
|
6
|
-
VALUE method_parse(VALUE, VALUE);
|
6
|
+
VALUE method_parse(VALUE, VALUE, VALUE);
|
7
7
|
|
8
8
|
VALUE breakout_parser = Qnil;
|
9
9
|
|
10
10
|
void Init_breakout_parser() {
|
11
11
|
breakout_parser = rb_define_class("BreakoutParser",rb_cObject);
|
12
|
-
rb_define_singleton_method(breakout_parser, "parse", method_parse,
|
12
|
+
rb_define_singleton_method(breakout_parser, "parse", method_parse, 2);
|
13
13
|
}
|
14
14
|
|
15
15
|
extern char *buf, *bufptr;
|
16
16
|
extern char *in_buf, *in_pos;
|
17
|
-
extern
|
17
|
+
extern const char *space_name;
|
18
|
+
extern size_t in_buf_len, bufsize, space_name_len;
|
18
19
|
|
19
|
-
VALUE method_parse(VALUE self, VALUE text) {
|
20
|
+
VALUE method_parse(VALUE self, VALUE text, VALUE r_space_name) {
|
20
21
|
VALUE s;
|
21
22
|
char *p = RSTRING(text)->ptr;
|
22
23
|
in_buf_len = RSTRING(text)->len;
|
@@ -27,6 +28,9 @@ VALUE method_parse(VALUE self, VALUE text) {
|
|
27
28
|
in_buf = p;
|
28
29
|
in_pos = in_buf;
|
29
30
|
|
31
|
+
space_name = StringValueCStr(r_space_name);
|
32
|
+
space_name_len = space_name ? strlen(space_name) : 0;
|
33
|
+
|
30
34
|
bufsize = 1 + in_buf_len + in_buf_len/3; // reserve 30% of in_buf size
|
31
35
|
if(bufsize<0x100) bufsize = 0x100;
|
32
36
|
|
data/spec/parser_spec.rb
CHANGED