summaryrefslogtreecommitdiff
path: root/indra/llui
diff options
context:
space:
mode:
Diffstat (limited to 'indra/llui')
-rwxr-xr-xindra/llui/llkeywords.cpp147
-rwxr-xr-xindra/llui/llkeywords.h28
-rwxr-xr-xindra/llui/lltexteditor.cpp77
-rwxr-xr-xindra/llui/lltexteditor.h7
4 files changed, 65 insertions, 194 deletions
diff --git a/indra/llui/llkeywords.cpp b/indra/llui/llkeywords.cpp
index 2d8bd926c0..9c5a339b6d 100755
--- a/indra/llui/llkeywords.cpp
+++ b/indra/llui/llkeywords.cpp
@@ -67,8 +67,8 @@ inline bool LLKeywordToken::isTail(const llwchar* s) const
return res;
}
-LLKeywords::LLKeywords() :
- mLoaded(false)
+LLKeywords::LLKeywords()
+: mLoaded(false)
{
}
@@ -82,12 +82,6 @@ LLKeywords::~LLKeywords()
mDelimiterTokenList.clear();
}
-void LLKeywords::addColorGroup(const std::string& key_in, const LLColor4& color)
-{
- WStringMapIndex key ( utf8str_to_wstring(key_in) );
- mColorGroupMap[key] = color;
-}
-
// Add the token as described
void LLKeywords::addToken(LLKeywordToken::ETokenType type,
const std::string& key_in,
@@ -98,7 +92,7 @@ void LLKeywords::addToken(LLKeywordToken::ETokenType type,
std::string tip_text = tool_tip_in;
LLStringUtil::replaceString(tip_text, "\\n", "\n" );
LLStringUtil::replaceString(tip_text, "\t", " " );
- if (tip_text == "")
+ if (tip_text.empty())
{
tip_text = "[no info]";
}
@@ -167,7 +161,7 @@ std::string LLKeywords::getArguments(LLSD& arguments)
{
LL_WARNS("SyntaxLSL") << "Not an array! Invalid arguments LLSD passed to function." << arguments << LL_ENDL;
}
- return argString == "" ? "" : argString;
+ return argString;
}
std::string LLKeywords::getAttribute(const std::string& key)
@@ -178,30 +172,14 @@ std::string LLKeywords::getAttribute(const std::string& key)
LLColor4 LLKeywords::getColorGroup(const std::string& key_in)
{
- std::string color_group = "Black";
- if (key_in == "constants-float")
- {
- color_group = "SyntaxLslConstantFloat";
- }
- else if (key_in == "constants-integer")
- {
- color_group = "SyntaxLslConstantInteger";
- }
- else if (key_in == "constants-key")
- {
- color_group = "SyntaxLslConstantKey";
- }
- else if (key_in == "constants-rotation")
+ std::string color_group = "ScriptText";
+ if (key_in == "constants")
{
- color_group = "SyntaxLslConstantRotation";
+ color_group = "SyntaxLslConstant";
}
- else if (key_in == "constants-string")
+ else if (key_in == "controls")
{
- color_group = "SyntaxLslConstantString";
- }
- else if (key_in == "constants-vector")
- {
- color_group = "SyntaxLslConstantVector";
+ color_group = "SyntaxLslControlFlow";
}
else if (key_in == "misc-flow-label")
{
@@ -231,21 +209,9 @@ LLColor4 LLKeywords::getColorGroup(const std::string& key_in)
{
color_group = "SyntaxLslSection";
}
- else if (key_in == "misc-double_quotation_marks")
- {
- color_group = "SyntaxLslStringLiteral";
- }
- else if (key_in == "misc-comments_1_sided")
- {
- color_group = "SyntaxLslComment1Sided";
- }
- else if (key_in == "misc-comments_2_sided")
- {
- color_group = "SyntaxLslComment2Sided";
- }
else
{
- LL_WARNS("SyntaxLSL") << "Color key '" << key_in << "' not recognized!" << LL_ENDL;
+ LL_WARNS("SyntaxLSL") << "Color key '" << key_in << "' not recognized." << LL_ENDL;
}
return LLUIColorTable::instance().getColor(color_group);
@@ -267,9 +233,9 @@ void LLKeywords::processTokens()
// Add 'standard' stuff: Quotes, Comments, Strings, Labels, etc. before processing the LLSD
std::string delimiter;
addToken(LLKeywordToken::TT_LABEL, "@", getColorGroup("misc-flow-label"), "Label\nTarget for jump statement", delimiter );
- addToken(LLKeywordToken::TT_ONE_SIDED_DELIMITER, "//", getColorGroup("misc-comments_1_sided"), "Comment (single-line)\nNon-functional commentary or disabled code", delimiter );
- addToken(LLKeywordToken::TT_TWO_SIDED_DELIMITER, "/*", getColorGroup("misc-comments_2_sided"), "Comment (multi-line)\nNon-functional commentary or disabled code", "*/" );
- addToken(LLKeywordToken::TT_DOUBLE_QUOTATION_MARKS, "\"", getColorGroup("misc-double_quotation_marks"), "String literal", "\"" );
+ addToken(LLKeywordToken::TT_ONE_SIDED_DELIMITER, "//", LLUIColorTable::instance().getColor("SyntaxLslComment"), "Comment (single-line)\nNon-functional commentary or disabled code", delimiter );
+ addToken(LLKeywordToken::TT_TWO_SIDED_DELIMITER, "/*", LLUIColorTable::instance().getColor("SyntaxLslComment"), "Comment (multi-line)\nNon-functional commentary or disabled code", "*/" );
+ addToken(LLKeywordToken::TT_DOUBLE_QUOTATION_MARKS, "\"", LLUIColorTable::instance().getColor("SyntaxLslStringLiteral"), "String literal", "\"" );
LLSD::map_iterator itr = mSyntax.beginMap();
for ( ; itr != mSyntax.endMap(); ++itr)
@@ -333,14 +299,14 @@ void LLKeywords::processTokensGroup(const LLSD& tokens, const std::string& group
if (tokens.isMap())
{
LLSD::map_const_iterator outer_itr = tokens.beginMap();
- for ( ; outer_itr != tokens.endMap(); ++outer_itr)
+ for ( ; outer_itr != tokens.endMap(); ++outer_itr )
{
if (outer_itr->second.isMap())
{
mAttributes.clear();
LLSD arguments = LLSD();
LLSD::map_const_iterator inner_itr = outer_itr->second.beginMap();
- for ( ; inner_itr != outer_itr->second.endMap(); ++inner_itr)
+ for ( ; inner_itr != outer_itr->second.endMap(); ++inner_itr )
{
if (inner_itr->first == "arguments")
{
@@ -360,33 +326,34 @@ void LLKeywords::processTokensGroup(const LLSD& tokens, const std::string& group
}
std::string tooltip = "";
- if (token_type == LLKeywordToken::TT_CONSTANT)
+ switch (token_type)
{
- color_group = getColorGroup(group + "-" + getAttribute("type"));
- tooltip = "Type: " + getAttribute("type") + ", Value: " + getAttribute("value");
- }
- else if (token_type == LLKeywordToken::TT_EVENT)
- {
- tooltip = outer_itr->first + "(" + getArguments(arguments) + ")";
- }
- else if (token_type == LLKeywordToken::TT_FUNCTION)
- {
- tooltip = getAttribute("return") + " " + outer_itr->first + "(" + getArguments(arguments) + ");";
- tooltip += "\nEnergy: ";
- tooltip += getAttribute("energy") == "" ? "0.0" : getAttribute("energy");
- if (getAttribute("sleep") != "")
- {
- tooltip += ", Sleep: " + getAttribute("sleep");
- }
+ case LLKeywordToken::TT_CONSTANT:
+ color_group = getColorGroup(group + "-" + getAttribute("type"));
+ tooltip = "Type: " + getAttribute("type") + ", Value: " + getAttribute("value");
+ break;
+ case LLKeywordToken::TT_EVENT:
+ tooltip = outer_itr->first + "(" + getArguments(arguments) + ")";
+ break;
+ case LLKeywordToken::TT_FUNCTION:
+ tooltip = getAttribute("return") + " " + outer_itr->first + "(" + getArguments(arguments) + ");";
+ tooltip.append("\nEnergy: ");
+ tooltip.append(getAttribute("energy").empty() ? "0.0" : getAttribute("energy"));
+ if (!getAttribute("sleep").empty())
+ {
+ tooltip += ", Sleep: " + getAttribute("sleep");
+ }
+ default:
+ break;
}
- if (getAttribute("tooltip") != "")
+ if (!getAttribute("tooltip").empty())
{
- if (tooltip != "")
+ if (!tooltip.empty())
{
- tooltip += "\n";
+ tooltip.append("\n");
}
- tooltip += getAttribute("tooltip");
+ tooltip.append(getAttribute("tooltip"));
}
color = getAttribute("deprecated") == "true" ? color_deprecated : color_group;
@@ -403,7 +370,7 @@ void LLKeywords::processTokensGroup(const LLSD& tokens, const std::string& group
else if (tokens.isArray()) // Currently nothing should need this, but it's here for completeness
{
LL_INFOS("SyntaxLSL") << "Curious, shouldn't be an array here; adding all using color " << color << LL_ENDL;
- for (int count = 0; count < tokens.size(); ++count)
+ for (S32 count = 0; count < tokens.size(); ++count)
{
addToken(token_type, tokens[count], color, "");
}
@@ -433,15 +400,19 @@ LLKeywords::WStringMapIndex::WStringMapIndex(const LLWString& str)
copyData(str.data(), str.size());
}
-LLKeywords::WStringMapIndex::WStringMapIndex(const llwchar *start, size_t length):
-mData(start), mLength(length), mOwner(false)
+LLKeywords::WStringMapIndex::WStringMapIndex(const llwchar *start, size_t length)
+: mData(start)
+, mLength(length)
+, mOwner(false)
{
}
LLKeywords::WStringMapIndex::~WStringMapIndex()
{
- if(mOwner)
+ if (mOwner)
+ {
delete[] mData;
+ }
}
void LLKeywords::WStringMapIndex::copyData(const llwchar *start, size_t length)
@@ -495,34 +466,6 @@ bool LLKeywords::WStringMapIndex::operator<(const LLKeywords::WStringMapIndex &o
return result;
}
-LLColor4 LLKeywords::readColor( const std::string& s )
-{
- F32 r, g, b;
- r = g = b = 0.0f;
- S32 values_read = sscanf(s.c_str(), "%f, %f, %f]", &r, &g, &b );
- if( values_read != 3 )
- {
- llinfos << " poorly formed color in keyword file" << llendl;
- }
- return LLColor4( r, g, b, 1.f);
-}
-
-LLColor4 LLKeywords::readColor(LLSD& sd)
-{
- if (sd.isArray())
- {
- return LLColor4(sd, 1.f);
- }
- else if (sd.isMap())
- {
- return LLColor4( sd.get("x").asReal(), sd.get("y").asReal(), sd.get("z").asReal(), 1.f );
- }
- else
- {
- return LLColor4::black;
- }
-}
-
LLTrace::BlockTimerStatHandle FTM_SYNTAX_COLORING("Syntax Coloring");
// Walk through a string, applying the rules specified by the keyword token list and
diff --git a/indra/llui/llkeywords.h b/indra/llui/llkeywords.h
index eecb327fee..18e2ed06c5 100755
--- a/indra/llui/llkeywords.h
+++ b/indra/llui/llkeywords.h
@@ -109,12 +109,14 @@ public:
LLKeywords();
~LLKeywords();
- void addColorGroup(const std::string& key_in, const LLColor4& color);
void clearLoaded() { mLoaded = false; }
LLColor4 getColorGroup(const std::string& key_in);
bool isLoaded() const { return mLoaded; }
- void findSegments(std::vector<LLTextSegmentPtr> *seg_list, const LLWString& text, const LLColor4 &defaultColor, class LLTextEditor& editor );
+ void findSegments(std::vector<LLTextSegmentPtr> *seg_list,
+ const LLWString& text,
+ const LLColor4 &defaultColor,
+ class LLTextEditor& editor);
void initialize(LLSD SyntaxXML);
void processTokens();
@@ -168,12 +170,20 @@ public:
protected:
void processTokensGroup(const LLSD& Tokens, const std::string& Group);
- LLColor4 readColor(const std::string& s);
- LLColor4 readColor(LLSD& sd);
- void insertSegment(std::vector<LLTextSegmentPtr>& seg_list, LLTextSegmentPtr new_segment, S32 text_len, const LLColor4 &defaultColor, class LLTextEditor& editor);
- void insertSegments(const LLWString& wtext, std::vector<LLTextSegmentPtr>& seg_list, LLKeywordToken* token, S32 text_len, S32 seg_start, S32 seg_end, const LLColor4 &defaultColor, LLTextEditor& editor);
+ void insertSegment(std::vector<LLTextSegmentPtr>& seg_list,
+ LLTextSegmentPtr new_segment,
+ S32 text_len,
+ const LLColor4 &defaultColor,
+ class LLTextEditor& editor);
+ void insertSegments(const LLWString& wtext,
+ std::vector<LLTextSegmentPtr>& seg_list,
+ LLKeywordToken* token,
+ S32 text_len,
+ S32 seg_start,
+ S32 seg_end,
+ const LLColor4 &defaultColor,
+ LLTextEditor& editor);
- LLSD mColors;
bool mLoaded;
LLSD mSyntax;
word_token_map_t mWordTokenMap;
@@ -186,9 +196,7 @@ protected:
element_attributes_t mAttributes;
std::string getAttribute(const std::string& key);
- std::string getArguments(LLSD& args);
-
-private:
+ std::string getArguments(LLSD& arguments);
};
#endif // LL_LLKEYWORDS_H
diff --git a/indra/llui/lltexteditor.cpp b/indra/llui/lltexteditor.cpp
index a212c5dcd9..686fb80817 100755
--- a/indra/llui/lltexteditor.cpp
+++ b/indra/llui/lltexteditor.cpp
@@ -75,8 +75,6 @@ template class LLTextEditor* LLView::getChild<class LLTextEditor>(
//
// Constants
//
-const S32 UI_TEXTEDITOR_LINE_NUMBER_MARGIN = 32;
-const S32 UI_TEXTEDITOR_LINE_NUMBER_DIGITS = 4;
const S32 SPACES_PER_TAB = 4;
const F32 SPELLCHECK_DELAY = 0.5f; // delay between the last keypress and spell checking the word the cursor is on
@@ -236,7 +234,6 @@ LLTextEditor::Params::Params()
prevalidate_callback("prevalidate_callback"),
embedded_items("embedded_items", false),
ignore_tab("ignore_tab", true),
- show_line_numbers("show_line_numbers", false),
auto_indent("auto_indent", true),
default_color("default_color"),
commit_on_focus_lost("commit_on_focus_lost", false),
@@ -252,8 +249,7 @@ LLTextEditor::LLTextEditor(const LLTextEditor::Params& p) :
mBaseDocIsPristine(TRUE),
mPristineCmd( NULL ),
mLastCmd( NULL ),
- mDefaultColor( p.default_color() ),
- mShowLineNumbers ( p.show_line_numbers ),
+ mDefaultColor( p.default_color() ),
mAutoIndent(p.auto_indent),
mCommitOnFocusLost( p.commit_on_focus_lost),
mAllowEmbeddedItems( p.embedded_items ),
@@ -277,14 +273,7 @@ LLTextEditor::LLTextEditor(const LLTextEditor::Params& p) :
params.visible = p.border_visible;
mBorder = LLUICtrlFactory::create<LLViewBorder> (params);
addChild( mBorder );
-
setText(p.default_text());
-
- if (mShowLineNumbers)
- {
- mHPad += UI_TEXTEDITOR_LINE_NUMBER_MARGIN;
- updateRects();
- }
mParseOnTheFly = TRUE;
}
@@ -2196,69 +2185,6 @@ void LLTextEditor::drawPreeditMarker()
}
}
-
-void LLTextEditor::drawLineNumbers()
-{
- LLGLSUIDefault gls_ui;
- LLRect scrolled_view_rect = getVisibleDocumentRect();
- LLRect content_rect = getVisibleTextRect();
- LLLocalClipRect clip(content_rect);
- S32 first_line = getFirstVisibleLine();
- S32 num_lines = getLineCount();
- if (first_line >= num_lines)
- {
- return;
- }
-
- S32 cursor_line = mLineInfoList[getLineNumFromDocIndex(mCursorPos)].mLineNum;
-
- if (mShowLineNumbers)
- {
- S32 left = 0;
- S32 top = getRect().getHeight();
- S32 bottom = 0;
-
- gl_rect_2d(left, top, UI_TEXTEDITOR_LINE_NUMBER_MARGIN, bottom, mReadOnlyBgColor.get() ); // line number area always read-only
- gl_rect_2d(UI_TEXTEDITOR_LINE_NUMBER_MARGIN, top, UI_TEXTEDITOR_LINE_NUMBER_MARGIN-1, bottom, LLColor4::grey3); // separator
-
- S32 last_line_num = -1;
-
- for (S32 cur_line = first_line; cur_line < num_lines; cur_line++)
- {
- line_info& line = mLineInfoList[cur_line];
-
- if ((line.mRect.mTop - scrolled_view_rect.mBottom) < mVisibleTextRect.mBottom)
- {
- break;
- }
-
- S32 line_bottom = line.mRect.mBottom - scrolled_view_rect.mBottom + mVisibleTextRect.mBottom;
- // draw the line numbers
- if(line.mLineNum != last_line_num && line.mRect.mTop <= scrolled_view_rect.mTop)
- {
- const LLFontGL *num_font = LLFontGL::getFontMonospace();
- const LLWString ltext = utf8str_to_wstring(llformat("%d", line.mLineNum ));
- BOOL is_cur_line = cursor_line == line.mLineNum;
- const U8 style = is_cur_line ? LLFontGL::BOLD : LLFontGL::NORMAL;
- const LLColor4 fg_color = is_cur_line ? mCursorColor : mReadOnlyFgColor;
- num_font->render(
- ltext, // string to draw
- 0, // begin offset
- UI_TEXTEDITOR_LINE_NUMBER_MARGIN - 2, // x
- line_bottom, // y
- fg_color,
- LLFontGL::RIGHT, // horizontal alignment
- LLFontGL::BOTTOM, // vertical alignment
- style,
- LLFontGL::NO_SHADOW,
- S32_MAX, // max chars
- UI_TEXTEDITOR_LINE_NUMBER_MARGIN - 2); // max pixels
- last_line_num = line.mLineNum;
- }
- }
- }
-}
-
void LLTextEditor::draw()
{
{
@@ -2270,7 +2196,6 @@ void LLTextEditor::draw()
}
LLTextBase::draw();
- drawLineNumbers();
drawPreeditMarker();
diff --git a/indra/llui/lltexteditor.h b/indra/llui/lltexteditor.h
index 404275026c..2408613824 100755
--- a/indra/llui/lltexteditor.h
+++ b/indra/llui/lltexteditor.h
@@ -58,7 +58,6 @@ public:
Optional<bool> embedded_items,
ignore_tab,
- show_line_numbers,
commit_on_focus_lost,
show_context_menu,
enable_tooltip_paste,
@@ -279,11 +278,11 @@ protected:
protected:
LLUIColor mDefaultColor;
- BOOL mShowLineNumbers;
bool mAutoIndent;
bool mParseOnTheFly;
void updateLinkSegments();
+ class LLViewBorder* mBorder;
private:
//
@@ -293,8 +292,6 @@ private:
void cleanStringForPaste(LLWString & clean_string);
void pasteTextWithLinebreaks(LLWString & clean_string);
- void drawLineNumbers();
-
void onKeyStroke();
// Concrete TextCmd sub-classes used by the LLTextEditor base class
@@ -303,8 +300,6 @@ private:
class TextCmdOverwriteChar;
class TextCmdRemove;
- class LLViewBorder* mBorder;
-
BOOL mBaseDocIsPristine;
TextCmd* mPristineCmd;