(librunview) URL highlighting
This commit is contained in:
parent
e760818007
commit
bc55617f81
|
@ -17,6 +17,11 @@ RunView::RunView(const char* name)
|
||||||
|
|
||||||
text_run run = { 0, BFont(), ui_color(B_PANEL_TEXT_COLOR) };
|
text_run run = { 0, BFont(), ui_color(B_PANEL_TEXT_COLOR) };
|
||||||
fDefaultRun = { 1, {run} };
|
fDefaultRun = { 1, {run} };
|
||||||
|
|
||||||
|
BFont urlFont;
|
||||||
|
urlFont.SetFace(B_UNDERSCORE_FACE);
|
||||||
|
text_run urlRun = { 0, urlFont, ui_color(B_LINK_TEXT_COLOR) };
|
||||||
|
fUrlRun = { 1, {urlRun} };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -42,3 +47,41 @@ RunView::Append(const char* text)
|
||||||
Insert(text, &fDefaultRun);
|
Insert(text, &fDefaultRun);
|
||||||
fLastStyled = false;
|
fLastStyled = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
RunView::Insert(const char* text, const text_run_array* runs)
|
||||||
|
{
|
||||||
|
BString buf(text);
|
||||||
|
|
||||||
|
int32 urlOffset = 0;
|
||||||
|
int32 lastEnd = 0;
|
||||||
|
while (lastEnd < buf.CountChars() && urlOffset != B_ERROR)
|
||||||
|
{
|
||||||
|
urlOffset = buf.FindFirst("://", lastEnd);
|
||||||
|
|
||||||
|
int32 urlStart = buf.FindLast(" ", urlOffset) + 1;
|
||||||
|
int32 urlEnd = buf.FindFirst(" ", urlOffset);
|
||||||
|
if (urlStart == B_ERROR || urlOffset == B_ERROR)
|
||||||
|
urlStart = lastEnd;
|
||||||
|
if (urlEnd == B_ERROR || urlOffset == B_ERROR)
|
||||||
|
urlEnd = buf.CountChars();
|
||||||
|
|
||||||
|
BString url;
|
||||||
|
BString nonurl;
|
||||||
|
if (urlOffset == B_ERROR)
|
||||||
|
buf.CopyCharsInto(nonurl, urlStart, urlEnd - urlStart);
|
||||||
|
else {
|
||||||
|
buf.CopyCharsInto(nonurl, lastEnd, urlStart - lastEnd);
|
||||||
|
buf.CopyCharsInto(url, urlStart, urlEnd - urlStart);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Actually insert the text
|
||||||
|
if (nonurl.IsEmpty() == false)
|
||||||
|
BTextView::Insert(nonurl.String(), runs);
|
||||||
|
if (url.IsEmpty() == false)
|
||||||
|
BTextView::Insert(url.String(), &fUrlRun);
|
||||||
|
|
||||||
|
lastEnd = urlEnd;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -12,13 +12,17 @@ class RunView : public BTextView {
|
||||||
public:
|
public:
|
||||||
RunView(const char* name);
|
RunView(const char* name);
|
||||||
|
|
||||||
void Append(const char* text, rgb_color color,
|
void Append(const char* text, rgb_color color,
|
||||||
uint16 fontFace = B_REGULAR_FACE);
|
uint16 fontFace = B_REGULAR_FACE);
|
||||||
void Append(const char* text);
|
void Append(const char* text);
|
||||||
|
|
||||||
|
// Only differs in that it changes font face and color of any URLs
|
||||||
|
virtual void Insert(const char* text, const text_run_array* runs = NULL);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool fLastStyled;
|
bool fLastStyled;
|
||||||
text_run_array fDefaultRun;
|
text_run_array fDefaultRun;
|
||||||
|
text_run_array fUrlRun;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // _RUN_VIEW_H
|
#endif // _RUN_VIEW_H
|
||||||
|
|
Ŝarĝante…
Reference in New Issue