Menu

[r3864]: / branches / parsnip / Src / USnippetExtraHelper.pas  Maximize  Restore  History

Download this file

148 lines (127 with data), 4.8 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
145
146
{
* 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 a snippet's extra property as
* active text and vice versa.
}
unit USnippetExtraHelper;
interface
uses
// Project
ActiveText.UMain,
UBaseObjects,
UIStringList;
type
{
TSnippetExtraHelper:
Class that helps with the parsing of a snippet's Extra property as active
text and vice versa.
}
TSnippetExtraHelper = class(TNoConstructObject)
public
class function BuildActiveText(const PrefixText, CreditsMarkup,
URL: string): IActiveText; overload;
{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.
}
class function BuildActiveText(const REML: string): IActiveText; overload;
{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.
}
/// <summary>Converts given plain text into an active text paragraph.
/// </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 PlainTextToActiveText(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;
{ TSnippetExtraHelper }
class function TSnippetExtraHelper.BuildActiveText(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 TSnippetExtraHelper.BuildActiveText(
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;
class function TSnippetExtraHelper.PlainTextToActiveText(
Text: string): IActiveText;
begin
Result := TActiveTextFactory.CreateActiveText(
Text,
TActiveTextPlainTextParser.Create('', [])
).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.