forked from qt-creator/qt-creator
Started mechanism to scan directory, find definition files, and register mime types.
This commit is contained in:
901
share/qtcreator/generic-highlighter/bash.xml
Normal file
901
share/qtcreator/generic-highlighter/bash.xml
Normal file
@@ -0,0 +1,901 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE language SYSTEM "language.dtd"
|
||||
[
|
||||
<!ENTITY funcname "[A-Za-z_:][A-Za-z0-9_:#%@-]*">
|
||||
<!ENTITY varname "[A-Za-z_][A-Za-z0-9_]*">
|
||||
<!ENTITY word "[^|&;()<>\s]+"> <!-- see man bash -->
|
||||
<!ENTITY eos "(?=($|\s))"> <!-- eol or space following -->
|
||||
<!ENTITY noword "(?![\w$+-])"> <!-- no word, $, + or - following -->
|
||||
<!ENTITY pathpart "([\w_@.%*?+-]|\\ )"> <!-- valid character in a file name -->
|
||||
]>
|
||||
<language name="Bash" version="2.12" kateversion="2.4" section="Scripts" extensions="*.sh;*.bash;*.ebuild;*.eclass;.bashrc;.bash_profile;.bash_login;.profile" mimetype="application/x-shellscript" casesensitive="1" author="Wilbert Berendsen (wilbert@kde.nl)" license="LGPL">
|
||||
|
||||
<!-- (c) 2004 by Wilbert Berendsen (wilbert@kde.nl)
|
||||
Changes by Matthew Woehlke (mw_triad@users.sourceforge.net)
|
||||
Changes by Sebastian Pipping (webmaster@hartwork.org)
|
||||
Released under the LGPL, part of kdelibs/kate -->
|
||||
|
||||
<highlighting>
|
||||
<list name="keywords">
|
||||
<item> else </item>
|
||||
<item> for </item>
|
||||
<item> function </item>
|
||||
<item> in </item>
|
||||
<item> select </item>
|
||||
<item> until </item>
|
||||
<item> while </item>
|
||||
<item> elif </item>
|
||||
<item> then </item>
|
||||
<item> set </item>
|
||||
</list>
|
||||
|
||||
<list name="builtins">
|
||||
<item> : </item>
|
||||
<item> source </item>
|
||||
<item> alias </item>
|
||||
<item> bg </item>
|
||||
<item> bind </item>
|
||||
<item> break </item>
|
||||
<item> builtin </item>
|
||||
<item> cd </item>
|
||||
<item> caller </item>
|
||||
<item> command </item>
|
||||
<item> compgen </item>
|
||||
<item> complete </item>
|
||||
<item> continue </item>
|
||||
<item> dirs </item>
|
||||
<item> disown </item>
|
||||
<item> echo </item>
|
||||
<item> enable </item>
|
||||
<item> eval </item>
|
||||
<item> exec </item>
|
||||
<item> exit </item>
|
||||
<item> fc </item>
|
||||
<item> fg </item>
|
||||
<item> getopts </item>
|
||||
<item> hash </item>
|
||||
<item> help </item>
|
||||
<item> history </item>
|
||||
<item> jobs </item>
|
||||
<item> kill </item>
|
||||
<item> let </item>
|
||||
<item> logout </item>
|
||||
<item> popd </item>
|
||||
<item> printf </item>
|
||||
<item> pushd </item>
|
||||
<item> pwd </item>
|
||||
<item> return </item>
|
||||
<item> set </item>
|
||||
<item> shift </item>
|
||||
<item> shopt </item>
|
||||
<item> suspend </item>
|
||||
<item> test </item>
|
||||
<item> time </item>
|
||||
<item> times </item>
|
||||
<item> trap </item>
|
||||
<item> type </item>
|
||||
<item> ulimit </item>
|
||||
<item> umask </item>
|
||||
<item> unalias </item>
|
||||
<item> wait </item>
|
||||
</list>
|
||||
|
||||
<list name="builtins_var">
|
||||
<item> export </item>
|
||||
<item> unset </item>
|
||||
<item> declare </item>
|
||||
<item> typeset </item>
|
||||
<item> local </item>
|
||||
<item> read </item>
|
||||
<item> readonly </item>
|
||||
</list>
|
||||
|
||||
<list name="unixcommands">
|
||||
<!-- /bin -->
|
||||
<item> arch </item>
|
||||
<item> awk </item>
|
||||
<item> bash </item>
|
||||
<item> bunzip2 </item>
|
||||
<item> bzcat </item>
|
||||
<item> bzcmp </item>
|
||||
<item> bzdiff </item>
|
||||
<item> bzegrep </item>
|
||||
<item> bzfgrep </item>
|
||||
<item> bzgrep </item>
|
||||
<item> bzip2 </item>
|
||||
<item> bzip2recover </item>
|
||||
<item> bzless </item>
|
||||
<item> bzmore </item>
|
||||
<item> cat </item>
|
||||
<item> chattr </item>
|
||||
<item> chgrp </item>
|
||||
<item> chmod </item>
|
||||
<item> chown </item>
|
||||
<item> chvt </item>
|
||||
<item> cp </item>
|
||||
<item> date </item>
|
||||
<item> dd </item>
|
||||
<item> deallocvt </item>
|
||||
<item> df </item>
|
||||
<item> dir </item>
|
||||
<item> dircolors </item>
|
||||
<item> dmesg </item>
|
||||
<item> dnsdomainname </item>
|
||||
<item> domainname </item>
|
||||
<item> du </item>
|
||||
<item> dumpkeys </item>
|
||||
<item> echo </item>
|
||||
<item> ed </item>
|
||||
<item> egrep </item>
|
||||
<item> false </item>
|
||||
<item> fgconsole </item>
|
||||
<item> fgrep </item>
|
||||
<item> fuser </item>
|
||||
<item> gawk </item>
|
||||
<item> getkeycodes </item>
|
||||
<item> gocr </item>
|
||||
<item> grep </item>
|
||||
<item> groff </item>
|
||||
<item> groups </item>
|
||||
<item> gunzip </item>
|
||||
<item> gzexe </item>
|
||||
<item> gzip </item>
|
||||
<item> hostname </item>
|
||||
<item> igawk </item>
|
||||
<item> install </item>
|
||||
<item> kbd_mode </item>
|
||||
<item> kbdrate </item>
|
||||
<item> killall </item>
|
||||
<item> last </item>
|
||||
<item> lastb </item>
|
||||
<item> link </item>
|
||||
<item> ln </item>
|
||||
<item> loadkeys </item>
|
||||
<item> loadunimap </item>
|
||||
<item> login </item>
|
||||
<item> ls </item>
|
||||
<item> lsattr </item>
|
||||
<item> lsmod </item>
|
||||
<item> lsmod.old </item>
|
||||
<item> lzcat </item>
|
||||
<item> lzcmp </item>
|
||||
<item> lzdiff </item>
|
||||
<item> lzegrep </item>
|
||||
<item> lzfgrep </item>
|
||||
<item> lzgrep </item>
|
||||
<item> lzless </item>
|
||||
<item> lzcat </item>
|
||||
<item> lzma </item>
|
||||
<item> lzmainfo </item>
|
||||
<item> lzmore </item>
|
||||
<item> mapscrn </item>
|
||||
<item> mesg </item>
|
||||
<item> mkdir </item>
|
||||
<item> mkfifo </item>
|
||||
<item> mknod </item>
|
||||
<item> mktemp </item>
|
||||
<item> more </item>
|
||||
<item> mount </item>
|
||||
<item> mv </item>
|
||||
<item> nano </item>
|
||||
<item> netstat </item>
|
||||
<item> nisdomainname </item>
|
||||
<item> nroff </item>
|
||||
<item> openvt </item>
|
||||
<item> pgawk </item>
|
||||
<item> pidof </item>
|
||||
<item> ping </item>
|
||||
<item> ps </item>
|
||||
<item> pstree </item>
|
||||
<item> pwd </item>
|
||||
<item> rbash </item>
|
||||
<item> readlink </item>
|
||||
<item> red </item>
|
||||
<item> resizecons </item>
|
||||
<item> rm </item>
|
||||
<item> rmdir </item>
|
||||
<item> run-parts </item>
|
||||
<item> sash </item>
|
||||
<item> sed </item>
|
||||
<item> setfont </item>
|
||||
<item> setkeycodes </item>
|
||||
<item> setleds </item>
|
||||
<item> setmetamode </item>
|
||||
<item> setserial </item>
|
||||
<item> sh </item>
|
||||
<item> showkey </item>
|
||||
<item> shred </item>
|
||||
<item> sleep </item>
|
||||
<item> ssed </item>
|
||||
<item> stat </item>
|
||||
<item> stty </item>
|
||||
<item> su </item>
|
||||
<item> sync </item>
|
||||
<item> tar </item>
|
||||
<item> tempfile </item>
|
||||
<item> touch </item>
|
||||
<item> troff </item>
|
||||
<item> true </item>
|
||||
<item> umount </item>
|
||||
<item> uname </item>
|
||||
<item> unicode_start </item>
|
||||
<item> unicode_stop </item>
|
||||
<item> unlink </item>
|
||||
<item> unlzma </item>
|
||||
<item> unxz </item>
|
||||
<item> utmpdump </item>
|
||||
<item> uuidgen </item>
|
||||
<item> vdir </item>
|
||||
<item> wall </item>
|
||||
<item> wc </item>
|
||||
<item> xz </item>
|
||||
<item> xzcat </item>
|
||||
<item> ypdomainname </item>
|
||||
<item> zcat </item>
|
||||
<item> zcmp </item>
|
||||
<item> zdiff </item>
|
||||
<item> zegrep </item>
|
||||
<item> zfgrep </item>
|
||||
<item> zforce </item>
|
||||
<item> zgrep </item>
|
||||
<item> zless </item>
|
||||
<item> zmore </item>
|
||||
<item> znew </item>
|
||||
<item> zsh </item>
|
||||
|
||||
<!-- some from /usr/bin -->
|
||||
<item> aclocal </item>
|
||||
<item> aconnect </item>
|
||||
<item> aplay </item>
|
||||
<item> apm </item>
|
||||
<item> apmsleep </item>
|
||||
<item> apropos </item>
|
||||
<item> ar </item>
|
||||
<item> arecord </item>
|
||||
<item> as </item>
|
||||
<item> as86 </item>
|
||||
<item> autoconf </item>
|
||||
<item> autoheader </item>
|
||||
<item> automake </item>
|
||||
<item> awk </item>
|
||||
<item> basename </item>
|
||||
<item> bc </item>
|
||||
<item> bison </item>
|
||||
<item> c++ </item>
|
||||
<item> cal </item>
|
||||
<item> cat </item>
|
||||
<item> cc </item>
|
||||
<item> cdda2wav </item>
|
||||
<item> cdparanoia </item>
|
||||
<item> cdrdao </item>
|
||||
<item> cd-read </item>
|
||||
<item> cdrecord </item>
|
||||
<item> chfn </item>
|
||||
<item> chgrp </item>
|
||||
<item> chmod </item>
|
||||
<item> chown </item>
|
||||
<item> chroot </item>
|
||||
<item> chsh </item>
|
||||
<item> clear </item>
|
||||
<item> cmp </item>
|
||||
<item> co </item>
|
||||
<item> col </item>
|
||||
<item> comm </item>
|
||||
<item> cp </item>
|
||||
<item> cpio </item>
|
||||
<item> cpp </item>
|
||||
<item> cut </item>
|
||||
<item> dc </item>
|
||||
<item> dd </item>
|
||||
<item> df </item>
|
||||
<item> diff </item>
|
||||
<item> diff3 </item>
|
||||
<item> dir </item>
|
||||
<item> dircolors </item>
|
||||
<item> directomatic </item>
|
||||
<item> dirname </item>
|
||||
<item> du </item>
|
||||
<item> env </item>
|
||||
<item> expr </item>
|
||||
<item> fbset </item>
|
||||
<item> file </item>
|
||||
<item> find </item>
|
||||
<item> flex </item>
|
||||
<item> flex++ </item>
|
||||
<item> fmt </item>
|
||||
<item> free </item>
|
||||
<item> ftp </item>
|
||||
<item> funzip </item>
|
||||
<item> fuser </item>
|
||||
<item> g++ </item>
|
||||
<item> gawk </item>
|
||||
<item> gc </item>
|
||||
<item> gcc </item>
|
||||
<item> gdb </item>
|
||||
<item> getent </item>
|
||||
<item> getopt </item>
|
||||
<item> gettext </item>
|
||||
<item> gettextize </item>
|
||||
<item> gimp </item>
|
||||
<item> gimp-remote </item>
|
||||
<item> gimptool </item>
|
||||
<item> gmake </item>
|
||||
<item> gs </item>
|
||||
<item> head </item>
|
||||
<item> hexdump </item>
|
||||
<item> id </item>
|
||||
<item> install </item>
|
||||
<item> join </item>
|
||||
<item> kill </item>
|
||||
<item> killall </item>
|
||||
<item> ld </item>
|
||||
<item> ld86 </item>
|
||||
<item> ldd </item>
|
||||
<item> less </item>
|
||||
<item> lex </item>
|
||||
<item> ln </item>
|
||||
<item> locate </item>
|
||||
<item> lockfile </item>
|
||||
<item> logname </item>
|
||||
<item> lp </item>
|
||||
<item> lpr </item>
|
||||
<item> ls </item>
|
||||
<item> lynx </item>
|
||||
<item> m4 </item>
|
||||
<item> make </item>
|
||||
<item> man </item>
|
||||
<item> mkdir </item>
|
||||
<item> mknod </item>
|
||||
<item> msgfmt </item>
|
||||
<item> mv </item>
|
||||
<item> namei </item>
|
||||
<item> nasm </item>
|
||||
<item> nawk </item>
|
||||
<item> nice </item>
|
||||
<item> nl </item>
|
||||
<item> nm </item>
|
||||
<item> nm86 </item>
|
||||
<item> nmap </item>
|
||||
<item> nohup </item>
|
||||
<item> nop </item>
|
||||
<item> od </item>
|
||||
<item> passwd </item>
|
||||
<item> patch </item>
|
||||
<item> pcregrep </item>
|
||||
<item> pcretest </item>
|
||||
<item> perl </item>
|
||||
<item> perror </item>
|
||||
<item> pidof </item>
|
||||
<item> pr </item>
|
||||
<item> printf </item>
|
||||
<item> procmail </item>
|
||||
<item> prune </item>
|
||||
<item> ps2ascii </item>
|
||||
<item> ps2epsi </item>
|
||||
<item> ps2frag </item>
|
||||
<item> ps2pdf </item>
|
||||
<item> ps2ps </item>
|
||||
<item> psbook </item>
|
||||
<item> psmerge </item>
|
||||
<item> psnup </item>
|
||||
<item> psresize </item>
|
||||
<item> psselect </item>
|
||||
<item> pstops </item>
|
||||
<item> rcs </item>
|
||||
<item> rev </item>
|
||||
<item> rm </item>
|
||||
<item> scp </item>
|
||||
<item> sed </item>
|
||||
<item> seq </item>
|
||||
<item> setterm </item>
|
||||
<item> shred </item>
|
||||
<item> size </item>
|
||||
<item> size86 </item>
|
||||
<item> skill </item>
|
||||
<item> slogin </item>
|
||||
<item> snice </item>
|
||||
<item> sort </item>
|
||||
<item> sox </item>
|
||||
<item> split </item>
|
||||
<item> ssh </item>
|
||||
<item> ssh-add </item>
|
||||
<item> ssh-agent </item>
|
||||
<item> ssh-keygen </item>
|
||||
<item> ssh-keyscan </item>
|
||||
<item> stat </item>
|
||||
<item> strings </item>
|
||||
<item> strip </item>
|
||||
<item> sudo </item>
|
||||
<item> suidperl </item>
|
||||
<item> sum </item>
|
||||
<item> tac </item>
|
||||
<item> tail </item>
|
||||
<item> tee </item>
|
||||
<item> test </item>
|
||||
<item> tr </item>
|
||||
<item> uniq </item>
|
||||
<item> unlink </item>
|
||||
<item> unzip </item>
|
||||
<item> updatedb </item>
|
||||
<item> updmap </item>
|
||||
<item> uptime </item>
|
||||
<item> users </item>
|
||||
<item> vmstat </item>
|
||||
<item> w </item>
|
||||
<item> wc </item>
|
||||
<item> wget </item>
|
||||
<item> whatis </item>
|
||||
<item> whereis </item>
|
||||
<item> which </item>
|
||||
<item> who </item>
|
||||
<item> whoami </item>
|
||||
<item> write </item>
|
||||
<item> xargs </item>
|
||||
<item> yacc </item>
|
||||
<item> yes </item>
|
||||
<item> zip </item>
|
||||
<item> zsoelim </item>
|
||||
|
||||
<!-- others -->
|
||||
<item> dcop </item>
|
||||
<item> kdialog </item>
|
||||
<item> kfile </item>
|
||||
<item> xhost </item>
|
||||
<item> xmodmap </item>
|
||||
<item> xset </item>
|
||||
</list>
|
||||
|
||||
|
||||
<contexts>
|
||||
<context attribute="Normal Text" lineEndContext="#stay" name="Start">
|
||||
<IncludeRules context="FindAll" />
|
||||
</context>
|
||||
|
||||
<!-- ====== The following rulessets are meant to be included ======== -->
|
||||
<!-- FindAll tries to interpret everything -->
|
||||
<context attribute="Normal Text" lineEndContext="#stay" name="FindAll">
|
||||
<IncludeRules context="FindComments" />
|
||||
<IncludeRules context="FindCommands" />
|
||||
<IncludeRules context="FindStrings" />
|
||||
<IncludeRules context="FindSubstitutions" />
|
||||
<IncludeRules context="FindOthers" />
|
||||
</context>
|
||||
|
||||
<!-- FindMost tries to interpret anything except commands -->
|
||||
<context attribute="Normal Text" lineEndContext="#stay" name="FindMost">
|
||||
<IncludeRules context="FindComments" />
|
||||
<IncludeRules context="FindStrings" />
|
||||
<IncludeRules context="FindSubstitutions" />
|
||||
<IncludeRules context="FindOthers" />
|
||||
</context>
|
||||
|
||||
|
||||
<!-- FindComments consumes shell comments till EOL -->
|
||||
<context attribute="Normal Text" lineEndContext="#pop" name="FindComments">
|
||||
<DetectChar attribute="Comment" context="Comment" char="#" firstNonSpace="true"/>
|
||||
<RegExpr attribute="Normal Text" context="Comment" String="[\s;](?=#)" />
|
||||
</context>
|
||||
<context attribute="Comment" lineEndContext="#pop" name="Comment">
|
||||
<IncludeRules context="##Alerts" />
|
||||
</context>
|
||||
|
||||
<!-- FindCommentsParen consumes shell comments till EOL or a closing parenthese -->
|
||||
<context attribute="Normal Text" lineEndContext="#pop" name="FindCommentsParen">
|
||||
<DetectChar attribute="Comment" context="CommentParen" char="#" firstNonSpace="true"/>
|
||||
<RegExpr attribute="Normal Text" context="CommentParen" String="[\s;](?=#)" />
|
||||
</context>
|
||||
<context attribute="Comment" lineEndContext="#pop" name="CommentParen">
|
||||
<RegExpr attribute="Comment" context="#pop" String="[^)](?=\))" />
|
||||
<IncludeRules context="##Alerts" />
|
||||
</context>
|
||||
|
||||
<!-- FindCommentsBackq consumes shell comments till EOL or a backquote -->
|
||||
<context attribute="Normal Text" lineEndContext="#pop" name="FindCommentsBackq">
|
||||
<DetectChar attribute="Comment" context="CommentBackq" char="#" firstNonSpace="true"/>
|
||||
<RegExpr attribute="Normal Text" context="CommentBackq" String="[\s;](?=#)" />
|
||||
</context>
|
||||
<context attribute="Comment" lineEndContext="#pop" name="CommentBackq">
|
||||
<RegExpr attribute="Comment" context="#pop" String="[^`](?=`)" />
|
||||
<IncludeRules context="##Alerts" />
|
||||
</context>
|
||||
|
||||
|
||||
<!-- FindCommands matches many items that can be expected outside strings, substitutions etc. -->
|
||||
<context attribute="Normal Text" lineEndContext="#stay" name="FindCommands">
|
||||
<!-- start expression in double parentheses -->
|
||||
<Detect2Chars attribute="Keyword" context="ExprDblParen" char="(" char1="(" beginRegion="expression" />
|
||||
<!-- start expression in double brackets -->
|
||||
<RegExpr attribute="Keyword" context="ExprDblBracket" String="\[\[&eos;" beginRegion="expression" column="0"/>
|
||||
<RegExpr attribute="Keyword" context="ExprDblBracket" String="\s\[\[&eos;" beginRegion="expression" />
|
||||
<!-- start expression in single brackets -->
|
||||
<RegExpr attribute="Builtin" context="ExprBracket" String="\[&eos;" beginRegion="expression" column="0"/>
|
||||
<RegExpr attribute="Builtin" context="ExprBracket" String="\s\[&eos;" beginRegion="expression" />
|
||||
<!-- start a group command with { -->
|
||||
<RegExpr attribute="Keyword" context="Group" String="\{&eos;" beginRegion="group" />
|
||||
<!-- start a subshell -->
|
||||
<DetectChar attribute="Keyword" context="SubShell" char="(" beginRegion="subshell" />
|
||||
<!-- match do and if blocks -->
|
||||
<RegExpr attribute="Keyword" context="#stay" String="\bdo&noword;" beginRegion="do" />
|
||||
<RegExpr attribute="Keyword" context="#stay" String="\bdone&noword;" endRegion="do" />
|
||||
<RegExpr attribute="Keyword" context="#stay" String="\bif&noword;" beginRegion="if" />
|
||||
<RegExpr attribute="Keyword" context="#stay" String="\bfi&noword;" endRegion="if" />
|
||||
<!-- handle case as a special case -->
|
||||
<RegExpr attribute="Keyword" context="Case" String="\bcase&noword;" beginRegion="case" />
|
||||
<!-- handle command line options -->
|
||||
<RegExpr attribute="Option" context="#stay" String="-[A-Za-z0-9][A-Za-z0-9_]*" />
|
||||
<RegExpr attribute="Option" context="#stay" String="--[a-z][A-Za-z0-9_-]*" />
|
||||
<!-- handle variable assignments -->
|
||||
<RegExpr attribute="Variable" context="Assign" String="\b&varname;\+?=" />
|
||||
<RegExpr attribute="Variable" context="AssignSubscr" String="\b&varname;(?=\[.+\]\+?=)" />
|
||||
<!-- handle functions with function keyword before keywords -->
|
||||
<StringDetect attribute="Function" context="#stay" String=":()" />
|
||||
<RegExpr attribute="Keyword" context="FunctionDef" String="\bfunction\b" />
|
||||
<!-- handle keywords -->
|
||||
<keyword attribute="Keyword" context="#stay" String="keywords" />
|
||||
<RegExpr attribute="Builtin" context="#stay" String="\.(?=\s)" />
|
||||
<keyword attribute="Builtin" context="#stay" String="builtins" />
|
||||
<keyword attribute="Command" context="#stay" String="unixcommands" />
|
||||
<!-- handle commands that have variable names as argument -->
|
||||
<keyword attribute="Builtin" context="VarName" String="builtins_var" />
|
||||
<!-- handle here-string -->
|
||||
<RegExpr attribute="Redirection" context="#stay" String="\d*<<<" />
|
||||
<!-- handle here document -->
|
||||
<StringDetect attribute="Redirection" context="HereDoc" String="<<" lookAhead="true" />
|
||||
<!-- handle process subst -->
|
||||
<RegExpr attribute="Redirection" context="ProcessSubst" String="[<>]\(" />
|
||||
<!-- handle redirection -->
|
||||
<RegExpr attribute="Redirection" context="#stay" String="([0-9]*(>{1,2}|<)(&[0-9]+-?)?|&>|>&|[0-9]*<>)" />
|
||||
<!-- handle &, &&, | and || -->
|
||||
<RegExpr attribute="Control" context="#stay" String="([|&])\1?" />
|
||||
<!-- mark function definitions without function keyword -->
|
||||
<RegExpr attribute="Function" context="#stay" String="&funcname;\s*\(\)" />
|
||||
</context>
|
||||
|
||||
<!-- FindOthers contains various rules to mark different shell input -->
|
||||
<context attribute="Normal Text" lineEndContext="#stay" name="FindOthers">
|
||||
<RegExpr attribute="Escape" context="#stay" String="\\[][;\\$`{}()|&<>* ]" />
|
||||
<RegExpr attribute="Keyword" context="#stay" String="\\$" />
|
||||
<RegExpr attribute="Escape" context="#stay" String="\{(?!(\s|$))\S*\}" />
|
||||
<RegExpr attribute="Path" context="#stay" String="&pathpart;*(?=/)" />
|
||||
<RegExpr attribute="Path" context="#stay" String="~\w*" />
|
||||
<RegExpr attribute="Path" context="#stay" String="/&pathpart;*(?=([\s/):;$`'"]|$))" />
|
||||
<!-- TODO: shell globs beside * and ? (in Path's) -->
|
||||
</context>
|
||||
|
||||
<!-- FindStrings looks for single and double quoted strings, also with $-prefix -->
|
||||
<context attribute="Normal Text" lineEndContext="#stay" name="FindStrings">
|
||||
<Detect2Chars attribute="Escape" context="#stay" char="\\" char1="'" />
|
||||
<Detect2Chars attribute="Escape" context="#stay" char="\\" char1=""" />
|
||||
<DetectChar attribute="String SingleQ" context="StringSQ" char="'" />
|
||||
<DetectChar attribute="String DoubleQ" context="StringDQ" char=""" />
|
||||
<Detect2Chars attribute="String SingleQ" context="StringEsc" char="$" char1="'" />
|
||||
<Detect2Chars attribute="String Transl." context="StringDQ" char="$" char1=""" />
|
||||
</context>
|
||||
|
||||
<!-- FindSubstitutions goes after anything starting with $ and ` and their escapes -->
|
||||
<context attribute="Normal Text" lineEndContext="#stay" name="FindSubstitutions">
|
||||
<RegExpr attribute="Variable" context="Subscript" String="\$&varname;\[" />
|
||||
<RegExpr attribute="Variable" context="#stay" String="\$&varname;" />
|
||||
<RegExpr attribute="Variable" context="#stay" String="\$[*@#?$!_0-9-]" />
|
||||
<RegExpr attribute="Variable" context="#stay" String="\$\{[*@#?$!_0-9-]\}" />
|
||||
<RegExpr attribute="Variable" context="#stay" String="\$\{#&varname;(\[[*@]\])?\}" />
|
||||
<RegExpr attribute="Variable" context="#stay" String="\$\{!&varname;(\[[*@]\]|[*@])?\}" />
|
||||
<RegExpr attribute="Variable" context="VarBrace" String="\$\{&varname;" />
|
||||
<RegExpr attribute="Variable" context="VarBrace" String="\$\{[*@#?$!_0-9-](?=[:#%/=?+-])" />
|
||||
<StringDetect attribute="Variable" context="ExprDblParenSubst" String="$((" beginRegion="expression" />
|
||||
<StringDetect attribute="Redirection" context="SubstFile" String="$(<" />
|
||||
<StringDetect attribute="Variable" context="SubstCommand" String="$(" />
|
||||
<DetectChar attribute="Backquote" context="SubstBackq" char="`" />
|
||||
<RegExpr attribute="Escape" context="#stay" String="\\[`$\\]" />
|
||||
</context>
|
||||
|
||||
<!-- FindTests finds operators valid in tests -->
|
||||
<context attribute="Normal Text" lineEndContext="#stay" name="FindTests">
|
||||
<RegExpr attribute="Expression" context="#stay" String="-[abcdefghkprstuwxOGLSNozn](?=\s)"/>
|
||||
<RegExpr attribute="Expression" context="#stay" String="-([no]t|ef)(?=\s)"/>
|
||||
<RegExpr attribute="Expression" context="#stay" String="([!=]=?|[><])(?=\s)"/>
|
||||
<RegExpr attribute="Expression" context="#stay" String="-(eq|ne|[gl][te])(?=\s)"/>
|
||||
</context>
|
||||
|
||||
|
||||
<!-- ====== These are the contexts that can be branched to ======= -->
|
||||
|
||||
<!-- ExprDblParen consumes an expression started in command mode till )) -->
|
||||
<context attribute="Normal Text" lineEndContext="#stay" name="ExprDblParen">
|
||||
<Detect2Chars attribute="Keyword" context="#pop" char=")" char1=")" endRegion="expression" />
|
||||
<DetectChar attribute="Normal Text" context="ExprSubParen" char="(" />
|
||||
<IncludeRules context="FindMost" />
|
||||
</context>
|
||||
|
||||
<!-- ExprDblParenSubst like ExprDblParen but matches )) as Variable -->
|
||||
<context attribute="Normal Text" lineEndContext="#stay" name="ExprDblParenSubst">
|
||||
<Detect2Chars attribute="Variable" context="#pop" char=")" char1=")" endRegion="expression" />
|
||||
<DetectChar attribute="Normal Text" context="ExprSubParen" char="(" />
|
||||
<IncludeRules context="FindMost" />
|
||||
</context>
|
||||
|
||||
<!-- ExprSubParen consumes an expression till ) -->
|
||||
<context attribute="Normal Text" lineEndContext="#stay" name="ExprSubParen">
|
||||
<DetectChar attribute="Normal Text" context="#pop" char=")" />
|
||||
<DetectChar attribute="Normal Text" context="ExprSubParen" char="(" />
|
||||
<IncludeRules context="FindMost" />
|
||||
</context>
|
||||
|
||||
<!-- ExprBracket consumes an expression till ] -->
|
||||
<context attribute="Normal Text" lineEndContext="#stay" name="ExprBracket">
|
||||
<RegExpr attribute="Builtin" context="#pop" String="\s\](?=($|[\s;|&]))" endRegion="expression" />
|
||||
<RegExpr attribute="Builtin" context="#pop" String="\](?=($|[\s;|&]))" endRegion="expression" column="0"/>
|
||||
<DetectChar attribute="Normal Text" context="ExprSubParen" char="(" />
|
||||
<IncludeRules context="FindTests" />
|
||||
<IncludeRules context="FindMost" />
|
||||
</context>
|
||||
|
||||
<!-- ExprDblBracket consumes an expression till ]] -->
|
||||
<context attribute="Normal Text" lineEndContext="#stay" name="ExprDblBracket">
|
||||
<RegExpr attribute="Keyword" context="#pop" String="\s\]\](?=($|[\s;|&]))" endRegion="expression" />
|
||||
<RegExpr attribute="Keyword" context="#pop" String="\]\](?=($|[\s;|&]))" endRegion="expression" column="0"/>
|
||||
<DetectChar attribute="Normal Text" context="ExprSubParen" char="(" />
|
||||
<IncludeRules context="FindTests" />
|
||||
<IncludeRules context="FindMost" />
|
||||
</context>
|
||||
|
||||
<!-- Group consumes shell input till } -->
|
||||
<context attribute="Normal Text" lineEndContext="#stay" name="Group">
|
||||
<DetectChar attribute="Keyword" context="#pop" char="}" endRegion="group" />
|
||||
<IncludeRules context="FindAll" />
|
||||
</context>
|
||||
|
||||
<!-- SubShell consumes shell input till ) -->
|
||||
<context attribute="Normal Text" lineEndContext="#stay" name="SubShell">
|
||||
<DetectChar attribute="Keyword" context="#pop" char=")" endRegion="subshell" />
|
||||
<IncludeRules context="FindAll" />
|
||||
</context>
|
||||
|
||||
<!-- Assign consumes an expression till EOL or whitespace -->
|
||||
<context attribute="Normal Text" lineEndContext="#pop" name="Assign" fallthrough="true" fallthroughContext="#pop">
|
||||
<DetectChar attribute="Variable" context="AssignArray" char="(" />
|
||||
<IncludeRules context="FindStrings" />
|
||||
<IncludeRules context="FindSubstitutions" />
|
||||
<IncludeRules context="FindOthers" />
|
||||
<RegExpr attribute="Normal Text" context="#stay" String="[\w:,+_./-]" />
|
||||
</context>
|
||||
|
||||
<!-- AssignArray consumes everything till ), marking assignments -->
|
||||
<context attribute="Normal Text" lineEndContext="#pop" name="AssignArray">
|
||||
<DetectChar attribute="Variable" context="#pop" char=")" />
|
||||
<DetectChar attribute="Variable" context="Subscript" char="[" />
|
||||
<DetectChar attribute="Variable" context="Assign" char="=" />
|
||||
<IncludeRules context="FindMost" />
|
||||
</context>
|
||||
|
||||
<!-- AssignSubscr first expects a [ then parses subscript and continues with '=value' -->
|
||||
<context attribute="Normal Text" lineEndContext="#pop" name="AssignSubscr" fallthrough="true" fallthroughContext="#pop">
|
||||
<DetectChar attribute="Variable" context="Subscript" char="[" />
|
||||
<Detect2Chars attribute="Variable" context="Assign" char="+" char1="=" />
|
||||
<DetectChar attribute="Variable" context="Assign" char="=" />
|
||||
<IncludeRules context="FindStrings" />
|
||||
<IncludeRules context="FindSubstitutions" />
|
||||
<IncludeRules context="FindOthers" />
|
||||
</context>
|
||||
|
||||
<!-- Subscript consumes anything till ], marks as Variable -->
|
||||
<context attribute="Variable" lineEndContext="#stay" name="Subscript">
|
||||
<DetectChar attribute="Variable" context="#pop" char="]" />
|
||||
<IncludeRules context="FindStrings" />
|
||||
<IncludeRules context="FindSubstitutions" />
|
||||
<IncludeRules context="FindOthers" />
|
||||
</context>
|
||||
|
||||
<!-- FunctionDef consumes a name, possibly with (), marks as Function -->
|
||||
<context attribute="Function" lineEndContext="#pop" name="FunctionDef" fallthrough="true" fallthroughContext="#pop">
|
||||
<RegExpr attribute="Function" context="#pop" String="\s+&funcname;(\s*\(\))?" />
|
||||
</context>
|
||||
|
||||
<!-- VarName consumes spare variable names and assignments -->
|
||||
<context attribute="Normal Text" lineEndContext="#pop" name="VarName" fallthrough="true" fallthroughContext="#pop">
|
||||
<!-- handle command line options -->
|
||||
<RegExpr attribute="Option" context="#stay" String="-[A-Za-z0-9]+" />
|
||||
<RegExpr attribute="Option" context="#stay" String="--[a-z][A-Za-z0-9_-]*" />
|
||||
<RegExpr attribute="Variable" context="#stay" String="\b&varname;" />
|
||||
<DetectChar attribute="Variable" context="Subscript" char="[" />
|
||||
<DetectChar attribute="Variable" context="Assign" char="=" />
|
||||
<IncludeRules context="FindMost" />
|
||||
<!-- stay here in spaces and other safe characters -->
|
||||
<RegExpr attribute="Normal Text" context="#stay" String="[^]})|;`&><]" />
|
||||
</context>
|
||||
|
||||
<!-- ProcessSubst handles <(command) and >(command) -->
|
||||
<context attribute="Normal Text" lineEndContext="#stay" name="ProcessSubst">
|
||||
<DetectChar attribute="Redirection" context="#pop" char=")" />
|
||||
<IncludeRules context="FindCommentsParen" />
|
||||
<IncludeRules context="FindCommands" />
|
||||
<IncludeRules context="FindStrings" />
|
||||
<IncludeRules context="FindSubstitutions" />
|
||||
<IncludeRules context="FindOthers" />
|
||||
</context>
|
||||
|
||||
<!-- StringSQ consumes anything till ' -->
|
||||
<context attribute="String SingleQ" lineEndContext="#stay" name="StringSQ">
|
||||
<DetectChar attribute="String SingleQ" context="#pop" char="'" />
|
||||
</context>
|
||||
|
||||
<!-- StringDQ consumes anything till ", substitutes vars and expressions -->
|
||||
<context attribute="String DoubleQ" lineEndContext="#stay" name="StringDQ">
|
||||
<DetectChar attribute="String DoubleQ" context="#pop" char=""" />
|
||||
<RegExpr attribute="String Escape" context="#stay" String="\\[`"\\$\n]" />
|
||||
<IncludeRules context="FindSubstitutions" />
|
||||
</context>
|
||||
|
||||
<!-- StringEsc eats till ', but escaping many characters -->
|
||||
<context attribute="String SingleQ" lineEndContext="#stay" name="StringEsc">
|
||||
<DetectChar attribute="String SingleQ" context="#pop" char="'" />
|
||||
<RegExpr attribute="String Escape" context="#stay" String="\\[abefnrtv\\']" />
|
||||
<RegExpr attribute="String Escape" context="#stay" String="\\([0-7]{1,3}|x[A-Fa-f0-9]{1,2}|c.)" />
|
||||
</context>
|
||||
|
||||
<!-- VarBrace is called as soon as ${xxx is encoutered -->
|
||||
<context attribute="Error" lineEndContext="#stay" name="VarBrace">
|
||||
<DetectChar attribute="Variable" context="#pop" char="}" />
|
||||
<DetectChar attribute="Variable" context="Subscript" char="[" />
|
||||
<RegExpr attribute="Variable" context="VarAlt" String="(:?[-=?+]|##?|%%?)" />
|
||||
<RegExpr attribute="Variable" context="VarSubst" String="//?" />
|
||||
<DetectChar attribute="Variable" context="VarSub" char=":" />
|
||||
</context>
|
||||
|
||||
<!-- VarAlt is to handle default/alternate/etc values of variables -->
|
||||
<context attribute="Normal Text" lineEndContext="#stay" name="VarAlt">
|
||||
<DetectChar attribute="Variable" context="#pop#pop" char="}" />
|
||||
<IncludeRules context="FindStrings" />
|
||||
<IncludeRules context="FindSubstitutions" />
|
||||
</context>
|
||||
|
||||
<!-- VarSubst is to handle substitutions on variables -->
|
||||
<context attribute="Normal Text" lineEndContext="#stay" name="VarSubst">
|
||||
<DetectChar attribute="Variable" context="#pop#pop" char="}" />
|
||||
<DetectChar attribute="Variable" context="VarSubst2" char="/" />
|
||||
<IncludeRules context="FindStrings" />
|
||||
<IncludeRules context="FindSubstitutions" />
|
||||
</context>
|
||||
<context attribute="Normal Text" lineEndContext="#stay" name="VarSubst2">
|
||||
<DetectChar attribute="Variable" context="#pop#pop#pop" char="}" />
|
||||
<IncludeRules context="FindStrings" />
|
||||
<IncludeRules context="FindSubstitutions" />
|
||||
</context>
|
||||
|
||||
<!-- VarSub is to substrings of variables -->
|
||||
<context attribute="Error" lineEndContext="#stay" name="VarSub">
|
||||
<DetectChar attribute="Variable" context="VarSub2" char=":" />
|
||||
<DetectChar attribute="Variable" context="#pop#pop" char="}" />
|
||||
<RegExpr attribute="Variable" context="#stay" String="&varname;" />
|
||||
<RegExpr attribute="Variable" context="#stay" String="[0-9]+(?=[:}])" />
|
||||
<IncludeRules context="FindSubstitutions" />
|
||||
</context>
|
||||
<context attribute="Error" lineEndContext="#stay" name="VarSub2">
|
||||
<DetectChar attribute="Variable" context="#pop#pop#pop" char="}" />
|
||||
<RegExpr attribute="Variable" context="#stay" String="&varname;" />
|
||||
<RegExpr attribute="Variable" context="#stay" String="[0-9](?=[:}])" />
|
||||
<IncludeRules context="FindSubstitutions" />
|
||||
</context>
|
||||
|
||||
|
||||
<!-- SubstFile is called after a <( or >( is encoutered -->
|
||||
<context attribute="Normal Text" lineEndContext="#stay" name="SubstFile">
|
||||
<DetectChar attribute="Redirection" context="#pop" char=")" />
|
||||
<IncludeRules context="FindCommentsParen" />
|
||||
<IncludeRules context="FindStrings" />
|
||||
<IncludeRules context="FindSubstitutions" />
|
||||
<IncludeRules context="FindOthers" />
|
||||
</context>
|
||||
|
||||
<!-- SubstCommand is called after a $( is encountered -->
|
||||
<context attribute="Normal Text" lineEndContext="#stay" name="SubstCommand">
|
||||
<DetectChar attribute="Variable" context="#pop" char=")" />
|
||||
<IncludeRules context="FindCommentsParen" />
|
||||
<IncludeRules context="FindCommands" />
|
||||
<IncludeRules context="FindStrings" />
|
||||
<IncludeRules context="FindSubstitutions" />
|
||||
<IncludeRules context="FindOthers" />
|
||||
</context>
|
||||
|
||||
<!-- SubstBackq is called when a backquote is encountered -->
|
||||
<context attribute="Normal Text" lineEndContext="#stay" name="SubstBackq">
|
||||
<DetectChar attribute="Backquote" context="#pop" char="`" />
|
||||
<IncludeRules context="FindCommentsBackq" />
|
||||
<IncludeRules context="FindCommands" />
|
||||
<IncludeRules context="FindStrings" />
|
||||
<IncludeRules context="FindSubstitutions" />
|
||||
<IncludeRules context="FindOthers" />
|
||||
</context>
|
||||
|
||||
<!-- Case is called after the case keyword is encoutered. We handle this because of
|
||||
the lonely closing parentheses that would otherwise disturb the expr matching -->
|
||||
<context attribute="Normal Text" lineEndContext="#stay" name="Case">
|
||||
<RegExpr attribute="Keyword" context="CaseIn" String="\sin\b" />
|
||||
<IncludeRules context="FindMost" />
|
||||
</context>
|
||||
|
||||
<!-- CaseIn is called when the construct 'case ... in' has been found. -->
|
||||
<context attribute="Normal Text" lineEndContext="#stay" name="CaseIn">
|
||||
<RegExpr attribute="Keyword" context="#pop#pop" String="\besac(?=$|[\s;)])" endRegion="case" />
|
||||
<DetectChar attribute="Keyword" context="CaseExpr" char=")" beginRegion="caseexpr" />
|
||||
<AnyChar attribute="Keyword" context="#stay" String="(|" />
|
||||
<IncludeRules context="FindMost" />
|
||||
</context>
|
||||
|
||||
<!-- CaseExpr eats shell input till ;; -->
|
||||
<context attribute="Normal Text" lineEndContext="#stay" name="CaseExpr">
|
||||
<Detect2Chars attribute="Keyword" context="#pop" char=";" char1=";" endRegion="caseexpr" />
|
||||
<RegExpr attribute="Keyword" context="#pop" String="esac(?=$|[\s;)])" lookAhead="true" firstNonSpace="true" endRegion="caseexpr"/>
|
||||
<IncludeRules context="FindAll" />
|
||||
</context>
|
||||
|
||||
<!-- HereDoc consumes Here-documents. It is called at the beginning of the "<<" construct. -->
|
||||
<context attribute="Normal Text" lineEndContext="#stay" name="HereDoc">
|
||||
<RegExpr attribute="Redirection" context="HereDocIQ" String="(<<-\s*"(&word;)")" lookAhead="true" />
|
||||
<RegExpr attribute="Redirection" context="HereDocIQ" String="(<<-\s*'(&word;)')" lookAhead="true" />
|
||||
<RegExpr attribute="Redirection" context="HereDocIQ" String="(<<-\s*\\(&word;))" lookAhead="true" />
|
||||
<RegExpr attribute="Redirection" context="HereDocINQ" String="(<<-\s*(&word;))" lookAhead="true" />
|
||||
<RegExpr attribute="Redirection" context="HereDocQ" String="(<<\s*"(&word;)")" lookAhead="true" />
|
||||
<RegExpr attribute="Redirection" context="HereDocQ" String="(<<\s*'(&word;)')" lookAhead="true" />
|
||||
<RegExpr attribute="Redirection" context="HereDocQ" String="(<<\s*\\(&word;))" lookAhead="true" />
|
||||
<RegExpr attribute="Redirection" context="HereDocNQ" String="(<<\s*(&word;))" lookAhead="true" />
|
||||
<StringDetect attribute="Redirection" context="#pop" String="<<" /><!-- always met -->
|
||||
</context>
|
||||
|
||||
<context attribute="Normal Text" lineEndContext="#pop" name="HereDocRemainder">
|
||||
<IncludeRules context="FindAll" />
|
||||
</context>
|
||||
|
||||
<context attribute="Normal Text" lineEndContext="#stay" name="HereDocQ" dynamic="true">
|
||||
<RegExpr attribute="Redirection" context="HereDocRemainder" String="%1" dynamic="true" />
|
||||
<RegExpr attribute="Redirection" context="#pop#pop" String="^%2\b" dynamic="true" column="0"/>
|
||||
</context>
|
||||
|
||||
<context attribute="Normal Text" lineEndContext="#stay" name="HereDocNQ" dynamic="true">
|
||||
<RegExpr attribute="Redirection" context="HereDocRemainder" String="%1" dynamic="true" />
|
||||
<RegExpr attribute="Redirection" context="#pop#pop" String="^%2\b" dynamic="true" column="0"/>
|
||||
<IncludeRules context="FindSubstitutions" />
|
||||
</context>
|
||||
|
||||
<context attribute="Normal Text" lineEndContext="#stay" name="HereDocIQ" dynamic="true">
|
||||
<RegExpr attribute="Redirection" context="HereDocRemainder" String="%1" dynamic="true" />
|
||||
<RegExpr attribute="Redirection" context="#pop#pop" String="^\t*%2\b" dynamic="true" column="0"/>
|
||||
</context>
|
||||
|
||||
<context attribute="Normal Text" lineEndContext="#stay" name="HereDocINQ" dynamic="true">
|
||||
<RegExpr attribute="Redirection" context="HereDocRemainder" String="%1" dynamic="true" />
|
||||
<RegExpr attribute="Redirection" context="#pop#pop" String="^\t*%2\b" dynamic="true" column="0"/>
|
||||
<IncludeRules context="FindSubstitutions" />
|
||||
</context>
|
||||
|
||||
</contexts>
|
||||
|
||||
<itemDatas>
|
||||
<itemData name="Normal Text" defStyleNum="dsNormal" />
|
||||
<itemData name="Comment" defStyleNum="dsComment" />
|
||||
<itemData name="Keyword" defStyleNum="dsKeyword" />
|
||||
<itemData name="Control" defStyleNum="dsKeyword" />
|
||||
<itemData name="Builtin" defStyleNum="dsKeyword" color="#808" />
|
||||
<itemData name="Command" defStyleNum="dsKeyword" color="#c0c" />
|
||||
<itemData name="Redirection" defStyleNum="dsKeyword" color="#238" />
|
||||
<itemData name="Escape" defStyleNum="dsDataType" />
|
||||
<itemData name="String SingleQ" defStyleNum="dsString" />
|
||||
<itemData name="String DoubleQ" defStyleNum="dsString" />
|
||||
<itemData name="Backquote" defStyleNum="dsKeyword" />
|
||||
<itemData name="String Transl." defStyleNum="dsString" />
|
||||
<itemData name="String Escape" defStyleNum="dsDataType" />
|
||||
<itemData name="Variable" defStyleNum="dsOthers" />
|
||||
<itemData name="Expression" defStyleNum="dsOthers" />
|
||||
<itemData name="Function" defStyleNum="dsFunction" />
|
||||
<itemData name="Path" defStyleNum="dsNormal" />
|
||||
<itemData name="Option" defStyleNum="dsNormal" />
|
||||
<itemData name="Error" defStyleNum="dsError" />
|
||||
</itemDatas>
|
||||
</highlighting>
|
||||
<general>
|
||||
<comments>
|
||||
<comment name="singleLine" start="#"/>
|
||||
</comments>
|
||||
<keywords casesensitive="1" weakDeliminator="^%#[]$._{}:-/" additionalDeliminator="`"/>
|
||||
</general>
|
||||
</language>
|
||||
@@ -30,7 +30,8 @@ DATA_DIRS = \
|
||||
styles \
|
||||
gdbmacros \
|
||||
qmldesigner \
|
||||
qml-type-descriptions
|
||||
qml-type-descriptions \
|
||||
generic-highlighter
|
||||
|
||||
!isEmpty(copydata) {
|
||||
|
||||
|
||||
@@ -1,123 +0,0 @@
|
||||
<?xml version="1.0"?>
|
||||
<mime-info xmlns='http://www.freedesktop.org/standards/shared-mime-info'>
|
||||
<mime-type type="text/css">
|
||||
<sub-class-of type="text/plain"/>
|
||||
<comment>CSS file</comment>
|
||||
<glob pattern="*.css"/>
|
||||
</mime-type>
|
||||
<mime-type type="text/x-fortran">
|
||||
<sub-class-of type="text/plain"/>
|
||||
<comment>Fortran file</comment>
|
||||
<glob pattern="*.f90"/>
|
||||
</mime-type>
|
||||
<mime-type type="text/html">
|
||||
<sub-class-of type="text/plain"/>
|
||||
<comment>HTML file</comment>
|
||||
<glob pattern="*.htm"/>
|
||||
<glob pattern="*.html"/>
|
||||
<glob pattern="*.shtml"/>
|
||||
</mime-type>
|
||||
<mime-type type="text/x-java">
|
||||
<sub-class-of type="text/plain"/>
|
||||
<comment>Java file</comment>
|
||||
<glob pattern="*.java"/>
|
||||
</mime-type>
|
||||
<mime-type type="application/x-javascript">
|
||||
<sub-class-of type="text/plain"/>
|
||||
<comment>Javascript file</comment>
|
||||
<glob pattern="*.js"/>
|
||||
</mime-type>
|
||||
<mime-type type="application/x-perl">
|
||||
<sub-class-of type="text/plain"/>
|
||||
<comment>Perl file</comment>
|
||||
<glob pattern="*.pl"/>
|
||||
<glob pattern="*.pm"/>
|
||||
</mime-type>
|
||||
<mime-type type="application/x-php">
|
||||
<sub-class-of type="text/plain"/>
|
||||
<comment>PHP file</comment>
|
||||
<glob pattern="*.php"/>
|
||||
</mime-type>
|
||||
<mime-type type="text/x-python">
|
||||
<sub-class-of type="text/plain"/>
|
||||
<comment>Python file</comment>
|
||||
<glob pattern="*.py"/>
|
||||
</mime-type>
|
||||
<mime-type type="text/x-ruby">
|
||||
<sub-class-of type="text/plain"/>
|
||||
<comment>Ruby file</comment>
|
||||
<glob pattern="*.rb"/>
|
||||
</mime-type>
|
||||
<mime-type type="text/x-sql">
|
||||
<sub-class-of type="text/plain"/>
|
||||
<comment>SQL file</comment>
|
||||
<glob pattern="*.sql"/>
|
||||
</mime-type>
|
||||
<mime-type type="application/x-tcl">
|
||||
<sub-class-of type="text/plain"/>
|
||||
<comment>TCL file</comment>
|
||||
<glob pattern="*.tcl"/>
|
||||
</mime-type>
|
||||
|
||||
|
||||
|
||||
<mime-type type="text/x-csrc">
|
||||
<sub-class-of type="text/plain"/>
|
||||
<comment>C Source file</comment>
|
||||
<glob pattern="*.c"/>
|
||||
<!-- NVIDIA CUDA files are like C -->
|
||||
<glob pattern="*.cu"/>
|
||||
</mime-type>
|
||||
|
||||
<!-- A C Header file is virtually undistinguishable from the C++ header -->
|
||||
<mime-type type="text/x-chdr">
|
||||
<sub-class-of type="text/x-csrc"/>
|
||||
<comment>C Header file</comment>
|
||||
<glob pattern="*.h"/>
|
||||
</mime-type>
|
||||
|
||||
<!-- Those are used to find matching headers by the CppTools plugin,
|
||||
so, they should match -->
|
||||
<mime-type type="text/x-c++hdr">
|
||||
<sub-class-of type="text/x-chdr"/>
|
||||
<comment>C++ Header file</comment>
|
||||
<comment>C++ header</comment>
|
||||
<glob pattern="*.h"/>
|
||||
<glob pattern="*.hh"/>
|
||||
<glob pattern="*.hxx"/>
|
||||
<glob pattern="*.h++"/>
|
||||
<glob pattern="*.H"/>
|
||||
<glob pattern="*.hpp"/>
|
||||
<glob pattern="*.hp"/>
|
||||
<!-- Find include guards of header files without extension, for
|
||||
example, STL ones like <string> -->
|
||||
<magic priority="50">
|
||||
<match value="#ifndef" type="string" offset="0:1000"/>
|
||||
</magic>
|
||||
</mime-type>
|
||||
|
||||
<mime-type type="text/x-c++src">
|
||||
<comment>C++ Source file</comment>
|
||||
<sub-class-of type="text/x-csrc"/>
|
||||
<comment>C++ source code</comment>
|
||||
<glob pattern="*.cpp"/>
|
||||
<glob pattern="*.cp"/>
|
||||
<glob pattern="*.cc"/>
|
||||
<glob pattern="*.cxx"/>
|
||||
<glob pattern="*.c++"/>
|
||||
<glob pattern="*.C"/>
|
||||
<glob pattern="*.inl"/>
|
||||
<glob pattern="*.moc"/>
|
||||
<glob pattern="*.qdoc"/>
|
||||
</mime-type>
|
||||
|
||||
<mime-type type="text/x-objcsrc">
|
||||
<comment>Objective-C source code</comment>
|
||||
<sub-class-of type="text/x-csrc"/>
|
||||
<magic priority="30">
|
||||
<match value="#import" type="string" offset="0"/>
|
||||
</magic>
|
||||
<glob pattern="*.m"/>
|
||||
<glob pattern="*.mm"/>
|
||||
</mime-type>
|
||||
</mime-info>
|
||||
File diff suppressed because it is too large
Load Diff
@@ -38,25 +38,7 @@ using namespace GenericEditor;
|
||||
using namespace Internal;
|
||||
|
||||
EditorFactory::EditorFactory(QObject *parent) : Core::IEditorFactory(parent)
|
||||
{
|
||||
// Note: This is temporary until it is definied how definition files should be "integrated".
|
||||
m_mimeTypes << QLatin1String(GenericEditor::Constants::C_HEADER_MIMETYPE)
|
||||
<< QLatin1String(GenericEditor::Constants::C_SOURCE_MIMETYPE)
|
||||
<< QLatin1String(GenericEditor::Constants::CPP_HEADER_MIMETYPE)
|
||||
<< QLatin1String(GenericEditor::Constants::CPP_SOURCE_MIMETYPE)
|
||||
<< QLatin1String(GenericEditor::Constants::CSS_MIMETYPE)
|
||||
<< QLatin1String(GenericEditor::Constants::FORTRAN_MIMETYPE)
|
||||
<< QLatin1String(GenericEditor::Constants::HTML_MIMETYPE)
|
||||
<< QLatin1String(GenericEditor::Constants::JAVA_MIMETYPE)
|
||||
<< QLatin1String(GenericEditor::Constants::JAVASCRIPT_MIMETYPE)
|
||||
<< QLatin1String(GenericEditor::Constants::OBJECTIVEC_MIMETYPE)
|
||||
<< QLatin1String(GenericEditor::Constants::PERL_MIMETYPE)
|
||||
<< QLatin1String(GenericEditor::Constants::PHP_MIMETYPE)
|
||||
<< QLatin1String(GenericEditor::Constants::PYTHON_MIMETYPE)
|
||||
<< QLatin1String(GenericEditor::Constants::RUBY_MIMETYPE)
|
||||
<< QLatin1String(GenericEditor::Constants::SQL_MIMETYPE)
|
||||
<< QLatin1String(GenericEditor::Constants::TCL_MIMETYPE);
|
||||
}
|
||||
{}
|
||||
|
||||
EditorFactory::~EditorFactory()
|
||||
{}
|
||||
@@ -68,14 +50,14 @@ Core::IEditor *EditorFactory::createEditor(QWidget *parent)
|
||||
return genericEditor->editableInterface();
|
||||
}
|
||||
|
||||
QStringList EditorFactory::mimeTypes() const
|
||||
{ return m_mimeTypes; }
|
||||
|
||||
QString EditorFactory::id() const
|
||||
{
|
||||
return QLatin1String(GenericEditor::Constants::GENERIC_EDITOR);
|
||||
}
|
||||
|
||||
QStringList EditorFactory::mimeTypes() const
|
||||
{ return m_mimeTypes; }
|
||||
|
||||
QString EditorFactory::displayName() const
|
||||
{
|
||||
return tr(GenericEditor::Constants::GENERIC_EDITOR_DISPLAY_NAME);
|
||||
|
||||
@@ -43,6 +43,7 @@ class EditorFactory : public Core::IEditorFactory
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
friend class GenericEditorPlugin;
|
||||
public:
|
||||
EditorFactory(QObject *parent = 0);
|
||||
virtual ~EditorFactory();
|
||||
|
||||
@@ -40,7 +40,4 @@ SOURCES += \
|
||||
editor.cpp \
|
||||
editorfactory.cpp
|
||||
|
||||
OTHER_FILES += GenericEditor.pluginspec GenericEditor.mimetypes.xml
|
||||
|
||||
RESOURCES += \
|
||||
genericeditor.qrc
|
||||
OTHER_FILES += GenericEditor.pluginspec
|
||||
|
||||
@@ -1,22 +0,0 @@
|
||||
<RCC>
|
||||
<qresource prefix="/genericeditor">
|
||||
<file>XML/c.xml</file>
|
||||
<file>XML/cpp.xml</file>
|
||||
<file>XML/fortran.xml</file>
|
||||
<file>XML/html.xml</file>
|
||||
<file>XML/java.xml</file>
|
||||
<file>XML/javadoc.xml</file>
|
||||
<file>XML/javascript.xml</file>
|
||||
<file>XML/objectivec.xml</file>
|
||||
<file>XML/perl.xml</file>
|
||||
<file>XML/php.xml</file>
|
||||
<file>XML/python.xml</file>
|
||||
<file>XML/ruby.xml</file>
|
||||
<file>XML/sql.xml</file>
|
||||
<file>XML/tcl.xml</file>
|
||||
<file>XML/alert.xml</file>
|
||||
<file>XML/css.xml</file>
|
||||
<file>XML/doxygen.xml</file>
|
||||
<file>GenericEditor.mimetypes.xml</file>
|
||||
</qresource>
|
||||
</RCC>
|
||||
@@ -39,23 +39,6 @@ const char * const GENERIC_EDITOR = "GenericEditorPlugin.GenericEditor";
|
||||
const char * const GENERIC_EDITOR_DISPLAY_NAME =
|
||||
QT_TRANSLATE_NOOP("OpenWith::Editors", "Generic Editor");
|
||||
|
||||
const char * const C_SOURCE_MIMETYPE = "text/x-csrc";
|
||||
const char * const C_HEADER_MIMETYPE = "text/x-chdr";
|
||||
const char * const CPP_SOURCE_MIMETYPE = "text/x-c++src";
|
||||
const char * const CPP_HEADER_MIMETYPE = "text/x-c++hdr";
|
||||
const char * const CSS_MIMETYPE = "text/css";
|
||||
const char * const FORTRAN_MIMETYPE = "text/x-fortran";
|
||||
const char * const HTML_MIMETYPE = "text/html";
|
||||
const char * const JAVA_MIMETYPE = "text/x-java";
|
||||
const char * const JAVASCRIPT_MIMETYPE = "application/x-javascript";
|
||||
const char * const OBJECTIVEC_MIMETYPE = "text/x-objcsrc";
|
||||
const char * const PERL_MIMETYPE = "application/x-perl";
|
||||
const char * const PHP_MIMETYPE = "application/x-php";
|
||||
const char * const PYTHON_MIMETYPE = "text/x-python";
|
||||
const char * const RUBY_MIMETYPE = "text/x-ruby";
|
||||
const char * const SQL_MIMETYPE = "text/x-sql";
|
||||
const char * const TCL_MIMETYPE = "application/x-tcl";
|
||||
|
||||
} // namespace Constants
|
||||
} // namespace GenericEditor
|
||||
|
||||
|
||||
@@ -40,40 +40,28 @@
|
||||
#include <coreplugin/mimedatabase.h>
|
||||
#include <texteditor/texteditorsettings.h>
|
||||
#include <utils/qtcassert.h>
|
||||
#include <cppeditor/cppeditorconstants.h>
|
||||
#include <qmljseditor/qmljseditorconstants.h>
|
||||
|
||||
#include <QtCore/QtAlgorithms>
|
||||
#include <QtCore/QtPlugin>
|
||||
#include <QtCore/QString>
|
||||
#include <QtCore/QLatin1Char>
|
||||
#include <QtCore/QLatin1String>
|
||||
#include <QtCore/QStringList>
|
||||
#include <QtCore/QFile>
|
||||
#include <QtCore/QFileInfo>
|
||||
#include <QtCore/QDir>
|
||||
#include <QtCore/QList>
|
||||
#include <QtCore/QRegExp>
|
||||
#include <QtXml/QXmlSimpleReader>
|
||||
#include <QtXml/QXmlInputSource>
|
||||
#include <QtXml/QXmlStreamReader>
|
||||
#include <QtXml/QXmlStreamAttributes>
|
||||
|
||||
using namespace GenericEditor;
|
||||
using namespace Internal;
|
||||
|
||||
// Todo: Temp.
|
||||
const QLatin1String GenericEditorPlugin::kAlertDefinitionId(":/genericeditor/XML/alert.xml");
|
||||
const QLatin1String GenericEditorPlugin::kCDefinitionId(":/genericeditor/XML/c.xml");
|
||||
const QLatin1String GenericEditorPlugin::kCppDefinitionId(":/genericeditor/XML/cpp.xml");
|
||||
const QLatin1String GenericEditorPlugin::kCssDefinitionId(":/genericeditor/XML/css.xml");
|
||||
const QLatin1String GenericEditorPlugin::kDoxygenDefinitionId(
|
||||
":/genericeditor/XML/doxygen.xml");
|
||||
const QLatin1String GenericEditorPlugin::kFortranDefinitionId(
|
||||
":/genericeditor/XML/fortran.xml");
|
||||
const QLatin1String GenericEditorPlugin::kHtmlDefinitionId(":/genericeditor/XML/html.xml");
|
||||
const QLatin1String GenericEditorPlugin::kJavaDefinitionId(":/genericeditor/XML/java.xml");
|
||||
const QLatin1String GenericEditorPlugin::kJavadocDefinitionId(
|
||||
":/genericeditor/XML/javadoc.xml");
|
||||
const QLatin1String GenericEditorPlugin::kJavascriptDefinitionId(
|
||||
":/genericeditor/XML/javascript.xml");
|
||||
const QLatin1String GenericEditorPlugin::kObjectiveCDefinitionId(
|
||||
":/genericeditor/XML/objectivec.xml");
|
||||
const QLatin1String GenericEditorPlugin::kPerlDefinitionId(":/genericeditor/XML/perl.xml");
|
||||
const QLatin1String GenericEditorPlugin::kPhpDefinitionId(":/genericeditor/XML/php.xml");
|
||||
const QLatin1String GenericEditorPlugin::kPythonDefinitionId(":/genericeditor/XML/python.xml");
|
||||
const QLatin1String GenericEditorPlugin::kRubyDefinitionId(":/genericeditor/XML/ruby.xml");
|
||||
const QLatin1String GenericEditorPlugin::kSqlDefinitionId(":/genericeditor/XML/sql.xml");
|
||||
const QLatin1String GenericEditorPlugin::kTclDefinitionId(":/genericeditor/XML/tcl.xml");
|
||||
|
||||
GenericEditorPlugin *GenericEditorPlugin::m_instance = 0;
|
||||
|
||||
GenericEditorPlugin::GenericEditorPlugin() :
|
||||
@@ -82,42 +70,8 @@ GenericEditorPlugin::GenericEditorPlugin() :
|
||||
QTC_ASSERT(!m_instance, return);
|
||||
m_instance = this;
|
||||
|
||||
//Todo
|
||||
|
||||
m_idByMimeType.insert(GenericEditor::Constants::C_HEADER_MIMETYPE, kCDefinitionId);
|
||||
m_idByMimeType.insert(GenericEditor::Constants::C_SOURCE_MIMETYPE, kCDefinitionId);
|
||||
m_idByMimeType.insert(GenericEditor::Constants::CPP_HEADER_MIMETYPE, kCppDefinitionId);
|
||||
m_idByMimeType.insert(GenericEditor::Constants::CPP_SOURCE_MIMETYPE, kCppDefinitionId);
|
||||
m_idByMimeType.insert(GenericEditor::Constants::CSS_MIMETYPE, kCssDefinitionId);
|
||||
m_idByMimeType.insert(GenericEditor::Constants::FORTRAN_MIMETYPE, kFortranDefinitionId);
|
||||
m_idByMimeType.insert(GenericEditor::Constants::HTML_MIMETYPE, kHtmlDefinitionId);
|
||||
m_idByMimeType.insert(GenericEditor::Constants::JAVA_MIMETYPE, kJavaDefinitionId);
|
||||
m_idByMimeType.insert(GenericEditor::Constants::JAVASCRIPT_MIMETYPE, kJavascriptDefinitionId);
|
||||
m_idByMimeType.insert(GenericEditor::Constants::OBJECTIVEC_MIMETYPE, kObjectiveCDefinitionId);
|
||||
m_idByMimeType.insert(GenericEditor::Constants::PERL_MIMETYPE, kPerlDefinitionId);
|
||||
m_idByMimeType.insert(GenericEditor::Constants::PHP_MIMETYPE, kPhpDefinitionId);
|
||||
m_idByMimeType.insert(GenericEditor::Constants::PYTHON_MIMETYPE, kPythonDefinitionId);
|
||||
m_idByMimeType.insert(GenericEditor::Constants::RUBY_MIMETYPE, kRubyDefinitionId);
|
||||
m_idByMimeType.insert(GenericEditor::Constants::SQL_MIMETYPE, kSqlDefinitionId);
|
||||
m_idByMimeType.insert(GenericEditor::Constants::TCL_MIMETYPE, kTclDefinitionId);
|
||||
|
||||
m_idByName.insert(QLatin1String("alerts"), kAlertDefinitionId);
|
||||
m_idByName.insert(QLatin1String("c"), kCDefinitionId);
|
||||
m_idByName.insert(QLatin1String("cpp"), kCppDefinitionId);
|
||||
m_idByName.insert(QLatin1String("css"), kCssDefinitionId);
|
||||
m_idByName.insert(QLatin1String("doxygen"), kDoxygenDefinitionId);
|
||||
m_idByName.insert(QLatin1String("fortran"), kFortranDefinitionId);
|
||||
m_idByName.insert(QLatin1String("html"), kHtmlDefinitionId);
|
||||
m_idByName.insert(QLatin1String("java"), kJavaDefinitionId);
|
||||
m_idByName.insert(QLatin1String("javadoc"), kJavadocDefinitionId);
|
||||
m_idByName.insert(QLatin1String("javascript"), kJavascriptDefinitionId);
|
||||
m_idByName.insert(QLatin1String("objectivec"), kObjectiveCDefinitionId);
|
||||
m_idByName.insert(QLatin1String("perl"), kPerlDefinitionId);
|
||||
m_idByName.insert(QLatin1String("php"), kPhpDefinitionId);
|
||||
m_idByName.insert(QLatin1String("python"), kPythonDefinitionId);
|
||||
m_idByName.insert(QLatin1String("ruby"), kRubyDefinitionId);
|
||||
m_idByName.insert(QLatin1String("sql"), kSqlDefinitionId);
|
||||
m_idByName.insert(QLatin1String("tcl"), kTclDefinitionId);
|
||||
connect(Core::ICore::instance(), SIGNAL(coreOpened()),
|
||||
this, SLOT(lookforAvailableDefinitions()));
|
||||
}
|
||||
|
||||
GenericEditorPlugin::~GenericEditorPlugin()
|
||||
@@ -132,14 +86,10 @@ GenericEditorPlugin *GenericEditorPlugin::instance()
|
||||
bool GenericEditorPlugin::initialize(const QStringList &arguments, QString *errorString)
|
||||
{
|
||||
Q_UNUSED(arguments)
|
||||
Q_UNUSED(errorString)
|
||||
|
||||
Core::ICore *core = Core::ICore::instance();
|
||||
if (!core->mimeDatabase()->addMimeTypes(
|
||||
QLatin1String(":/genericeditor/GenericEditor.mimetypes.xml"), errorString)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
addAutoReleasedObject(new EditorFactory(this));
|
||||
m_factory = new EditorFactory(this);
|
||||
addAutoReleasedObject(m_factory);
|
||||
|
||||
m_actionHandler = new TextEditor::TextEditorActionHandler(
|
||||
GenericEditor::Constants::GENERIC_EDITOR,
|
||||
@@ -161,13 +111,25 @@ void GenericEditorPlugin::initializeEditor(Editor *editor)
|
||||
}
|
||||
|
||||
QString GenericEditorPlugin::definitionIdByName(const QString &name) const
|
||||
{ return m_idByName.value(name.toLower()); }
|
||||
{ return m_idByName.value(name); }
|
||||
|
||||
QString GenericEditorPlugin::definitionIdByMimeType(const QString &mimeType) const
|
||||
{ return m_idByMimeType.value(mimeType.toLower()); }
|
||||
{
|
||||
Q_ASSERT(!mimeType.isEmpty() && m_idByMimeType.count(mimeType) > 0);
|
||||
|
||||
bool GenericEditorPlugin::isBuildingDefinition(const QString &id) const
|
||||
{ return m_isBuilding.contains(id); }
|
||||
if (m_idByMimeType.count(mimeType) == 1) {
|
||||
return m_idByMimeType.value(mimeType);
|
||||
} else {
|
||||
QStringList candidateIds;
|
||||
QMultiHash<QString, QString>::const_iterator it = m_idByMimeType.find(mimeType);
|
||||
QMultiHash<QString, QString>::const_iterator endIt = m_idByMimeType.end();
|
||||
for (; it != endIt && it.key() == mimeType; ++it)
|
||||
candidateIds.append(it.value());
|
||||
|
||||
qSort(candidateIds.begin(), candidateIds.end(), m_priorityComp);
|
||||
return candidateIds.first();
|
||||
}
|
||||
}
|
||||
|
||||
const QSharedPointer<HighlightDefinition> &GenericEditorPlugin::definition(const QString &id)
|
||||
{
|
||||
@@ -194,4 +156,107 @@ const QSharedPointer<HighlightDefinition> &GenericEditorPlugin::definition(const
|
||||
return *m_definitions.constFind(id);
|
||||
}
|
||||
|
||||
bool GenericEditorPlugin::isBuildingDefinition(const QString &id) const
|
||||
{ return m_isBuilding.contains(id); }
|
||||
|
||||
void GenericEditorPlugin::lookforAvailableDefinitions()
|
||||
{
|
||||
QDir definitionsDir(Core::ICore::instance()->resourcePath() +
|
||||
QLatin1String("/generic-highlighter"));
|
||||
|
||||
QStringList filter(QLatin1String("*.xml"));
|
||||
definitionsDir.setNameFilters(filter);
|
||||
|
||||
const QFileInfoList &filesInfo = definitionsDir.entryInfoList();
|
||||
foreach (const QFileInfo &fileInfo, filesInfo)
|
||||
parseDefinitionMetadata(fileInfo);
|
||||
}
|
||||
|
||||
void GenericEditorPlugin::parseDefinitionMetadata(const QFileInfo &fileInfo)
|
||||
{
|
||||
static const QLatin1Char kSemiColon(';');
|
||||
static const QLatin1Char kSlash('/');
|
||||
static const QLatin1String kLanguage("language");
|
||||
static const QLatin1String kName("name");
|
||||
static const QLatin1String kExtensions("extensions");
|
||||
static const QLatin1String kMimeType("mimetype");
|
||||
static const QLatin1String kPriority("priority");
|
||||
static const QLatin1String kArtificial("artificial");
|
||||
|
||||
const QString &id = fileInfo.absoluteFilePath();
|
||||
|
||||
QFile definitionFile(id);
|
||||
if (!definitionFile.open(QIODevice::ReadOnly | QIODevice::Text))
|
||||
return;
|
||||
|
||||
QXmlStreamReader reader(&definitionFile);
|
||||
while (!reader.atEnd() && !reader.hasError()) {
|
||||
if (reader.readNext() == QXmlStreamReader::StartElement &&
|
||||
reader.name() == kLanguage) {
|
||||
const QXmlStreamAttributes &attr = reader.attributes();
|
||||
|
||||
const QString &name = attr.value(kName).toString();
|
||||
m_idByName.insert(name, id);
|
||||
|
||||
const QStringList &patterns =
|
||||
attr.value(kExtensions).toString().split(kSemiColon, QString::SkipEmptyParts);
|
||||
|
||||
QStringList mimeTypes =
|
||||
attr.value(kMimeType).toString().split(kSemiColon, QString::SkipEmptyParts);
|
||||
if (mimeTypes.isEmpty()) {
|
||||
// There are definitions which do not specify a MIME type, but specify file
|
||||
// patterns. Creating an artificial MIME type is a workaround.
|
||||
QString mimeType(kArtificial);
|
||||
mimeType.append(kSlash).append(name);
|
||||
m_idByMimeType.insert(mimeType, id);
|
||||
mimeTypes.append(mimeType);
|
||||
} else {
|
||||
foreach (const QString &mimeType, mimeTypes)
|
||||
m_idByMimeType.insert(mimeType, id);
|
||||
}
|
||||
|
||||
// The priority below should not be confused with the priority used when matching files
|
||||
// to MIME types. This priority is for choosing a highlight definition when there are
|
||||
// multiple ones associated with the same MIME type or file extensions/patterns.
|
||||
m_priorityComp.m_priorityById.insert(id, attr.value(kPriority).toString().toInt());
|
||||
|
||||
registerMimeTypes(name, mimeTypes, patterns);
|
||||
break;
|
||||
}
|
||||
}
|
||||
reader.clear();
|
||||
definitionFile.close();
|
||||
}
|
||||
|
||||
void GenericEditorPlugin::registerMimeTypes(const QString &comment,
|
||||
const QStringList &types,
|
||||
const QStringList &patterns)
|
||||
{
|
||||
static const QStringList textPlain(QLatin1String("text/plain"));
|
||||
|
||||
// A definition can specify multiple MIME types and file extensions/patterns. However, each
|
||||
// thing is done with a single string. Then, there is no direct way to tell which extensions/
|
||||
// patterns belong to which MIME types nor whether a MIME type is just an alias for the other.
|
||||
// Currently, I associate all expressions/patterns with all MIME types.
|
||||
|
||||
QList<QRegExp> expressions;
|
||||
foreach (const QString &type, types) {
|
||||
Core::MimeType mimeType = Core::ICore::instance()->mimeDatabase()->findByType(type);
|
||||
if (mimeType.isNull()) {
|
||||
if (expressions.isEmpty()) {
|
||||
foreach (const QString &pattern, patterns)
|
||||
expressions.append(QRegExp(pattern, Qt::CaseSensitive, QRegExp::Wildcard));
|
||||
}
|
||||
|
||||
mimeType.setType(type);
|
||||
mimeType.setSubClassesOf(textPlain);
|
||||
mimeType.setComment(comment);
|
||||
mimeType.setGlobPatterns(expressions);
|
||||
|
||||
Core::ICore::instance()->mimeDatabase()->addMimeType(mimeType);
|
||||
m_factory->m_mimeTypes.append(type);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Q_EXPORT_PLUGIN(GenericEditorPlugin)
|
||||
|
||||
@@ -34,19 +34,25 @@
|
||||
#include <texteditor/texteditoractionhandler.h>
|
||||
|
||||
#include <QtCore/QString>
|
||||
#include <QtCore/QStringList>
|
||||
#include <QtCore/QLatin1String>
|
||||
#include <QtCore/QHash>
|
||||
#include <QtCore/QMultiHash>
|
||||
#include <QtCore/QSet>
|
||||
#include <QtCore/QSharedPointer>
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
class QFileInfo;
|
||||
class QStringList;
|
||||
QT_END_NAMESPACE
|
||||
|
||||
namespace GenericEditor {
|
||||
namespace Internal {
|
||||
|
||||
class HighlightDefinition;
|
||||
class HighlightDefinitionMetadata;
|
||||
class Editor;
|
||||
|
||||
// Note: The general interface of this class is temporary. Still need discussing details about
|
||||
// the definition files integration with Creator.
|
||||
class EditorFactory;
|
||||
|
||||
class GenericEditorPlugin : public ExtensionSystem::IPlugin
|
||||
{
|
||||
@@ -68,23 +74,8 @@ public:
|
||||
bool isBuildingDefinition(const QString &id) const;
|
||||
const QSharedPointer<HighlightDefinition> &definition(const QString &id);
|
||||
|
||||
static const QLatin1String kAlertDefinitionId;
|
||||
static const QLatin1String kCDefinitionId;
|
||||
static const QLatin1String kCppDefinitionId;
|
||||
static const QLatin1String kCssDefinitionId;
|
||||
static const QLatin1String kDoxygenDefinitionId;
|
||||
static const QLatin1String kFortranDefinitionId;
|
||||
static const QLatin1String kHtmlDefinitionId;
|
||||
static const QLatin1String kJavaDefinitionId;
|
||||
static const QLatin1String kJavadocDefinitionId;
|
||||
static const QLatin1String kJavascriptDefinitionId;
|
||||
static const QLatin1String kObjectiveCDefinitionId;
|
||||
static const QLatin1String kPerlDefinitionId;
|
||||
static const QLatin1String kPhpDefinitionId;
|
||||
static const QLatin1String kPythonDefinitionId;
|
||||
static const QLatin1String kRubyDefinitionId;
|
||||
static const QLatin1String kSqlDefinitionId;
|
||||
static const QLatin1String kTclDefinitionId;
|
||||
private slots:
|
||||
void lookforAvailableDefinitions();
|
||||
|
||||
private:
|
||||
GenericEditorPlugin(const GenericEditorPlugin &HighlighterPlugin);
|
||||
@@ -92,12 +83,28 @@ private:
|
||||
|
||||
static GenericEditorPlugin *m_instance;
|
||||
|
||||
QSet<QString> m_isBuilding;
|
||||
QHash<QString, QString> m_idByName;
|
||||
QHash<QString, QString> m_idByMimeType;
|
||||
QHash<QString, QSharedPointer<HighlightDefinition> > m_definitions;
|
||||
void parseDefinitionMetadata(const QFileInfo &fileInfo);
|
||||
void registerMimeTypes(const QString &comment,
|
||||
const QStringList &types,
|
||||
const QStringList &patterns);
|
||||
|
||||
struct PriorityCompare
|
||||
{
|
||||
bool operator()(const QString &a, const QString &b)
|
||||
{ return m_priorityById.value(a) < m_priorityById.value(b); }
|
||||
|
||||
QHash<QString, int> m_priorityById;
|
||||
};
|
||||
PriorityCompare m_priorityComp;
|
||||
|
||||
TextEditor::TextEditorActionHandler *m_actionHandler;
|
||||
|
||||
EditorFactory *m_factory;
|
||||
|
||||
QHash<QString, QString> m_idByName;
|
||||
QMultiHash<QString, QString> m_idByMimeType;
|
||||
QHash<QString, QSharedPointer<HighlightDefinition> > m_definitions;
|
||||
QSet<QString> m_isBuilding;
|
||||
};
|
||||
|
||||
} // namespace Internal
|
||||
|
||||
@@ -165,15 +165,3 @@ void HighlightDefinition::setKeywordsSensitive(const QString &sensitivity)
|
||||
|
||||
Qt::CaseSensitivity HighlightDefinition::keywordsSensitive() const
|
||||
{ return m_keywordCaseSensitivity; }
|
||||
|
||||
void HighlightDefinition::setLanguageName(const QString &name)
|
||||
{ m_languageName = name; }
|
||||
|
||||
const QString &HighlightDefinition::languageName() const
|
||||
{ return m_languageName; }
|
||||
|
||||
void HighlightDefinition::setFileExtensions(const QString &extensions)
|
||||
{
|
||||
//Todo
|
||||
Q_UNUSED(extensions);
|
||||
}
|
||||
|
||||
@@ -81,12 +81,6 @@ public:
|
||||
void setMultiLineCommentRegion(const QString ®ion);
|
||||
const QString &multiLineCommentRegion() const;
|
||||
|
||||
void setLanguageName(const QString &name);
|
||||
const QString &languageName() const;
|
||||
|
||||
//Todo: Will use?
|
||||
void setFileExtensions(const QString &extensions);
|
||||
|
||||
private:
|
||||
|
||||
HighlightDefinition(const HighlightDefinition &);
|
||||
|
||||
@@ -179,8 +179,6 @@ bool HighlightDefinitionHandler::startElement(const QString &,
|
||||
detectSpacesStarted(atts);
|
||||
} else if (qName == kDetectIdentifier) {
|
||||
detectIdentifier(atts);
|
||||
} else if (qName == kLanguage) {
|
||||
languageElementStarted(atts);
|
||||
}
|
||||
|
||||
return true;
|
||||
@@ -211,12 +209,6 @@ bool HighlightDefinitionHandler::characters(const QString& ch)
|
||||
return true;
|
||||
}
|
||||
|
||||
void HighlightDefinitionHandler::languageElementStarted(const QXmlAttributes &atts) const
|
||||
{
|
||||
m_definition->setLanguageName(atts.value(kName));
|
||||
m_definition->setFileExtensions(atts.value(kExtensions));
|
||||
}
|
||||
|
||||
void HighlightDefinitionHandler::listElementStarted(const QXmlAttributes &atts)
|
||||
{
|
||||
m_currentList = m_definition->createKeywordList(atts.value(kName));
|
||||
|
||||
@@ -59,7 +59,6 @@ public:
|
||||
bool characters(const QString &ch);
|
||||
|
||||
private:
|
||||
void languageElementStarted(const QXmlAttributes &atts) const;
|
||||
void listElementStarted(const QXmlAttributes &atts);
|
||||
void itemElementStarted();
|
||||
void contextElementStarted(const QXmlAttributes &atts);
|
||||
|
||||
@@ -438,12 +438,14 @@ void Highlighter::configureFormats(const TextEditor::FontSettings & fs)
|
||||
QLatin1String(TextEditor::Constants::C_KEYWORD));
|
||||
m_genericFormats[ItemData::kDsDataType] = fs.toTextCharFormat(
|
||||
QLatin1String(TextEditor::Constants::C_TYPE));
|
||||
// Currenlty using C_NUMBER for all kinds of numbers.
|
||||
m_genericFormats[ItemData::kDsDecVal] = fs.toTextCharFormat(
|
||||
QLatin1String(TextEditor::Constants::C_NUMBER));
|
||||
m_genericFormats[ItemData::kDsBaseN] = fs.toTextCharFormat(
|
||||
QLatin1String(TextEditor::Constants::C_NUMBER));
|
||||
m_genericFormats[ItemData::kDsFloat] = fs.toTextCharFormat(
|
||||
QLatin1String(TextEditor::Constants::C_NUMBER));
|
||||
// Currently using C_STRING for strings and chars.
|
||||
m_genericFormats[ItemData::kDsChar] = fs.toTextCharFormat(
|
||||
QLatin1String(TextEditor::Constants::C_STRING));
|
||||
m_genericFormats[ItemData::kDsString] = fs.toTextCharFormat(
|
||||
|
||||
Reference in New Issue
Block a user