rrtf 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (70) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +31 -7
  3. data/documentation/RRTF/CharacterFormatting.html +1002 -0
  4. data/documentation/RRTF/CharacterStyle.html +1058 -0
  5. data/documentation/RRTF/Colour.html +813 -0
  6. data/documentation/RRTF/ColourTable.html +770 -0
  7. data/documentation/RRTF/CommandNode.html +2372 -0
  8. data/documentation/RRTF/ContainerNode.html +826 -0
  9. data/documentation/RRTF/Converters/HTML/Helpers.html +272 -0
  10. data/documentation/RRTF/Converters/HTML/Node.html +364 -0
  11. data/documentation/RRTF/Converters/HTML/NodeSet.html +265 -0
  12. data/documentation/RRTF/Converters/HTML.html +337 -0
  13. data/documentation/RRTF/Converters.html +117 -0
  14. data/documentation/RRTF/Document.html +2405 -0
  15. data/documentation/RRTF/DocumentStyle.html +1367 -0
  16. data/documentation/RRTF/Font.html +790 -0
  17. data/documentation/RRTF/FontTable.html +763 -0
  18. data/documentation/RRTF/FooterNode.html +515 -0
  19. data/documentation/RRTF/HeaderNode.html +515 -0
  20. data/documentation/RRTF/ImageNode.html +1374 -0
  21. data/documentation/RRTF/Information.html +809 -0
  22. data/documentation/RRTF/LinkNode.html +264 -0
  23. data/documentation/RRTF/ListLevel.html +799 -0
  24. data/documentation/RRTF/ListLevelNode.html +612 -0
  25. data/documentation/RRTF/ListMarker.html +595 -0
  26. data/documentation/RRTF/ListNode.html +368 -0
  27. data/documentation/RRTF/ListTable.html +343 -0
  28. data/documentation/RRTF/ListTemplate.html +433 -0
  29. data/documentation/RRTF/ListTextNode.html +285 -0
  30. data/documentation/RRTF/Node.html +616 -0
  31. data/documentation/RRTF/Paper.html +624 -0
  32. data/documentation/RRTF/ParagraphFormatting.html +749 -0
  33. data/documentation/RRTF/ParagraphNode.html +275 -0
  34. data/documentation/RRTF/ParagraphStyle.html +1319 -0
  35. data/documentation/RRTF/RTFError.html +295 -0
  36. data/documentation/RRTF/Style.html +1767 -0
  37. data/documentation/RRTF/Stylesheet.html +1768 -0
  38. data/documentation/RRTF/TableCellNode.html +1704 -0
  39. data/documentation/RRTF/TableNode.html +1025 -0
  40. data/documentation/RRTF/TableRowNode.html +675 -0
  41. data/documentation/RRTF/TextNode.html +600 -0
  42. data/documentation/RRTF/Utilities.html +201 -0
  43. data/documentation/RRTF.html +129 -0
  44. data/documentation/_index.html +478 -0
  45. data/documentation/class_list.html +51 -0
  46. data/documentation/css/common.css +1 -0
  47. data/documentation/css/full_list.css +58 -0
  48. data/documentation/css/style.css +492 -0
  49. data/documentation/file.README.html +223 -0
  50. data/documentation/file_list.html +56 -0
  51. data/documentation/frames.html +17 -0
  52. data/documentation/index.html +223 -0
  53. data/documentation/js/app.js +248 -0
  54. data/documentation/js/full_list.js +216 -0
  55. data/documentation/js/jquery.js +4 -0
  56. data/documentation/method_list.html +2203 -0
  57. data/documentation/top-level-namespace.html +110 -0
  58. data/examples/01.rtf +14 -17
  59. data/examples/01_mac_word15_36.png +0 -0
  60. data/examples/01_styles_and_paragraphs.rb +3 -4
  61. data/examples/resources/json/redshirt_styles.json +4 -2
  62. data/lib/rrtf/node.rb +86 -167
  63. data/lib/rrtf/style/character_style.rb +4 -3
  64. data/lib/rrtf/style/formatting.rb +55 -11
  65. data/lib/rrtf/style/paragraph_style.rb +19 -4
  66. data/lib/rrtf/style/style.rb +15 -15
  67. data/lib/rrtf/stylesheet.rb +57 -16
  68. data/lib/rrtf/version.rb +1 -1
  69. data/rrtf.gemspec +1 -0
  70. metadata +70 -1
@@ -0,0 +1,110 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>
7
+ Top Level Namespace
8
+
9
+ &mdash; Documentation by YARD 0.9.9
10
+
11
+ </title>
12
+
13
+ <link rel="stylesheet" href="css/style.css" type="text/css" charset="utf-8" />
14
+
15
+ <link rel="stylesheet" href="css/common.css" type="text/css" charset="utf-8" />
16
+
17
+ <script type="text/javascript" charset="utf-8">
18
+ pathId = "";
19
+ relpath = '';
20
+ </script>
21
+
22
+
23
+ <script type="text/javascript" charset="utf-8" src="js/jquery.js"></script>
24
+
25
+ <script type="text/javascript" charset="utf-8" src="js/app.js"></script>
26
+
27
+
28
+ </head>
29
+ <body>
30
+ <div class="nav_wrap">
31
+ <iframe id="nav" src="class_list.html?1"></iframe>
32
+ <div id="resizer"></div>
33
+ </div>
34
+
35
+ <div id="main" tabindex="-1">
36
+ <div id="header">
37
+ <div id="menu">
38
+
39
+ <a href="_index.html">Index</a> &raquo;
40
+
41
+
42
+ <span class="title">Top Level Namespace</span>
43
+
44
+ </div>
45
+
46
+ <div id="search">
47
+
48
+ <a class="full_list_link" id="class_list_link"
49
+ href="class_list.html">
50
+
51
+ <svg width="24" height="24">
52
+ <rect x="0" y="4" width="24" height="4" rx="1" ry="1"></rect>
53
+ <rect x="0" y="12" width="24" height="4" rx="1" ry="1"></rect>
54
+ <rect x="0" y="20" width="24" height="4" rx="1" ry="1"></rect>
55
+ </svg>
56
+ </a>
57
+
58
+ </div>
59
+ <div class="clear"></div>
60
+ </div>
61
+
62
+ <div id="content"><h1>Top Level Namespace
63
+
64
+
65
+
66
+ </h1>
67
+ <div class="box_info">
68
+
69
+
70
+
71
+
72
+
73
+
74
+
75
+
76
+
77
+
78
+
79
+ </div>
80
+
81
+ <h2>Defined Under Namespace</h2>
82
+ <p class="children">
83
+
84
+
85
+ <strong class="modules">Modules:</strong> <span class='object_link'><a href="RRTF.html" title="RRTF (module)">RRTF</a></span>
86
+
87
+
88
+
89
+
90
+ </p>
91
+
92
+
93
+
94
+
95
+
96
+
97
+
98
+
99
+
100
+ </div>
101
+
102
+ <div id="footer">
103
+ Generated on Mon Jul 24 15:48:59 2017 by
104
+ <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
105
+ 0.9.9 (ruby-2.3.3).
106
+ </div>
107
+
108
+ </div>
109
+ </body>
110
+ </html>
data/examples/01.rtf CHANGED
@@ -7,39 +7,36 @@
7
7
  \red255\green0\blue0;
8
8
  }
9
9
  {\stylesheet
10
- {\s1 \qc\sa100\ltrpar \b\uldb\caps\ulc1\fs36 \sbasedon3 \sautoupd \snext3 \sqformat \spriority100 Title;}
11
- {\s2 \ql\sb200\sa40\ltrpar \b\ul\ulc1\fs24 \snext3 \sqformat \spriority101 Heading 1;}
12
- {\s3 \ql\hyphpar\ltrpar \fs24 \sqformat \spriority102 Body;}
13
- {\*\cs4 \b\i\cf1 \additive \spriority103 Emphasis;}
10
+ {\s1 \qc\sa100\ltrpar\b\uldb\caps\ulc1\fs36 \sbasedon0 \sautoupd \snext0 \sqformat \spriority1 Title;}
11
+ {\s2 \ql\sb200\sa40\ltrpar\b\ul\ulc1\fs24 \snext0 \sqformat \spriority2 Heading 1;}
12
+ {\s0 \ql\hyphpar\ltrpar\fs24 \sqformat \spriority3 Normal;}
13
+ {\*\cs3 \b\i\cf1 \additive \spriority4 Emphasis;}
14
14
  }
15
15
  {\info
16
- {\createim\yr2017\mo7\dy23\hr19\min18}
16
+ {\createim\yr2017\mo7\dy24\hr15\min51}
17
17
  }
18
18
 
19
19
  \stylesortmethod1\paperw12247\paperh15819\margl1800\margr1800\margt1440\margb1440
20
- {\pard\s1 \qc\sa100\ltrpar \b\uldb\caps\ulc1\fs36
20
+ {\pard\s1 \qc\sa100\ltrpar\b\uldb\caps\ulc1\fs36
21
21
  RedShirts 101
22
22
  \par}
23
- {\pard\s3 \ql\hyphpar\ltrpar \fs24
23
+ {\pard\s0 \ql\hyphpar\ltrpar\fs24
24
24
  Should you ever find yourself on a spacefaring vessel wearing a
25
- {\cs4 \b\i\cf1
25
+ {\cs3 \b\i\cf1
26
26
  red
27
27
  }
28
28
  shirt, take heed and be on guard, for danger is immanent and you are likely expendable among the crew...
29
29
  \par}
30
- {\pard\s2 \ql\sb200\sa40\ltrpar \b\ul\ulc1\fs24
30
+ {\pard\s2 \ql\sb200\sa40\ltrpar\b\ul\ulc1\fs24
31
31
  1. The Danger of Away Missions
32
32
  \par}
33
- {\pard\s3 \ql\hyphpar\ltrpar \fs24
34
- If you're ever assigned an away mission, its almost certian to be your doom. The optimal stategy is to avoid away missions to begin with...
33
+ {\pard\s0 \ql\hyphpar\ltrpar\fs24
34
+ If you're ever assigned an away mission, it's almost certain to be your doom. The optimal strategy is to avoid away missions to begin with...
35
35
  \par}
36
- {\pard\s2 \ql\sb200\sa40\ltrpar \b\ul\ulc1\fs24
36
+ {\pard\s2 \ql\sb200\sa40\ltrpar\b\ul\ulc1\fs24
37
37
  2. Avoiding High-Ranking Officers
38
38
  \par}
39
- {\pard\s3 \ql\hyphpar\ltrpar \fs24
40
- You're likely to notice an influx of unfortunate outcomes around certian high-ranking officers. Its to your advantage to quickly identify and avoid these officers...
41
- \par}
42
- {\pard\s2 \ql\sb200\sa40\ltrpar \b\ul\ulc1\fs24
43
- 3. Miscellaneous Hazards
39
+ {\pard\s0 \ql\hyphpar\ltrpar\fs24
40
+ You're likely to notice an influx of unfortunate outcomes around certain high-ranking officers. Its to your advantage to quickly identify and avoid these officers...
44
41
  \par}
45
42
  }
Binary file
@@ -17,17 +17,16 @@ rtf.paragraph(styles['BODY']) do |p|
17
17
  end
18
18
  rtf.paragraph(styles['H1']) << "1. The Danger of Away Missions"
19
19
  rtf.paragraph(styles['BODY']) do |p|
20
- p << "If you're ever assigned an away mission, its almost certian to be your doom. "
21
- p << "The optimal stategy is to avoid away missions to begin with..."
20
+ p << "If you're ever assigned an away mission, it's almost certain to be your doom. "
21
+ p << "The optimal strategy is to avoid away missions to begin with..."
22
22
  end
23
23
  rtf.paragraph(styles['H1']) << "2. Avoiding High-Ranking Officers"
24
24
  rtf.paragraph(styles['BODY']) do |p|
25
25
  p << "You're likely to notice an influx of unfortunate outcomes around "
26
- p << "certian high-ranking officers. Its to your advantage to quickly identify and "
26
+ p << "certain high-ranking officers. Its to your advantage to quickly identify and "
27
27
  p << "avoid these officers..."
28
28
  end
29
29
 
30
-
31
30
  File.open(DIR+'/01.rtf', 'w') do |file|
32
31
  file.write(rtf.to_rtf)
33
32
  end
@@ -31,8 +31,9 @@
31
31
  {
32
32
  "type": "paragraph",
33
33
  "id": "BODY",
34
- "name": "Body",
34
+ "name": "Normal",
35
35
  "primary": true,
36
+ "default": true,
36
37
  "justification": "LEFT",
37
38
  "font_size": 24,
38
39
  "hyphenate": true
@@ -44,6 +45,7 @@
44
45
  "additive": true,
45
46
  "italic": true,
46
47
  "bold": true,
47
- "foreground_color": "#ff0000"
48
+ "foreground_color": "#ff0000",
49
+ "locked": true
48
50
  }
49
51
  ]
data/lib/rrtf/node.rb CHANGED
@@ -1515,150 +1515,65 @@ module RRTF
1515
1515
  # This class represents an RTF document. In actuality it is just a
1516
1516
  # specialised Node type that cannot be assigned a parent and that holds
1517
1517
  # document font, colour and information tables.
1518
+ # @author Peter Wood
1518
1519
  class Document < CommandNode
1519
- # A definition for a document character set setting.
1520
- CS_ANSI = :ansi
1521
-
1522
- # A definition for a document character set setting.
1523
- CS_MAC = :mac
1524
-
1525
- # A definition for a document character set setting.
1526
- CS_PC = :pc
1527
-
1528
- # A definition for a document character set setting.
1529
- CS_PCA = :pca
1530
-
1531
- # A definition for a document language setting.
1532
- LC_AFRIKAANS = 1078
1533
-
1534
- # A definition for a document language setting.
1535
- LC_ARABIC = 1025
1536
-
1537
- # A definition for a document language setting.
1538
- LC_CATALAN = 1027
1539
-
1540
- # A definition for a document language setting.
1541
- LC_CHINESE_TRADITIONAL = 1028
1542
-
1543
- # A definition for a document language setting.
1544
- LC_CHINESE_SIMPLIFIED = 2052
1545
-
1546
- # A definition for a document language setting.
1547
- LC_CZECH = 1029
1548
-
1549
- # A definition for a document language setting.
1550
- LC_DANISH = 1030
1551
-
1552
- # A definition for a document language setting.
1553
- LC_DUTCH = 1043
1554
-
1555
- # A definition for a document language setting.
1556
- LC_DUTCH_BELGIAN = 2067
1557
-
1558
- # A definition for a document language setting.
1559
- LC_ENGLISH_UK = 2057
1560
-
1561
- # A definition for a document language setting.
1562
- LC_ENGLISH_US = 1033
1563
-
1564
- # A definition for a document language setting.
1565
- LC_FINNISH = 1035
1566
-
1567
- # A definition for a document language setting.
1568
- LC_FRENCH = 1036
1569
-
1570
- # A definition for a document language setting.
1571
- LC_FRENCH_BELGIAN = 2060
1572
-
1573
- # A definition for a document language setting.
1574
- LC_FRENCH_CANADIAN = 3084
1575
-
1576
- # A definition for a document language setting.
1577
- LC_FRENCH_SWISS = 4108
1578
-
1579
- # A definition for a document language setting.
1580
- LC_GERMAN = 1031
1581
-
1582
- # A definition for a document language setting.
1583
- LC_GERMAN_SWISS = 2055
1584
-
1585
- # A definition for a document language setting.
1586
- LC_GREEK = 1032
1587
-
1588
- # A definition for a document language setting.
1589
- LC_HEBREW = 1037
1590
-
1591
- # A definition for a document language setting.
1592
- LC_HUNGARIAN = 1038
1593
-
1594
- # A definition for a document language setting.
1595
- LC_ICELANDIC = 1039
1596
-
1597
- # A definition for a document language setting.
1598
- LC_INDONESIAN = 1057
1599
-
1600
- # A definition for a document language setting.
1601
- LC_ITALIAN = 1040
1602
-
1603
- # A definition for a document language setting.
1604
- LC_JAPANESE = 1041
1605
-
1606
- # A definition for a document language setting.
1607
- LC_KOREAN = 1042
1608
-
1609
- # A definition for a document language setting.
1610
- LC_NORWEGIAN_BOKMAL = 1044
1611
-
1612
- # A definition for a document language setting.
1613
- LC_NORWEGIAN_NYNORSK = 2068
1614
-
1615
- # A definition for a document language setting.
1616
- LC_POLISH = 1045
1617
-
1618
- # A definition for a document language setting.
1619
- LC_PORTUGUESE = 2070
1620
-
1621
- # A definition for a document language setting.
1622
- LC_POTUGUESE_BRAZILIAN = 1046
1623
-
1624
- # A definition for a document language setting.
1625
- LC_ROMANIAN = 1048
1626
-
1627
- # A definition for a document language setting.
1628
- LC_RUSSIAN = 1049
1629
-
1630
- # A definition for a document language setting.
1631
- LC_SERBO_CROATIAN_CYRILLIC = 2074
1632
-
1633
- # A definition for a document language setting.
1634
- LC_SERBO_CROATIAN_LATIN = 1050
1635
-
1636
- # A definition for a document language setting.
1637
- LC_SLOVAK = 1051
1638
-
1639
- # A definition for a document language setting.
1640
- LC_SPANISH_CASTILLIAN = 1034
1641
-
1642
- # A definition for a document language setting.
1643
- LC_SPANISH_MEXICAN = 2058
1644
-
1645
- # A definition for a document language setting.
1646
- LC_SWAHILI = 1089
1647
-
1648
- # A definition for a document language setting.
1649
- LC_SWEDISH = 1053
1650
-
1651
- # A definition for a document language setting.
1652
- LC_THAI = 1054
1653
-
1654
- # A definition for a document language setting.
1655
- LC_TURKISH = 1055
1656
-
1657
- # A definition for a document language setting.
1658
- LC_UNKNOWN = 1024
1520
+ # A hash mapping character set string constants to their RTF counterparts.
1521
+ # @return [Hash<String, Symbol>] the RTF character set dictionary.
1522
+ CS_DICTIONARY = {
1523
+ "ANSI" => :ansi,
1524
+ "MAC" => :mac,
1525
+ "PC" => :pc,
1526
+ "PCA" => :pca
1527
+ }.freeze
1659
1528
 
1660
- # A definition for a document language setting.
1661
- LC_VIETNAMESE = 1066
1529
+ # A hash mapping langauge set string constants to their RTF counterparts.
1530
+ # @return [Hash<String, Integer>] the RTF langauge setting dictionary.
1531
+ LS_DICTIONARY = {
1532
+ "AFRIKAANS" => 1078,
1533
+ "ARABIC" => 1025,
1534
+ "CATALAN" => 1027,
1535
+ "CHINESE_TRADITIONAL" => 1028,
1536
+ "CHINESE_SIMPLIFIED" => 2052,
1537
+ "CZECH" => 1029,
1538
+ "DANISH" => 1030,
1539
+ "DUTCH" => 1043,
1540
+ "DUTCH_BELGIAN" => 2067,
1541
+ "ENGLISH_UK" => 2057,
1542
+ "ENGLISH_US" => 1033,
1543
+ "FINNISH" => 1035,
1544
+ "FRENCH" => 1036,
1545
+ "FRENCH_BELGIAN" => 2060,
1546
+ "FRENCH_CANADIAN" => 3084,
1547
+ "FRENCH_SWISS" => 4108,
1548
+ "GERMAN" => 1031,
1549
+ "GERMAN_SWISS" => 2055,
1550
+ "GREEK" => 1032,
1551
+ "HEBREW" => 1037,
1552
+ "HUNGARIAN" => 1038,
1553
+ "ICELANDIC" => 1039,
1554
+ "INDONESIAN" => 1057,
1555
+ "ITALIAN" => 1040,
1556
+ "JAPANESE" => 1041,
1557
+ "KOREAN" => 1042,
1558
+ "NORWEGIAN_BOKMAL" => 1044,
1559
+ "NORWEGIAN_NYNORSK" => 2068,
1560
+ "POLISH" => 1045,
1561
+ "PORTUGUESE" => 2070,
1562
+ "POTUGUESE_BRAZILIAN" => 1046,
1563
+ "ROMANIAN" => 1048,
1564
+ "RUSSIAN" => 1049,
1565
+ "SERBO_CROATIAN_CYRILLIC" => 2074,
1566
+ "SERBO_CROATIAN_LATIN" => 1050,
1567
+ "SLOVAK" => 1051,
1568
+ "SPANISH_CASTILLIAN" => 1034,
1569
+ "SPANISH_MEXICAN" => 2058,
1570
+ "SWAHILI" => 1089,
1571
+ "SWEDISH" => 1053,
1572
+ "THAI" => 1054,
1573
+ "TURKISH" => 1055,
1574
+ "UNKNOWN" => 1024,
1575
+ "VIETNAMESE" => 1066
1576
+ }.freeze
1662
1577
 
1663
1578
  # Attribute accessor.
1664
1579
  attr_reader :fonts, :lists, :colours, :information, :character_set,
@@ -1668,35 +1583,25 @@ module RRTF
1668
1583
  attr_writer :character_set, :language, :stylesheet
1669
1584
 
1670
1585
 
1671
- # This is a constructor for the Document class.
1586
+ # Represents an entire RTF document.
1587
+ # @note The "suppress_system_styles" option is ignored by most RTF platforms including Word and LibreOffice.
1588
+ # @see DocumentStyle#initialize DocumentStyle#initialize for available document style options.
1589
+ # @see Stylesheet#add_style Stylesheet#initialize for available stylesheet options.
1672
1590
  #
1673
- # ==== Parameters
1674
- # options:: A hashmap of options to use in initializing the document
1675
- # default_font:: A font object OR string encapsulating the default
1676
- # font to be used by the document.
1677
- # STRING FORMAT "<FAMILY>:<Name>"
1678
- # DEFAULT "SWISS:Helvetica".
1679
- # document_style:: A DocumentStyle object OR options hash encapsulating
1680
- # the style settings to be applied to the document.
1681
- # DEFAULT DocumentStyle object with default settings.
1682
- # character_set:: The character set to be applied to the document.
1683
- # DEFAULT Document::CS_ANSI.
1684
- # language:: The language setting to be applied to document.
1685
- # DEFAULT Document::LC_ENGLISH_UK.
1686
- # suppress_system_styles:: A Boolean indicating whether or not to add
1687
- # the \noqfpromote control word, which indicates
1688
- # "quick" or default styles should be suppressed.
1689
- # DEFAULT false.
1690
- # stylesheet:: A Stylesheet object OR hashmap array encapsulating
1691
- # the styles to make available throughout the document.
1692
- # DEFAULT nil.
1591
+ # @param [Hash<String, Object>] options the options to use in creating the document.
1592
+ # @option options [String, Font] "default_font" ("SWISS:Helvetica") a font object OR string encapsulating the default font to be used by the document (see {Font.from_string} for string format).
1593
+ # @option options [String] "character_set" ("ANSI") the character set to be applied to the document (see {CS_DICTIONARY} for valid values).
1594
+ # @option options [String] "language" ("ENGLISH_US") the language setting to be applied to the document (see {LS_DICTIONARY} for valid values).
1595
+ # @option options [Boolean] "suppress_system_styles" (false) whether or not to suppress styles provided in the host platform (adds the \noqfpromote control word before stylesheet definition).
1596
+ # @option options [DocumentStyle] "document_style" (DocumentStyle.new) a DocumentStyle object OR options hash encapsulating the style settings to be applied to the document.
1597
+ # @option options [Array, Hash, Stylesheet] "stylesheet" (nil) a Stylesheet object OR array of style hashes OR hash of stylesheet options with which to use as or construct the stylesheet for the document.
1693
1598
  def initialize(options = {})
1694
1599
  # load default options
1695
1600
  options = {
1696
1601
  "default_font" => "SWISS:Helvetica",
1697
1602
  "document_style" => DocumentStyle.new,
1698
- "character_set" => CS_ANSI,
1699
- "language" => LC_ENGLISH_US,
1603
+ "character_set" => "ANSI",
1604
+ "language" => "ENGLISH_US",
1700
1605
  "suppress_system_styles" => false,
1701
1606
  "stylesheet" => nil
1702
1607
  }.merge(options)
@@ -1723,13 +1628,27 @@ module RRTF
1723
1628
  RTFError.fire("Unreconized document style format #{font.class.to_s}")
1724
1629
  end # case
1725
1630
 
1631
+ # parse character set
1632
+ cs_string = options.delete("character_set")
1633
+ cs_val = CS_DICTIONARY[cs_string]
1634
+ if cs_val.nil?
1635
+ RTFError.fire("Unreconized character set '#{cs_string}'.")
1636
+ end # if
1637
+
1638
+ # parse language setting
1639
+ ls_string = options.delete("language")
1640
+ ls_val = LS_DICTIONARY[ls_string]
1641
+ if ls_val.nil?
1642
+ RTFError.fire("Unreconized language '#{ls_string}'.")
1643
+ end # if
1644
+
1726
1645
  @fonts = FontTable.new(font)
1727
1646
  @lists = ListTable.new
1728
1647
  @default_font = 0
1729
1648
  @colours = ColourTable.new
1730
1649
  @information = Information.new
1731
- @character_set = options.delete("character_set")
1732
- @language = options.delete("language")
1650
+ @character_set = cs_val
1651
+ @language = ls_val
1733
1652
  @style = style
1734
1653
  @headers = [nil, nil, nil, nil]
1735
1654
  @footers = [nil, nil, nil, nil]
@@ -7,9 +7,9 @@ module RRTF
7
7
 
8
8
  # This is the constructor for the CharacterStyle class.
9
9
  #
10
- # ==== Exceptions
11
- # RTFError:: Generate if the parent style specified is not an instance
12
- # of the CharacterStyle class.
10
+ # @param [Hash] options the character style options.
11
+ # @option options (see Style#initialize)
12
+ # @option options (see CharacterFormatting#initialize_character_formatting)
13
13
  def initialize(options = {})
14
14
  super(options)
15
15
  initialize_character_formatting(options)
@@ -45,6 +45,7 @@ module RRTF
45
45
  rtf << "\\snext#{@next_style_handle}#{suffix}" unless @next_style_handle.nil?
46
46
  rtf << "\\sqformat#{suffix}" if @primary
47
47
  rtf << "\\spriority#{@priority}#{suffix}" unless @priority.nil?
48
+ rtf << "\\shidden#{suffix}" if @hidden
48
49
  rtf << "#{name_prefix}#{name};}"
49
50
 
50
51
  rtf.string
@@ -1,6 +1,7 @@
1
1
  require 'stringio'
2
2
 
3
- # Encapsulates all character formatting methods shared between style types
3
+ # Encapsulates all character formatting methods shared between style types.
4
+ # @author Wesley Hileman
4
5
  module RRTF::CharacterFormatting
5
6
  CHARACTER_ATTRIBUTES = {
6
7
  # toggable attributes
@@ -72,7 +73,7 @@ module RRTF::CharacterFormatting
72
73
  "default" => nil,
73
74
  "to_rtf" => lambda{ |value, document| (value ? '\outl' : '\outl0') unless value.nil? }
74
75
  },
75
- "hidden" => {
76
+ "text_hidden" => {
76
77
  "default" => nil,
77
78
  "to_rtf" => lambda{ |value, document| (value ? '\v' : '\v0') unless value.nil? }
78
79
  },
@@ -87,29 +88,29 @@ module RRTF::CharacterFormatting
87
88
  },
88
89
  "foreground_color" => {
89
90
  "default" => nil,
90
- "from_user" => lambda{ |value| RRTF::Colour.from_string(value) },
91
+ "from_user" => lambda{ |value| value.is_a?(RRTF::Colour) ? value : RRTF::Colour.from_string(value) },
91
92
  "to_rtf" => lambda{ |value, document| "\\cf#{document.colours.index(value)}" unless value.nil? }
92
93
  },
93
94
  "background_color" => {
94
95
  "default" => nil,
95
- "from_user" => lambda{ |value| RRTF::Colour.from_string(value) },
96
+ "from_user" => lambda{ |value| value.is_a?(RRTF::Colour) ? value : RRTF::Colour.from_string(value) },
96
97
  "to_rtf" => lambda{ |value, document| "\\cb#{document.colours.index(value)}" unless value.nil? }
97
98
  },
98
99
  "underline_color" => {
99
100
  "default" => nil,
100
- "from_user" => lambda{ |value| RRTF::Colour.from_string(value) },
101
+ "from_user" => lambda{ |value| value.is_a?(RRTF::Colour) ? value : RRTF::Colour.from_string(value) },
101
102
  "to_rtf" => lambda{ |value, document| "\\ulc#{document.colours.index(value)}" unless value.nil? }
102
103
  },
103
104
  "font" => {
104
105
  "default" => nil,
105
- "from_user" => lambda{ |value| RRTF::Font.from_string(value) },
106
+ "from_user" => lambda{ |value| value.is_a?(RRTF::Font) ? value : RRTF::Font.from_string(value) },
106
107
  "to_rtf" => lambda{ |value, document| "\\f#{document.fonts.index(value)}" unless value.nil? }
107
108
  },
108
109
  "font_size" => {
109
110
  "default" => nil,
110
111
  "to_rtf" => lambda{ |value, document| "\\fs#{value}" unless value.nil? }
111
112
  }
112
- }
113
+ }.freeze
113
114
 
114
115
  def self.included(base)
115
116
  # define accessors in base for paragraph attributes
@@ -120,6 +121,27 @@ module RRTF::CharacterFormatting
120
121
  end # class_eval
121
122
  end
122
123
 
124
+ # Initializes character formatting attributes.
125
+ #
126
+ # @param [Hash] options the character formatting options.
127
+ # @option options [Boolean] "bold" (nil) enable or disable bold (nil to remain same).
128
+ # @option options [Boolean] "italic" (nil) enable or disable italic (nil to remain same).
129
+ # @option options [Boolean, String] "underline" (nil) enable or disable underline (nil to remain same); can also be a string (see {CharacterFormatting::CHARACTER_ATTRIBUTES}).
130
+ # @option options [Boolean] "uppercase" (nil) enable or disable all caps (nil to remain same).
131
+ # @option options [Boolean] "superscript" (nil) enable or disable superscript (nil to remain same).
132
+ # @option options [Boolean] "subscript" (nil) enable or disable subscript (nil to remain same).
133
+ # @option options [Boolean] "strike" (nil) enable or disable single line-through (nil to remain same).
134
+ # @option options [Boolean] "emboss" (nil) enable or disable emboss (nil to remain same).
135
+ # @option options [Boolean] "imprint" (nil) enable or disable imprint (nil to remain same).
136
+ # @option options [Boolean] "outline" (nil) enable or disable outline (nil to remain same).
137
+ # @option options [Boolean] "text_hidden" (nil) enable or disable hidden (nil to remain same).
138
+ # @option options [Boolean, Integer] "kerning" (nil) enable or disable kerning (nil to remain same); to enable specify the font size in half-points above which kerining will be applied.
139
+ # @option options [Integer] "character_spacing_offset" (nil) quarter points by which to expand or compress character spacing (negative for compress).
140
+ # @option options [String, Colour] "foreground_color" (nil) colour to apply to the foreground (text); see {Colour.from_string} for string format.
141
+ # @option options [String, Colour] "background_color" (nil) colour to apply to the background (highlight); see {Colour.from_string} for string format.
142
+ # @option options [String, Colour] "underline_color" (nil) colour to apply to the underline; see {Colour.from_string} for string format.
143
+ # @option options [String, Font] "font" (nil) font to apply to text; see {Font.from_string} for string format.
144
+ # @option options [Integer] "font_size" (nil) font size in half-points.
123
145
  def initialize_character_formatting(options = {})
124
146
  # load default attribute values
125
147
  CHARACTER_ATTRIBUTES.each do |key, options|
@@ -159,14 +181,18 @@ module RRTF::CharacterFormatting
159
181
 
160
182
  # accumulate RTF representations of attributes
161
183
  CHARACTER_ATTRIBUTES.each do |key, options|
162
- text << options["to_rtf"].call(send(key), document) if options.has_key?("to_rtf")
184
+ if options.has_key?("to_rtf")
185
+ rtf = options["to_rtf"].call(send(key), document)
186
+ text << rtf unless rtf.nil?
187
+ end # if
163
188
  end # each
164
189
 
165
190
  text.string
166
191
  end
167
192
  end # module CharacterFormatting
168
193
 
169
- # Encapsulates all paragraph formatting methods shared between style types
194
+ # Encapsulates all paragraph formatting methods shared between style types.
195
+ # @author Wesley Hileman
170
196
  module RRTF::ParagraphFormatting
171
197
  PARAGRAPH_ATTRIBUTES = {
172
198
  "justification" => {
@@ -228,7 +254,7 @@ module RRTF::ParagraphFormatting
228
254
  },
229
255
  "to_rtf" => lambda{ |value, document| "\\#{value}par" unless value.nil? }
230
256
  }
231
- }
257
+ }.freeze
232
258
 
233
259
  def self.included(base)
234
260
  # define accessors in base for paragraph attributes
@@ -239,6 +265,21 @@ module RRTF::ParagraphFormatting
239
265
  end # class_eval
240
266
  end
241
267
 
268
+ # Initializes paragraph formatting attributes.
269
+ #
270
+ # @param [Hash] options the paragraph formatting options.
271
+ # @option options [String] "justification" ('LEFT') the paragraph justification ('LEFT', 'CENTER'/'CENTRE', 'RIGHT', or 'FULL').
272
+ # @option options [Integer] "left_indent" (nil) the left indent of the paragraph (twentieth points).
273
+ # @option options [Integer] "right_indent" (nil) the right indent of the paragraph (twentieth points).
274
+ # @option options [Integer] "first_line_indent" (nil) the first line indent of the paragraph (twentieth points).
275
+ # @option options [Integer] "space_before" (nil) the space before the paragraph (twentieth points).
276
+ # @option options [Integer] "space_after" (nil) the space after the paragraph (twentieth points).
277
+ # @option options [Integer] "line_spacing" (nil) the line spacing in the paragraph (twentieth points).
278
+ # @option options [Boolean] "widow_orphan_ctl" (nil) enable or disable widow-and-orphan control.
279
+ # @option options [Boolean] "no_break" (nil) when true, tries to keep the paragraph on the same page (i.e. without breaking).
280
+ # @option options [Boolean] "no_break_with_next" (nil) when true, tries to keep the paragraph with the next paragraph on the same page (i.e. without breaking).
281
+ # @option options [Boolean] "hyphenate" (nil) enable or disable hyphenation for the paragraph.
282
+ # @option options [String] "paragraph_flow" ('LEFT_TO_RIGHT') the text flow direction in the paragraph ('LEFT_TO_RIGHT' or 'RIGHT_TO_LEFT').
242
283
  def initialize_paragraph_formatting(options = {})
243
284
  # load default attribute values
244
285
  PARAGRAPH_ATTRIBUTES.each do |key, options|
@@ -268,7 +309,10 @@ module RRTF::ParagraphFormatting
268
309
 
269
310
  # accumulate RTF representations of paragraph attributes
270
311
  PARAGRAPH_ATTRIBUTES.each do |key, options|
271
- text << options["to_rtf"].call(send(key), document) if options.has_key?("to_rtf")
312
+ if options.has_key?("to_rtf")
313
+ rtf = options["to_rtf"].call(send(key), document)
314
+ text << rtf unless rtf.nil?
315
+ end # if
272
316
  end # each
273
317
 
274
318
  text.string