File indexing completed on 2024-06-09 04:53:08
0001 /* 0002 SPDX-FileCopyrightText: 2007-2009 Sergio Pistone <sergio_pistone@yahoo.com.ar> 0003 SPDX-FileCopyrightText: 2010-2022 Mladen Milinkovic <max@smoothware.net> 0004 0005 SPDX-License-Identifier: GPL-2.0-or-later 0006 */ 0007 0008 #include "scripting_richstring.h" 0009 #include "scripting_list.h" 0010 0011 #include <QRegularExpression> 0012 0013 using namespace SubtitleComposer; 0014 0015 Scripting::RichString::RichString(const SubtitleComposer::RichString &backend, QObject *parent) : 0016 QObject(parent), 0017 m_backend(backend) 0018 {} 0019 0020 bool 0021 Scripting::RichString::isEmpty() const 0022 { 0023 return m_backend.isEmpty(); 0024 } 0025 0026 int 0027 Scripting::RichString::length() const 0028 { 0029 return m_backend.length(); 0030 } 0031 0032 int 0033 Scripting::RichString::count() const 0034 { 0035 return m_backend.length(); 0036 } 0037 0038 int 0039 Scripting::RichString::size() const 0040 { 0041 return m_backend.length(); 0042 } 0043 0044 QString 0045 Scripting::RichString::plainText() const 0046 { 0047 return m_backend.string(); 0048 } 0049 0050 void 0051 Scripting::RichString::setPlainText(const QString &string, int styleFlags) 0052 { 0053 m_backend.setString(string, styleFlags); 0054 } 0055 0056 QString 0057 Scripting::RichString::richText() const 0058 { 0059 return m_backend.richString(); 0060 } 0061 0062 void 0063 Scripting::RichString::setRichText(const QString &string) 0064 { 0065 m_backend.setRichString(string); 0066 } 0067 0068 const QChar 0069 Scripting::RichString::charAt(int index) 0070 { 0071 if(index < 0 || index >= m_backend.size()) 0072 return '\0'; 0073 return m_backend.at(index); 0074 } 0075 0076 void 0077 Scripting::RichString::setCharAt(int index, const QChar &chr) 0078 { 0079 if(index >= 0 && index < m_backend.size()) 0080 m_backend[index] = chr; 0081 } 0082 0083 int 0084 Scripting::RichString::styleFlagsAt(int index) const 0085 { 0086 if(index < 0 || index >= m_backend.size()) 0087 return 0; 0088 return m_backend.styleFlagsAt(index); 0089 } 0090 0091 void 0092 Scripting::RichString::setStyleFlagsAt(int index, int styleFlags) const 0093 { 0094 if(index >= 0 && index < m_backend.size()) 0095 m_backend.setStyleFlagsAt(index, styleFlags); 0096 } 0097 0098 int 0099 Scripting::RichString::cummulativeStyleFlags() const 0100 { 0101 return m_backend.cummulativeStyleFlags(); 0102 } 0103 0104 bool 0105 Scripting::RichString::hasStyleFlags(int styleFlags) const 0106 { 0107 return m_backend.hasStyleFlags(styleFlags); 0108 } 0109 0110 void 0111 Scripting::RichString::setStyleFlags(int index, int len, int styleFlags) 0112 { 0113 if(index < 0 || index >= m_backend.size()) 0114 return; 0115 m_backend.setStyleFlags(index, len, styleFlags); 0116 } 0117 0118 void 0119 Scripting::RichString::setStyleFlags(int index, int len, int styleFlags, bool on) 0120 { 0121 if(index < 0 || index >= m_backend.size()) 0122 return; 0123 m_backend.setStyleFlags(index, len, styleFlags, on); 0124 } 0125 0126 void 0127 Scripting::RichString::clear() 0128 { 0129 m_backend.clear(); 0130 } 0131 0132 void 0133 Scripting::RichString::truncate(int size) 0134 { 0135 if(size >= 0) 0136 m_backend.truncate(size); 0137 } 0138 0139 QObject * 0140 Scripting::RichString::insert(int index, QObject *object) 0141 { 0142 if(index >= 0 && index <= m_backend.size()) { 0143 if(const Scripting::RichString * str = qobject_cast<const Scripting::RichString *>(object)) 0144 m_backend.insert(index, str->m_backend); 0145 } 0146 return this; 0147 } 0148 0149 QObject * 0150 Scripting::RichString::insertPlain(int index, const QString &str) 0151 { 0152 if(index >= 0 && index <= m_backend.size()) 0153 m_backend.insert(index, str); 0154 return this; 0155 } 0156 0157 QObject * 0158 Scripting::RichString::append(QObject *object) 0159 { 0160 if(const Scripting::RichString * str = qobject_cast<const Scripting::RichString *>(object)) 0161 m_backend.append(str->m_backend); 0162 return this; 0163 } 0164 0165 QObject * 0166 Scripting::RichString::appendPlain(const QString &str) 0167 { 0168 m_backend.append(str); 0169 return this; 0170 } 0171 0172 QObject * 0173 Scripting::RichString::prepend(QObject *object) 0174 { 0175 if(const Scripting::RichString * str = qobject_cast<const Scripting::RichString *>(object)) 0176 m_backend.prepend(str->m_backend); 0177 return this; 0178 } 0179 0180 QObject * 0181 Scripting::RichString::prependPlain(const QString &str) 0182 { 0183 m_backend.prepend(str); 0184 return this; 0185 } 0186 0187 QObject * 0188 Scripting::RichString::remove(int index, int len) 0189 { 0190 if(index >= 0 && index < m_backend.size()) 0191 m_backend.remove(index, len); 0192 return this; 0193 } 0194 0195 QObject * 0196 Scripting::RichString::removeAll(const QString &str, bool regExp, bool caseSensitive) 0197 { 0198 if(regExp) 0199 m_backend.remove(QRegularExpression(str, caseSensitive ? QRegularExpression::NoPatternOption : QRegularExpression::CaseInsensitiveOption)); 0200 else 0201 m_backend.remove(str, caseSensitive ? Qt::CaseSensitive : Qt::CaseInsensitive); 0202 return this; 0203 } 0204 0205 QObject * 0206 Scripting::RichString::replace(int index, int len, QObject *object) 0207 { 0208 if(const Scripting::RichString * replacement = qobject_cast<const Scripting::RichString *>(object)) { 0209 if(index >= 0 && index < m_backend.size()) 0210 m_backend.replace(index, len, replacement->m_backend); 0211 } 0212 return this; 0213 } 0214 0215 QObject * 0216 Scripting::RichString::replacePlain(int index, int len, const QString &replacement) 0217 { 0218 if(index >= 0 && index < m_backend.size()) 0219 m_backend.replace(index, len, replacement); 0220 return this; 0221 } 0222 0223 QObject * 0224 Scripting::RichString::replaceAll(const QString &before, QObject *object, bool regExp, bool caseSensitive) 0225 { 0226 if(const Scripting::RichString * after = qobject_cast<const Scripting::RichString *>(object)) { 0227 if(regExp) 0228 m_backend.replace(QRegularExpression(before, caseSensitive ? QRegularExpression::NoPatternOption : QRegularExpression::CaseInsensitiveOption), after->m_backend); 0229 else 0230 m_backend.replace(before, after->m_backend, caseSensitive ? Qt::CaseSensitive : Qt::CaseInsensitive); 0231 } 0232 return this; 0233 } 0234 0235 QObject * 0236 Scripting::RichString::replaceAllPlain(const QString &before, const QString &after, bool regExp, bool caseSensitive) 0237 { 0238 if(regExp) 0239 m_backend.replace(QRegularExpression(before, caseSensitive ? QRegularExpression::NoPatternOption : QRegularExpression::CaseInsensitiveOption), after); 0240 else 0241 m_backend.replace(before, after, caseSensitive ? Qt::CaseSensitive : Qt::CaseInsensitive); 0242 return this; 0243 } 0244 0245 Scripting::List * 0246 Scripting::RichString::split(const QString &sep, bool regExp, bool caseSensitive) const 0247 { 0248 RichStringList tokens; 0249 if(regExp) 0250 tokens = m_backend.split(QRegularExpression(sep, caseSensitive ? QRegularExpression::NoPatternOption : QRegularExpression::CaseInsensitiveOption), Qt::KeepEmptyParts); 0251 else 0252 tokens = m_backend.split(sep, Qt::KeepEmptyParts, caseSensitive ? Qt::CaseSensitive : Qt::CaseInsensitive); 0253 0254 Scripting::RichString *parent = const_cast<Scripting::RichString *>(this); 0255 0256 QList<QObject *> list; 0257 for(RichStringList::ConstIterator it = tokens.constBegin(), end = tokens.constEnd(); it != end; ++it) 0258 list.append(new Scripting::RichString(*it, parent)); 0259 0260 return new Scripting::List(list, Scripting::RichString::staticMetaObject.className(), parent); 0261 } 0262 0263 QObject * 0264 Scripting::RichString::left(int len) const 0265 { 0266 return new RichString(m_backend.left(len), const_cast<Scripting::RichString *>(this)); 0267 } 0268 0269 QObject * 0270 Scripting::RichString::right(int len) const 0271 { 0272 return new RichString(m_backend.right(len), const_cast<Scripting::RichString *>(this)); 0273 } 0274 0275 QObject * 0276 Scripting::RichString::mid(int index, int len) const 0277 { 0278 if(index < 0 || index >= m_backend.size()) 0279 return new RichString(SubtitleComposer::RichString(), const_cast<Scripting::RichString *>(this)); 0280 return new RichString(m_backend.mid(index, len), const_cast<Scripting::RichString *>(this)); 0281 } 0282 0283 QObject * 0284 Scripting::RichString::toLower() const 0285 { 0286 return new RichString(m_backend.toLower(), const_cast<Scripting::RichString *>(this)); 0287 } 0288 0289 QObject * 0290 Scripting::RichString::toUpper() const 0291 { 0292 return new RichString(m_backend.toUpper(), const_cast<Scripting::RichString *>(this)); 0293 } 0294 0295 QObject * 0296 Scripting::RichString::simplified() const 0297 { 0298 return new RichString(m_backend.simplified(), const_cast<Scripting::RichString *>(this)); 0299 } 0300 0301 QObject * 0302 Scripting::RichString::trimmed() const 0303 { 0304 return new RichString(m_backend.trimmed(), const_cast<Scripting::RichString *>(this)); 0305 } 0306 0307 int 0308 Scripting::RichString::compareTo(QObject *object) const 0309 { 0310 const Scripting::RichString *string = qobject_cast<const Scripting::RichString *>(object); 0311 if(!string) 0312 return -2; 0313 0314 if(m_backend < string->m_backend) 0315 return -1; 0316 else if(m_backend == string->m_backend) 0317 return 0; 0318 else 0319 return 1; 0320 } 0321 0322 int 0323 Scripting::RichString::compareToPlain(const QString &string) const 0324 { 0325 if(static_cast<const QString &>(m_backend) < string) 0326 return -1; 0327 else if(static_cast<const QString &>(m_backend) == string) 0328 return 0; 0329 else 0330 return 1; 0331 } 0332 0333