Menu

[r4300]: / branches / parsnip / Src / Main / CS.ActiveText.Helper.pas  Maximize  Restore  History

Download this file

146 lines (125 with data), 4.9 kB

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
{
* This Source Code Form is subject to the terms of the Mozilla Public License,
* v. 2.0. If a copy of the MPL was not distributed with this file, You can
* obtain one at http://mozilla.org/MPL/2.0/
*
* Copyright (C) 2008-2013, Peter Johnson (www.delphidabbler.com).
*
* $Rev$
* $Date$
*
* Implements a class that helps with parsing of data from input files into
* active text for use in relevant properties of a snippet.
}
unit CS.ActiveText.Helper;
interface
uses
// Project
CS.ActiveText,
UBaseObjects,
UIStringList;
type
{
TActiveTextHelper:
Class that helps with parsing of data from input files into active text for
use in relevant properties of a snippet.
}
TActiveTextHelper = class(TNoConstructObject)
public
class function ParseCommentsAndCredits(const PrefixText, CreditsMarkup,
URL: string): IActiveText;
{Builds an active text object containing some plain text followed by
active text defined by markup in the "Credits" format.
@param PrefixText [in] PrefixText text. If not empty string this is
added as plain text before any credits markup.
@param CreditsMarkup [in] "Credits" markup. May contain a link indicated
by bracketed text. Both plain text and links can be generated. May be
empty string.
@param URL [in] URL to use in any link defined in CreditsMarkup.
@return Required active text object. Will be an empty object if both
PrefixText and CreditsMarkup are empty.
}
class function ParseREML(const REML: string): IActiveText;
{Creates an active text object from a string containing markup in REML
format.
@param REML [in] REML markup language that defines active text.
@return Required active text object. Will be an empty object if REML is
empty string.
}
/// <summary>Creates an active text object from a plain text string.
/// </summary>
/// <remarks>All text is treated as one paragraph, embedded newlines are
/// ignored. Text is trimmed of leading and trailing spaces. If trimmed
/// text is empty, empty active text is returned.</remarks>
class function ParsePlainText(Text: string): IActiveText;
end;
implementation
uses
// Delphi
SysUtils,
// Project
CS.ActiveText.Parsers.Credits,
CS.ActiveText.Parsers.PlainText,
CS.ActiveText.Parsers.REML,
CS.ActiveText.Renderers.REML,
UREMLDataIO,
UStrUtils;
{ TActiveTextHelper }
class function TActiveTextHelper.ParseCommentsAndCredits(const PrefixText,
CreditsMarkup, URL: string): IActiveText;
{Builds an active text object containing some plain followed by active text
defined by markup in the "Credits" format.
@param PrefixText [in] PrefixText text. If not empty string this is added as
plain text before any credits markup.
@param CreditsMarkup [in] "Credits" markup. May contain a link indicated by
bracketed text. Both plain text and links can be generated. May be empty
string.
@param URL [in] URL to use in any link defined in CreditsMarkup.
@return Required active text object. Will be an empty object if both
PrefixText and CreditsMarkup are empty.
}
begin
// Create new empty active text object
Result := TActiveTextFactory.CreateActiveText;
if not StrIsBlank(PrefixText) then
// Add comments if present, enclosed in a paragraph block
Result.Append(
TActiveTextFactory.CreateActiveText(
StrMakeSentence(StrTrim(PrefixText)),
TActiveTextPlainTextParser.Create('', [])
).Normalise // Normalise ensures required paragraph block
);
if not StrIsBlank(CreditsMarkup) then
// Add credits if present, enclosed in a paragraph block
Result.Append(
TActiveTextFactory.CreateActiveText(
StrMakeSentence(StrTrim(CreditsMarkup)),
TActiveTextCreditsParser.Create(URL)
).Normalise // Normalise ensures required paragraph block
);
end;
class function TActiveTextHelper.ParsePlainText(Text: string): IActiveText;
begin
Result := TActiveTextFactory.CreateActiveText(
Text,
TActiveTextPlainTextParser.Create('', [])
).Normalise;
end;
class function TActiveTextHelper.ParseREML(const REML: string): IActiveText;
{Builds an active text object from a string containing markup in REML format.
@param REML [in] REML markup language that defines active text.
@return Required active text object. Will be an empty object if REML is
empty string.
}
var
ActiveText: IActiveText; // receives active text built from REML
begin
if REML = '' then
Exit(TActiveTextFactory.CreateActiveText);
// Create active text by parsing REML
ActiveText := TActiveTextFactory.CreateActiveText(
REML, TActiveTextREMLParser.Create
);
Result := ActiveText.Normalise;
end;
end.
Want the latest updates on software, tech news, and AI?
Get latest updates about software, tech news, and AI from SourceForge directly in your inbox once a month.