breakout_parser 0.0.17 → 0.0.18

Sign up to get free protection for your applications and to get access to all the features.
data/ChangeLog CHANGED
@@ -1,3 +1,9 @@
1
+ [ 0.0.18 ]
2
+
3
+ * added README
4
+ * added option to make relative urls absolute
5
+ (https://www.assembla.com/spaces/breakout/tickets/6513)
6
+
1
7
  [ 0.0.17 ]
2
8
 
3
9
  * fix not-closing bold/italics tags when opened before <pre> and/or <code>
data/README ADDED
@@ -0,0 +1,28 @@
1
+ Breakout Parser
2
+ ===============
3
+
4
+ - simplified Textile parser with some Assembla-specific features
5
+ - converts Textile into HTML
6
+
7
+
8
+ Usage
9
+ ===============
10
+
11
+ require 'breakout_parser'
12
+ puts BreakoutParser.parse("h1. xxx", "my_space")
13
+ # prints: <h1 id="h-xxx">xxx</h1>
14
+
15
+ puts BreakoutParser.parse_links_only("h1. http://xxx", "my_space")
16
+ # prints: h1. <a rel="nofollow" href="http://xxx">http://xxx</a>
17
+
18
+
19
+
20
+ Arguments
21
+ ===============
22
+
23
+ BreakoutParser.parse(
24
+ data, # data to parse
25
+ space_name, # space name - for links parsing
26
+ site_url, # [optional] global site url
27
+ git_url # [optional] custom GIT url - f.ex. for github-hosted repos
28
+ )
@@ -1,10 +1,9 @@
1
-
2
- /* A Bison parser, made by GNU Bison 2.4.1. */
1
+ /* A Bison parser, made by GNU Bison 2.4.2. */
3
2
 
4
3
  /* Skeleton implementation for Bison's Yacc-like parsers in C
5
4
 
6
- Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
7
- Free Software Foundation, Inc.
5
+ Copyright (C) 1984, 1989-1990, 2000-2006, 2009-2010 Free Software
6
+ Foundation, Inc.
8
7
 
9
8
  This program is free software: you can redistribute it and/or modify
10
9
  it under the terms of the GNU General Public License as published by
@@ -46,7 +45,7 @@
46
45
  #define YYBISON 1
47
46
 
48
47
  /* Bison version. */
49
- #define YYBISON_VERSION "2.4.1"
48
+ #define YYBISON_VERSION "2.4.2"
50
49
 
51
50
  /* Skeleton name. */
52
51
  #define YYSKELETON_NAME "yacc.c"
@@ -68,7 +67,7 @@
68
67
  /* Copy the first part of user declarations. */
69
68
 
70
69
  /* Line 189 of yacc.c */
71
- #line 1 "parser.y"
70
+ #line 2 "parser.y"
72
71
 
73
72
  #include <stdio.h>
74
73
  #include <stdlib.h>
@@ -97,6 +96,7 @@ size_t site_url_len = 0;
97
96
  extern VALUE git_url;
98
97
 
99
98
  int list_level = 1;
99
+ int absolute_urls = 0;
100
100
 
101
101
  #define CHECK_BUF_SIZE(len) \
102
102
  if( (bufptr - buf + len + 1) >= bufsize ){ \
@@ -217,7 +217,7 @@ typedef union YYSTYPE
217
217
  {
218
218
 
219
219
  /* Line 214 of yacc.c */
220
- #line 68 "parser.y"
220
+ #line 70 "parser.y"
221
221
 
222
222
  double dvalue;
223
223
  int ivalue;
@@ -288,7 +288,7 @@ typedef short int yytype_int16;
288
288
  #define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
289
289
 
290
290
  #ifndef YY_
291
- # if YYENABLE_NLS
291
+ # if defined YYENABLE_NLS && YYENABLE_NLS
292
292
  # if ENABLE_NLS
293
293
  # include <libintl.h> /* INFRINGES ON USER NAME SPACE */
294
294
  # define YY_(msgid) dgettext ("bison-runtime", msgid)
@@ -546,14 +546,14 @@ static const yytype_int8 yyrhs[] =
546
546
  /* YYRLINE[YYN] -- source line where rule number YYN was defined. */
547
547
  static const yytype_uint8 yyrline[] =
548
548
  {
549
- 0, 96, 96, 97, 100, 101, 102, 103, 104, 105,
550
- 106, 107, 110, 107, 114, 117, 114, 121, 123, 124,
551
- 126, 127, 129, 130, 132, 133, 135, 136, 138, 139,
552
- 140, 141, 142, 143, 144, 145, 146, 147, 148, 149,
553
- 150, 151, 153, 154, 155, 156, 157, 158, 159, 160,
554
- 161, 162, 163, 165, 166, 168, 175, 176, 177, 178,
555
- 179, 181, 182, 183, 186, 186, 187, 188, 188, 189,
556
- 189
549
+ 0, 98, 98, 99, 102, 103, 104, 105, 106, 107,
550
+ 108, 109, 112, 109, 116, 119, 116, 123, 125, 126,
551
+ 128, 129, 131, 132, 134, 135, 137, 138, 140, 141,
552
+ 142, 143, 144, 145, 146, 147, 148, 149, 150, 151,
553
+ 152, 153, 155, 156, 157, 158, 159, 160, 161, 162,
554
+ 163, 164, 165, 167, 168, 170, 177, 178, 179, 180,
555
+ 181, 183, 184, 185, 188, 188, 189, 190, 190, 191,
556
+ 191
557
557
  };
558
558
  #endif
559
559
 
@@ -733,9 +733,18 @@ static const yytype_uint8 yystos[] =
733
733
 
734
734
  /* Like YYERROR except do call yyerror. This remains here temporarily
735
735
  to ease the transition to the new meaning of YYERROR, for GCC.
736
- Once GCC version 2 has supplanted version 1, this can go. */
736
+ Once GCC version 2 has supplanted version 1, this can go. However,
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
740
 
738
741
  #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
739
748
 
740
749
  #define YYRECOVERING() (!!yyerrstatus)
741
750
 
@@ -792,7 +801,7 @@ while (YYID (0))
792
801
  we won't break user code: when these are the locations we know. */
793
802
 
794
803
  #ifndef YY_LOCATION_PRINT
795
- # if YYLTYPE_IS_TRIVIAL
804
+ # if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL
796
805
  # define YY_LOCATION_PRINT(File, Loc) \
797
806
  fprintf (File, "%d.%d-%d.%d", \
798
807
  (Loc).first_line, (Loc).first_column, \
@@ -1531,43 +1540,43 @@ yyreduce:
1531
1540
  {
1532
1541
  case 6:
1533
1542
 
1534
- /* Line 1455 of yacc.c */
1535
- #line 102 "parser.y"
1543
+ /* Line 1464 of yacc.c */
1544
+ #line 104 "parser.y"
1536
1545
  {concat("</h1>",5);}
1537
1546
  break;
1538
1547
 
1539
1548
  case 7:
1540
1549
 
1541
- /* Line 1455 of yacc.c */
1542
- #line 103 "parser.y"
1550
+ /* Line 1464 of yacc.c */
1551
+ #line 105 "parser.y"
1543
1552
  {concat("</h2>",5);}
1544
1553
  break;
1545
1554
 
1546
1555
  case 8:
1547
1556
 
1548
- /* Line 1455 of yacc.c */
1549
- #line 104 "parser.y"
1557
+ /* Line 1464 of yacc.c */
1558
+ #line 106 "parser.y"
1550
1559
  {concat("</h3>",5);}
1551
1560
  break;
1552
1561
 
1553
1562
  case 9:
1554
1563
 
1555
- /* Line 1455 of yacc.c */
1556
- #line 105 "parser.y"
1564
+ /* Line 1464 of yacc.c */
1565
+ #line 107 "parser.y"
1557
1566
  {concat("</h4>",5);}
1558
1567
  break;
1559
1568
 
1560
1569
  case 10:
1561
1570
 
1562
- /* Line 1455 of yacc.c */
1563
- #line 106 "parser.y"
1571
+ /* Line 1464 of yacc.c */
1572
+ #line 108 "parser.y"
1564
1573
  {concat("</h5>",5);}
1565
1574
  break;
1566
1575
 
1567
1576
  case 11:
1568
1577
 
1569
- /* Line 1455 of yacc.c */
1570
- #line 107 "parser.y"
1578
+ /* Line 1464 of yacc.c */
1579
+ #line 109 "parser.y"
1571
1580
  {
1572
1581
  list_level=1;
1573
1582
  concat("<ul>",4)
@@ -1576,8 +1585,8 @@ yyreduce:
1576
1585
 
1577
1586
  case 12:
1578
1587
 
1579
- /* Line 1455 of yacc.c */
1580
- #line 110 "parser.y"
1588
+ /* Line 1464 of yacc.c */
1589
+ #line 112 "parser.y"
1581
1590
  {
1582
1591
  concat("</ul>",5);
1583
1592
  for(; list_level>1 && list_level<4; list_level--) concat("</li></ul>",10);
@@ -1586,8 +1595,8 @@ yyreduce:
1586
1595
 
1587
1596
  case 14:
1588
1597
 
1589
- /* Line 1455 of yacc.c */
1590
- #line 114 "parser.y"
1598
+ /* Line 1464 of yacc.c */
1599
+ #line 116 "parser.y"
1591
1600
  {
1592
1601
  list_level=1;
1593
1602
  concat("<ol>",4)
@@ -1596,8 +1605,8 @@ yyreduce:
1596
1605
 
1597
1606
  case 15:
1598
1607
 
1599
- /* Line 1455 of yacc.c */
1600
- #line 117 "parser.y"
1608
+ /* Line 1464 of yacc.c */
1609
+ #line 119 "parser.y"
1601
1610
  {
1602
1611
  concat("</ol>",5);
1603
1612
  for(; list_level>1 && list_level<4; list_level--) concat("</li></ol>",10);
@@ -1606,302 +1615,302 @@ yyreduce:
1606
1615
 
1607
1616
  case 18:
1608
1617
 
1609
- /* Line 1455 of yacc.c */
1610
- #line 123 "parser.y"
1618
+ /* Line 1464 of yacc.c */
1619
+ #line 125 "parser.y"
1611
1620
  {concat("</li>",5);}
1612
1621
  break;
1613
1622
 
1614
1623
  case 19:
1615
1624
 
1616
- /* Line 1455 of yacc.c */
1617
- #line 124 "parser.y"
1625
+ /* Line 1464 of yacc.c */
1626
+ #line 126 "parser.y"
1618
1627
  {concat("</li>",5);}
1619
1628
  break;
1620
1629
 
1621
1630
  case 22:
1622
1631
 
1623
- /* Line 1455 of yacc.c */
1624
- #line 129 "parser.y"
1632
+ /* Line 1464 of yacc.c */
1633
+ #line 131 "parser.y"
1625
1634
  {concat("</li>",5);}
1626
1635
  break;
1627
1636
 
1628
1637
  case 23:
1629
1638
 
1630
- /* Line 1455 of yacc.c */
1631
- #line 130 "parser.y"
1639
+ /* Line 1464 of yacc.c */
1640
+ #line 132 "parser.y"
1632
1641
  {concat("</li>",5);}
1633
1642
  break;
1634
1643
 
1635
1644
  case 30:
1636
1645
 
1637
- /* Line 1455 of yacc.c */
1638
- #line 140 "parser.y"
1646
+ /* Line 1464 of yacc.c */
1647
+ #line 142 "parser.y"
1639
1648
  {concat2((yyvsp[(1) - (1)].svalue));}
1640
1649
  break;
1641
1650
 
1642
1651
  case 31:
1643
1652
 
1644
- /* Line 1455 of yacc.c */
1645
- #line 141 "parser.y"
1653
+ /* Line 1464 of yacc.c */
1654
+ #line 143 "parser.y"
1646
1655
  {process_url((yyvsp[(1) - (1)].svalue));}
1647
1656
  break;
1648
1657
 
1649
1658
  case 32:
1650
1659
 
1651
- /* Line 1455 of yacc.c */
1652
- #line 142 "parser.y"
1660
+ /* Line 1464 of yacc.c */
1661
+ #line 144 "parser.y"
1653
1662
  {process_email((yyvsp[(1) - (1)].svalue));}
1654
1663
  break;
1655
1664
 
1656
1665
  case 33:
1657
1666
 
1658
- /* Line 1455 of yacc.c */
1659
- #line 143 "parser.y"
1667
+ /* Line 1464 of yacc.c */
1668
+ #line 145 "parser.y"
1660
1669
  {(yyvsp[(1) - (1)].ivalue) ? concat(" <strong>",9) : concat("<strong>",8);}
1661
1670
  break;
1662
1671
 
1663
1672
  case 34:
1664
1673
 
1665
- /* Line 1455 of yacc.c */
1666
- #line 144 "parser.y"
1674
+ /* Line 1464 of yacc.c */
1675
+ #line 146 "parser.y"
1667
1676
  {concat("</strong>",9);}
1668
1677
  break;
1669
1678
 
1670
1679
  case 35:
1671
1680
 
1672
- /* Line 1455 of yacc.c */
1673
- #line 145 "parser.y"
1681
+ /* Line 1464 of yacc.c */
1682
+ #line 147 "parser.y"
1674
1683
  {(yyvsp[(1) - (1)].ivalue) ? concat(" <em>",5) : concat("<em>",4);}
1675
1684
  break;
1676
1685
 
1677
1686
  case 36:
1678
1687
 
1679
- /* Line 1455 of yacc.c */
1680
- #line 146 "parser.y"
1688
+ /* Line 1464 of yacc.c */
1689
+ #line 148 "parser.y"
1681
1690
  {concat("</em>",5);}
1682
1691
  break;
1683
1692
 
1684
1693
  case 37:
1685
1694
 
1686
- /* Line 1455 of yacc.c */
1687
- #line 147 "parser.y"
1695
+ /* Line 1464 of yacc.c */
1696
+ #line 149 "parser.y"
1688
1697
  {(yyvsp[(1) - (1)].ivalue) ? concat(" <strong><em>",13) : concat("<strong><em>",12);}
1689
1698
  break;
1690
1699
 
1691
1700
  case 38:
1692
1701
 
1693
- /* Line 1455 of yacc.c */
1694
- #line 148 "parser.y"
1702
+ /* Line 1464 of yacc.c */
1703
+ #line 150 "parser.y"
1695
1704
  {(yyvsp[(1) - (1)].ivalue) ? concat(" <em><strong>",13) : concat("<em><strong>",12);}
1696
1705
  break;
1697
1706
 
1698
1707
  case 39:
1699
1708
 
1700
- /* Line 1455 of yacc.c */
1701
- #line 149 "parser.y"
1709
+ /* Line 1464 of yacc.c */
1710
+ #line 151 "parser.y"
1702
1711
  {process_inline_code((yyvsp[(1) - (1)].svalue));}
1703
1712
  break;
1704
1713
 
1705
1714
  case 40:
1706
1715
 
1707
- /* Line 1455 of yacc.c */
1708
- #line 150 "parser.y"
1716
+ /* Line 1464 of yacc.c */
1717
+ #line 152 "parser.y"
1709
1718
  {revert_bold();}
1710
1719
  break;
1711
1720
 
1712
1721
  case 41:
1713
1722
 
1714
- /* Line 1455 of yacc.c */
1715
- #line 151 "parser.y"
1723
+ /* Line 1464 of yacc.c */
1724
+ #line 153 "parser.y"
1716
1725
  {revert_italic();}
1717
1726
  break;
1718
1727
 
1719
1728
  case 42:
1720
1729
 
1721
- /* Line 1455 of yacc.c */
1722
- #line 153 "parser.y"
1730
+ /* Line 1464 of yacc.c */
1731
+ #line 155 "parser.y"
1723
1732
  {process_ticket_link((yyvsp[(1) - (1)].svalue));}
1724
1733
  break;
1725
1734
 
1726
1735
  case 43:
1727
1736
 
1728
- /* Line 1455 of yacc.c */
1729
- #line 154 "parser.y"
1737
+ /* Line 1464 of yacc.c */
1738
+ #line 156 "parser.y"
1730
1739
  {process_svn_link((yyvsp[(1) - (1)].svalue),0);}
1731
1740
  break;
1732
1741
 
1733
1742
  case 44:
1734
1743
 
1735
- /* Line 1455 of yacc.c */
1736
- #line 155 "parser.y"
1744
+ /* Line 1464 of yacc.c */
1745
+ #line 157 "parser.y"
1737
1746
  {process_git_link((yyvsp[(1) - (1)].svalue),0);}
1738
1747
  break;
1739
1748
 
1740
1749
  case 45:
1741
1750
 
1742
- /* Line 1455 of yacc.c */
1743
- #line 156 "parser.y"
1751
+ /* Line 1464 of yacc.c */
1752
+ #line 158 "parser.y"
1744
1753
  {process_svn_link((yyvsp[(1) - (1)].svalue),1);}
1745
1754
  break;
1746
1755
 
1747
1756
  case 46:
1748
1757
 
1749
- /* Line 1455 of yacc.c */
1750
- #line 157 "parser.y"
1758
+ /* Line 1464 of yacc.c */
1759
+ #line 159 "parser.y"
1751
1760
  {process_git_link((yyvsp[(1) - (1)].svalue),1);}
1752
1761
  break;
1753
1762
 
1754
1763
  case 47:
1755
1764
 
1756
- /* Line 1455 of yacc.c */
1757
- #line 158 "parser.y"
1765
+ /* Line 1464 of yacc.c */
1766
+ #line 160 "parser.y"
1758
1767
  {process_url_link((yyvsp[(1) - (1)].svalue),NULL);}
1759
1768
  break;
1760
1769
 
1761
1770
  case 48:
1762
1771
 
1763
- /* Line 1455 of yacc.c */
1764
- #line 159 "parser.y"
1772
+ /* Line 1464 of yacc.c */
1773
+ #line 161 "parser.y"
1765
1774
  {process_url_link((yyvsp[(1) - (1)].svalue),"http://");}
1766
1775
  break;
1767
1776
 
1768
1777
  case 49:
1769
1778
 
1770
- /* Line 1455 of yacc.c */
1771
- #line 160 "parser.y"
1779
+ /* Line 1464 of yacc.c */
1780
+ #line 162 "parser.y"
1772
1781
  {process_wiki_link((yyvsp[(1) - (1)].svalue));}
1773
1782
  break;
1774
1783
 
1775
1784
  case 50:
1776
1785
 
1777
- /* Line 1455 of yacc.c */
1778
- #line 161 "parser.y"
1786
+ /* Line 1464 of yacc.c */
1787
+ #line 163 "parser.y"
1779
1788
  {process_anchor_link((yyvsp[(1) - (1)].svalue));}
1780
1789
  break;
1781
1790
 
1782
1791
  case 51:
1783
1792
 
1784
- /* Line 1455 of yacc.c */
1785
- #line 162 "parser.y"
1793
+ /* Line 1464 of yacc.c */
1794
+ #line 164 "parser.y"
1786
1795
  {process_file_link((yyvsp[(1) - (1)].svalue));}
1787
1796
  break;
1788
1797
 
1789
1798
  case 52:
1790
1799
 
1791
- /* Line 1455 of yacc.c */
1792
- #line 163 "parser.y"
1800
+ /* Line 1464 of yacc.c */
1801
+ #line 165 "parser.y"
1793
1802
  {process_image_link((yyvsp[(1) - (1)].svalue));}
1794
1803
  break;
1795
1804
 
1796
1805
  case 55:
1797
1806
 
1798
- /* Line 1455 of yacc.c */
1799
- #line 168 "parser.y"
1807
+ /* Line 1464 of yacc.c */
1808
+ #line 170 "parser.y"
1800
1809
  {concat_escaped_char((yyvsp[(1) - (1)].ivalue));}
1801
1810
  break;
1802
1811
 
1803
1812
  case 56:
1804
1813
 
1805
- /* Line 1455 of yacc.c */
1806
- #line 175 "parser.y"
1814
+ /* Line 1464 of yacc.c */
1815
+ #line 177 "parser.y"
1807
1816
  {concat("<h1 id=\"h-",10); process_header((yyvsp[(1) - (1)].svalue));}
1808
1817
  break;
1809
1818
 
1810
1819
  case 57:
1811
1820
 
1812
- /* Line 1455 of yacc.c */
1813
- #line 176 "parser.y"
1821
+ /* Line 1464 of yacc.c */
1822
+ #line 178 "parser.y"
1814
1823
  {concat("<h2 id=\"h-",10); process_header((yyvsp[(1) - (1)].svalue));}
1815
1824
  break;
1816
1825
 
1817
1826
  case 58:
1818
1827
 
1819
- /* Line 1455 of yacc.c */
1820
- #line 177 "parser.y"
1828
+ /* Line 1464 of yacc.c */
1829
+ #line 179 "parser.y"
1821
1830
  {concat("<h3 id=\"h-",10); process_header((yyvsp[(1) - (1)].svalue));}
1822
1831
  break;
1823
1832
 
1824
1833
  case 59:
1825
1834
 
1826
- /* Line 1455 of yacc.c */
1827
- #line 178 "parser.y"
1835
+ /* Line 1464 of yacc.c */
1836
+ #line 180 "parser.y"
1828
1837
  {concat("<h4 id=\"h-",10); process_header((yyvsp[(1) - (1)].svalue));}
1829
1838
  break;
1830
1839
 
1831
1840
  case 60:
1832
1841
 
1833
- /* Line 1455 of yacc.c */
1834
- #line 179 "parser.y"
1842
+ /* Line 1464 of yacc.c */
1843
+ #line 181 "parser.y"
1835
1844
  {concat("<h5 id=\"h-",10); process_header((yyvsp[(1) - (1)].svalue));}
1836
1845
  break;
1837
1846
 
1838
1847
  case 61:
1839
1848
 
1840
- /* Line 1455 of yacc.c */
1841
- #line 181 "parser.y"
1849
+ /* Line 1464 of yacc.c */
1850
+ #line 183 "parser.y"
1842
1851
  {process_oli((yyvsp[(1) - (1)].ivalue));}
1843
1852
  break;
1844
1853
 
1845
1854
  case 62:
1846
1855
 
1847
- /* Line 1455 of yacc.c */
1848
- #line 182 "parser.y"
1856
+ /* Line 1464 of yacc.c */
1857
+ #line 184 "parser.y"
1849
1858
  {process_uli((yyvsp[(1) - (1)].ivalue));}
1850
1859
  break;
1851
1860
 
1852
1861
  case 63:
1853
1862
 
1854
- /* Line 1455 of yacc.c */
1855
- #line 183 "parser.y"
1863
+ /* Line 1464 of yacc.c */
1864
+ #line 185 "parser.y"
1856
1865
  {concat("<br />",6);}
1857
1866
  break;
1858
1867
 
1859
1868
  case 64:
1860
1869
 
1861
- /* Line 1455 of yacc.c */
1862
- #line 186 "parser.y"
1870
+ /* Line 1464 of yacc.c */
1871
+ #line 188 "parser.y"
1863
1872
  {concat("<pre><code>",11);}
1864
1873
  break;
1865
1874
 
1866
1875
  case 65:
1867
1876
 
1868
- /* Line 1455 of yacc.c */
1869
- #line 186 "parser.y"
1877
+ /* Line 1464 of yacc.c */
1878
+ #line 188 "parser.y"
1870
1879
  {concat("</code></pre>",13);}
1871
1880
  break;
1872
1881
 
1873
1882
  case 67:
1874
1883
 
1875
- /* Line 1455 of yacc.c */
1876
- #line 188 "parser.y"
1884
+ /* Line 1464 of yacc.c */
1885
+ #line 190 "parser.y"
1877
1886
  {concat("<pre>",5);}
1878
1887
  break;
1879
1888
 
1880
1889
  case 68:
1881
1890
 
1882
- /* Line 1455 of yacc.c */
1883
- #line 188 "parser.y"
1891
+ /* Line 1464 of yacc.c */
1892
+ #line 190 "parser.y"
1884
1893
  {concat("</pre>",6);}
1885
1894
  break;
1886
1895
 
1887
1896
  case 69:
1888
1897
 
1889
- /* Line 1455 of yacc.c */
1890
- #line 189 "parser.y"
1898
+ /* Line 1464 of yacc.c */
1899
+ #line 191 "parser.y"
1891
1900
  {concat("<code>",6);}
1892
1901
  break;
1893
1902
 
1894
1903
  case 70:
1895
1904
 
1896
- /* Line 1455 of yacc.c */
1897
- #line 189 "parser.y"
1905
+ /* Line 1464 of yacc.c */
1906
+ #line 191 "parser.y"
1898
1907
  {concat("</code>",7);}
1899
1908
  break;
1900
1909
 
1901
1910
 
1902
1911
 
1903
- /* Line 1455 of yacc.c */
1904
- #line 1905 "parser.tab.c"
1912
+ /* Line 1464 of yacc.c */
1913
+ #line 1914 "parser.tab.c"
1905
1914
  default: break;
1906
1915
  }
1907
1916
  YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
@@ -2112,8 +2121,8 @@ yyreturn:
2112
2121
 
2113
2122
 
2114
2123
 
2115
- /* Line 1675 of yacc.c */
2116
- #line 193 "parser.y"
2124
+ /* Line 1684 of yacc.c */
2125
+ #line 195 "parser.y"
2117
2126
 
2118
2127
 
2119
2128
  process_uli(int level){
@@ -2258,7 +2267,14 @@ process_anchor_link(const char*target){
2258
2267
  process_url_link(const char*target,const char* proto){
2259
2268
  const char *c;
2260
2269
  concat("<a rel=\"nofollow\" href=\"",24);
2261
- if(proto) concat2(proto);
2270
+ if(proto){
2271
+ concat2(proto);
2272
+ } else if(target && *target == '/'){
2273
+ // relative link
2274
+ if( absolute_urls && site_url ){
2275
+ concat2(site_url);
2276
+ }
2277
+ }
2262
2278
  for(c=target; *c && *c != ']' && *c != '|'; c++) concat_raw_char(*c);
2263
2279
  process_link_tail(target,NULL,proto);
2264
2280
  }
@@ -1,10 +1,9 @@
1
-
2
- /* A Bison parser, made by GNU Bison 2.4.1. */
1
+ /* A Bison parser, made by GNU Bison 2.4.2. */
3
2
 
4
3
  /* Skeleton interface for Bison's Yacc-like parsers in C
5
4
 
6
- Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
7
- Free Software Foundation, Inc.
5
+ Copyright (C) 1984, 1989-1990, 2000-2006, 2009-2010 Free Software
6
+ Foundation, Inc.
8
7
 
9
8
  This program is free software: you can redistribute it and/or modify
10
9
  it under the terms of the GNU General Public License as published by
@@ -91,8 +90,8 @@
91
90
  typedef union YYSTYPE
92
91
  {
93
92
 
94
- /* Line 1676 of yacc.c */
95
- #line 68 "parser.y"
93
+ /* Line 1685 of yacc.c */
94
+ #line 70 "parser.y"
96
95
 
97
96
  double dvalue;
98
97
  int ivalue;
@@ -100,8 +99,8 @@ typedef union YYSTYPE
100
99
 
101
100
 
102
101
 
103
- /* Line 1676 of yacc.c */
104
- #line 105 "parser.tab.h"
102
+ /* Line 1685 of yacc.c */
103
+ #line 104 "parser.tab.h"
105
104
  } YYSTYPE;
106
105
  # define YYSTYPE_IS_TRIVIAL 1
107
106
  # define yystype YYSTYPE /* obsolescent; will be withdrawn */
@@ -1,3 +1,4 @@
1
+ // vim:ts=4:sw=4:expandtab
1
2
  %{
2
3
  #include <stdio.h>
3
4
  #include <stdlib.h>
@@ -26,6 +27,7 @@ size_t site_url_len = 0;
26
27
  extern VALUE git_url;
27
28
 
28
29
  int list_level = 1;
30
+ int absolute_urls = 0;
29
31
 
30
32
  #define CHECK_BUF_SIZE(len) \
31
33
  if( (bufptr - buf + len + 1) >= bufsize ){ \
@@ -334,7 +336,14 @@ process_anchor_link(const char*target){
334
336
  process_url_link(const char*target,const char* proto){
335
337
  const char *c;
336
338
  concat("<a rel=\"nofollow\" href=\"",24);
337
- if(proto) concat2(proto);
339
+ if(proto){
340
+ concat2(proto);
341
+ } else if(target && *target == '/'){
342
+ // relative link
343
+ if( absolute_urls && site_url ){
344
+ concat2(site_url);
345
+ }
346
+ }
338
347
  for(c=target; *c && *c != ']' && *c != '|'; c++) concat_raw_char(*c);
339
348
  process_link_tail(target,NULL,proto);
340
349
  }
@@ -24,14 +24,14 @@ extern size_t site_url_len;
24
24
 
25
25
  VALUE git_url;
26
26
 
27
- extern int parse_links_only;
27
+ extern int parse_links_only, absolute_urls;
28
28
 
29
29
  VALUE do_parse(int argc, VALUE *argv, VALUE self) {
30
30
  VALUE s, text, r_space_name;
31
31
  char *p;
32
32
 
33
- if( argc < 2 || argc > 4 ){
34
- rb_raise(rb_eArgError, "wrong number of arguments (%d for 2..4)", argc);
33
+ if( argc < 2 || argc > 5 ){
34
+ rb_raise(rb_eArgError, "wrong number of arguments (%d for 2..5)", argc);
35
35
  return rb_str_new("",0); // unreachable code, but for double safety
36
36
  }
37
37
 
@@ -53,6 +53,11 @@ VALUE do_parse(int argc, VALUE *argv, VALUE self) {
53
53
  git_url = argv[3];
54
54
  }
55
55
 
56
+ absolute_urls = 0;
57
+ if( argc > 4 && argv[4] != Qnil && argv[4] != Qfalse ){
58
+ absolute_urls = 1;
59
+ }
60
+
56
61
  if(!text || text == Qnil || text == Qfalse){
57
62
  // NULL input string
58
63
  return rb_str_new("",0);
data/spec/parser_spec.rb CHANGED
@@ -24,13 +24,13 @@ describe 'BreakoutParser' do
24
24
  r
25
25
  end
26
26
 
27
- it 'accepts from 2 to 4 arguments' do
28
- [0,1,5,6,7,8,9,10].each do |argc|
27
+ it 'accepts from 2 to 5 arguments' do
28
+ [0,1,6,7,8,9,10].each do |argc|
29
29
  lambda{
30
30
  BreakoutParser.parse(*(['a']*argc))
31
- }.should raise_error(ArgumentError, "wrong number of arguments (#{argc} for 2..4)")
31
+ }.should raise_error(ArgumentError, "wrong number of arguments (#{argc} for 2..5)")
32
32
  end
33
- (2..4).each do |argc|
33
+ (2..5).each do |argc|
34
34
  lambda{
35
35
  BreakoutParser.parse(*(['a']*argc))
36
36
  }.should_not raise_error
@@ -924,6 +924,33 @@ describe 'BreakoutParser' do
924
924
  }.should_not raise_error
925
925
  end
926
926
 
927
+ describe "absolute_urls" do
928
+ # 'true' values
929
+ [true, 1, 'x'].each do |v|
930
+ it "should NOT convert relative url to absolute when absolute_urls = #{v.inspect} AND site_url is NULL" do
931
+ parse("[[url:/rel]]", :absolute_urls => v).should ==
932
+ '<a rel="nofollow" href="/rel">/rel</a>'
933
+ parse("[[url:/rel|text]]", :absolute_urls => v).should ==
934
+ '<a rel="nofollow" href="/rel">text</a>'
935
+ end
936
+ it "should convert relative url to absolute when absolute_urls = #{v.inspect}" do
937
+ parse("[[url:/rel]]", :absolute_urls => v, :site_url => 'http://www.ru').should ==
938
+ '<a rel="nofollow" href="http://www.ru/rel">/rel</a>'
939
+ parse("[[url:/rel|text]]", :absolute_urls => v, :site_url => 'http://www.ru').should ==
940
+ '<a rel="nofollow" href="http://www.ru/rel">text</a>'
941
+ end
942
+ end
943
+ # 'false' values
944
+ [false, nil].each do |v|
945
+ it "should not convert relative url to absolute when absolute_urls = #{v.inspect}" do
946
+ parse("[[url:/rel]]", :absolute_urls => v).should ==
947
+ '<a rel="nofollow" href="/rel">/rel</a>'
948
+ parse("[[url:/rel|text]]", :absolute_urls => v).should ==
949
+ '<a rel="nofollow" href="/rel">text</a>'
950
+ end
951
+ end
952
+ end
953
+
927
954
  a = {}
928
955
  a["image:ExistingImage.png"] =
929
956
  '<img src="/spaces/test_space/documents/download/ExistingImage.png" alt="ALT" />'
@@ -982,6 +1009,11 @@ describe 'BreakoutParser' do
982
1009
 
983
1010
  def parse s, h = {}
984
1011
  h[:space_name] = "test_space" unless h.key?(:space_name)
985
- BreakoutParser.parse(s, h[:space_name], h[:site_url], h[:git_url]).strip
1012
+ BreakoutParser.parse(s,
1013
+ h[:space_name],
1014
+ h[:site_url],
1015
+ h[:git_url],
1016
+ h[:absolute_urls]
1017
+ ).strip
986
1018
  end
987
1019
  end
metadata CHANGED
@@ -1,12 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: breakout_parser
3
3
  version: !ruby/object:Gem::Version
4
+ hash: 59
4
5
  prerelease: false
5
6
  segments:
6
7
  - 0
7
8
  - 0
8
- - 17
9
- version: 0.0.17
9
+ - 18
10
+ version: 0.0.18
10
11
  platform: ruby
11
12
  authors:
12
13
  - Andrey "Zed" Zaikin
@@ -14,16 +15,18 @@ autorequire:
14
15
  bindir: bin
15
16
  cert_chain: []
16
17
 
17
- date: 2010-07-27 00:00:00 +06:00
18
+ date: 2010-08-25 00:00:00 +04:00
18
19
  default_executable:
19
20
  dependencies:
20
21
  - !ruby/object:Gem::Dependency
21
22
  name: rspec
22
23
  prerelease: false
23
24
  requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
24
26
  requirements:
25
27
  - - ">="
26
28
  - !ruby/object:Gem::Version
29
+ hash: 13
27
30
  segments:
28
31
  - 1
29
32
  - 2
@@ -40,9 +43,11 @@ extensions:
40
43
  extra_rdoc_files:
41
44
  - ChangeLog
42
45
  - LICENSE
46
+ - README
43
47
  files:
44
48
  - ChangeLog
45
49
  - LICENSE
50
+ - README
46
51
  - ext/breakout_parser/depend
47
52
  - ext/breakout_parser/extconf.rb
48
53
  - ext/breakout_parser/lex.yy.c
@@ -55,6 +60,7 @@ files:
55
60
  - ext/breakout_parser/ruby_ext.c
56
61
  - ext/breakout_parser/yywrap.c
57
62
  - lib/breakout_parser.rb
63
+ - spec/parser_spec.rb
58
64
  has_rdoc: true
59
65
  homepage: http://assembla.com
60
66
  licenses: []
@@ -65,23 +71,27 @@ rdoc_options:
65
71
  require_paths:
66
72
  - lib
67
73
  required_ruby_version: !ruby/object:Gem::Requirement
74
+ none: false
68
75
  requirements:
69
76
  - - ">="
70
77
  - !ruby/object:Gem::Version
78
+ hash: 3
71
79
  segments:
72
80
  - 0
73
81
  version: "0"
74
82
  required_rubygems_version: !ruby/object:Gem::Requirement
83
+ none: false
75
84
  requirements:
76
85
  - - ">="
77
86
  - !ruby/object:Gem::Version
87
+ hash: 3
78
88
  segments:
79
89
  - 0
80
90
  version: "0"
81
91
  requirements: []
82
92
 
83
93
  rubyforge_project:
84
- rubygems_version: 1.3.6
94
+ rubygems_version: 1.3.7
85
95
  signing_key:
86
96
  specification_version: 3
87
97
  summary: BreakoutParser