@@ -56,6 +56,7 @@ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
56
56
#include < mutex>
57
57
#include < unordered_set>
58
58
#include " color.hpp"
59
+ #include " MaskGroups.hpp"
59
60
60
61
struct HighlightStrings
61
62
{
@@ -87,31 +88,6 @@ static void SetDefaultHighlighting()
87
88
fprintf (stderr, " SetDefaultHighlighting\n " );
88
89
89
90
ConfigWriter cfg_writer;
90
- static const wchar_t *MasksArchives = /* 1 */
91
- L" *.rar,*.zip,*.[zj],*.[7bglx]z,*.[bg]zip,*.tar,*.t[agbx]z,*.ar[cj],*.r[0-9][0-9],*.a[0-9][0-9],*."
92
- L" bz2,*.cab,*.msi,*.jar,*.lha,*.lzh,*.ha,*.ac[bei],*.pa[ck],*.rk,*.cpio,*.rpm,*.tbz2,*.zoo,*.zst,*.hqx,*.sit,*"
93
- L" .ice,*.uc2,*.ain,*.imp,*.777,*.ufa,*.boa,*.bs[2a],*.sea,*.hpk,*.ddi,*.x2,*.rkv,*.[lw]sz,*.h[ay]"
94
- L" p,*.lim,*.sqz,*.chz" ;
95
- static const wchar_t *MasksTemporary = /* 2 */ L" *.bak,*.tmp" ;
96
- /*
97
- $ 25.09.2001 IS
98
- Эта маска для каталогов: обрабатывать все каталоги, кроме тех, что
99
- являются родительскими (их имена - две точки).
100
- */
101
- static const wchar_t *MasksScripts = L" *.sh,*.py,*.pl,*.cmd,*.exe,*.bat,*.com,*.run,*.elf" ;
102
- static const wchar_t *MasksSoundFiles =
103
- L" *.aif,*.cda,*.mid,*.midi,*.mp3,*.mpa,*.ogg,*.wma,*.flac,*.wav,*.ape,*.wv,*.voc,*.669,*.digi,*.amf,*.ams,*.dbm,*.dmf,*.dsm,*.gdm,*.imf,"
104
- L" *.it,*.itg,*.itp,*.j2b,*.mdl,*.med,*.mo3,*.mod,*.mt2,*.mtm,*.okt,*.plm,*.psm,*.ptm,*.s3m,*.sfx,*.stm,*.stp,*.uax,*.ult,*.xm" ;
105
- static const wchar_t *MaskSharedObjects = L" *.dll,*.so,*.dll.*,*.so.*,*.obj,*.o,*.a,*.lib,*.sys,*.pyo,*.vim" ;
106
- static const wchar_t *MaskVideoFiles = L" *.mkv,*.webm,*.mpg,*.mp2,*.mpeg,*.mpe,*.mpv,*.mp4,*.m4p,*.m4v,*.avi,*.wmv,*.mov,*.qt,*.flv,*.swf,*.avchd,*.3gp,*.vob" ;
107
- static const wchar_t *MaskImageFiles = L" *.avif,*.jpg,*.jpeg,*.jpeg2000,*.ico,*.gif,*.png,*.webp,*.tga,*.bmp,*.pcx,*.tiff,*.tif,*.psd,*.eps,*.indd,*.svg,*.ai,*.cpt,*.kra,*.pdn,*.psp,*.xcf,*.sai,*.cgm,*.mpo,*.pns,*.jps" ;
108
- static const wchar_t *MaskSourceFiles = L" *.c,*.cpp,*.c++,*.h,*.hpp,*.h++,*.asm,*.inc,*.src,*.css,*.glsl,*.lua,*.java,*.php,*.go,*.perl,*.r,*.bas,*.pas,*.jsm,*.qml,"
109
- L" *.js,*.kt,*.sample,*.vs,*.fs,*.fx,*.hlsl,*.fsh,*.vsh,*.pixel,*.vertex,*.fragmentshader,*.fragment,*.vertexshader,"
110
- L" *.ml,*.frag,*.geom,*.vert,*.rs,*.ts,*.jam,*.tcl, *.swift" ;
111
- static const wchar_t *MaskModelFiles = L" *.ma,*.mb,*.opengex,*.ply,*.pov-ray,*.prc,*.step,*.skp,*.stl,*.u3d,*.vrml,*.xaml,*.xgl,*.xvl,*.xvrml,*.x3d,*.3d,*.3df,*.3dm,*.3ds,*.3dxml,*.x3d,"
112
- L" *.dds,*.sdkmesh,*.x,*.hdr,*.ktx,*.amf,*.asymptote,*.blend,*.collada,*.dgn,*.dwf,*.dwg,*.dxf,*.drawings,*.flt,*.fvrml,*.gltf,*.hsf,*.iges,*.imml,*.ipa,*.jt" ;
113
- static const wchar_t *MaskTextFiles = L" *.docx,*.odt,*.pdf,*.rtf,*.tex,*.wpd,*.htm,*.html,*.key,*.odp,*.pps,*.ppt,*.pptx,*.ods,*.xls,*.xlsm,*.xlsx,*.srt,*.nfo,*.rst,*.man,"
114
- L" read.me,readme*,*.txt,*.chm,*.hlp,*.doc,*.md,NEWS" ;
115
91
116
92
static struct DefaultData
117
93
{
@@ -159,18 +135,18 @@ static void SetDefaultHighlighting()
159
135
{L" System" , L" *" , 1 , FILE_ATTRIBUTE_SYSTEM, 0x00 , 0x10 | F_CYAN, 0xFFFFFFFD0F , 0x30 | F_DARKGRAY, 0xFFFFFFFD0F , 0xFF263C , 1 , 0 },
160
136
{L" Hardlinks > 1" , L" *" , 1 , FILE_ATTRIBUTE_HARDLINKS, FILE_ATTRIBUTE_DIRECTORY, 0x10 | F_LIGHTCYAN, 0xFFFFFFFD0F , 0x30 | F_BLUE, 0xFFFFFFFD0F , 0xFF00AB , 0 , 0 },
161
137
// without any mark, only different colors
162
- {L" Shared" , MaskSharedObjects , 0 , 0x00 , FILE_ATTRIBUTE_DIRECTORY, (0x00b800ull << 16 ) | (0x10 | F_GREEN) | FOREGROUND_TRUECOLOR, 0xFFFFFFFD0F , (0x005500ull << 16 ) | (0x30 | F_GREEN) | FOREGROUND_TRUECOLOR, 0xFFFFFFFD0F , 0xFF0000 , 0 , 0 },
163
- {L" Source" , MaskSourceFiles, 0 , 0x00 , FILE_ATTRIBUTE_DIRECTORY, (0xffbcacull << 16 ) | (0x10 | F_GREEN) | FOREGROUND_TRUECOLOR, 0xFFFFFFFD0F , (0x8F0C00ull << 16 ) | (0x30 | F_GREEN) | FOREGROUND_TRUECOLOR, 0xFFFFFFFD0F , 0xFF0000 , 0 , 0 },
164
- {L" Image" , MaskImageFiles , 0 , 0x00 , FILE_ATTRIBUTE_DIRECTORY, (0x00ffaeull << 16 ) | (0x10 | F_BROWN) | FOREGROUND_TRUECOLOR, 0xFFFFFFFD0F , (0x00432eull << 16 ) | (0x30 | F_BROWN) | FOREGROUND_TRUECOLOR, 0xFFFFFFFD0F , 0xFF0000 , 0 , 0 },
165
- {L" Model" , MaskModelFiles, 0 , 0x00 , FILE_ATTRIBUTE_DIRECTORY, (0x00ffaeull << 16 ) | (0x10 | F_BROWN) | FOREGROUND_TRUECOLOR, 0xFFFFFFFD0F , (0x00432eull << 16 ) | (0x30 | F_BROWN) | FOREGROUND_TRUECOLOR, 0xFFFFFFFD0F , 0xFF0000 , 0 , 0 },
166
- {L" Scripts" , MasksScripts, 0 , 0x00 , FILE_ATTRIBUTE_DIRECTORY, 0x10 | F_LIGHTGREEN, 0xFFFFFFFD0F , 0x30 | F_LIGHTGREEN, 0xFFFFFFFD0F , 0xFF0000 , 0 , 0 },
167
- {L" Archives" , MasksArchives, 0 , 0x00 , FILE_ATTRIBUTE_DIRECTORY, 0x10 | F_LIGHTMAGENTA, 0xFFFFFFFD0F , 0x30 | F_LIGHTMAGENTA, 0xFFFFFFFD0F , 0xFF0000 , 0 , 0 },
168
- {L" Temporary" , MasksTemporary, 0 , 0x00 , FILE_ATTRIBUTE_DIRECTORY, 0x10 | F_BROWN, 0xFFFFFFFD0F , 0x30 | F_BROWN, 0xFFFFFFFD0F , 0xFF0000 , 0 , 0 },
138
+ {L" Shared" , L" <shared> " , 0 , 0x00 , FILE_ATTRIBUTE_DIRECTORY, (0x00b800ull << 16 ) | (0x10 | F_GREEN) | FOREGROUND_TRUECOLOR, 0xFFFFFFFD0F , (0x005500ull << 16 ) | (0x30 | F_GREEN) | FOREGROUND_TRUECOLOR, 0xFFFFFFFD0F , 0xFF0000 , 0 , 0 },
139
+ {L" Source" , L" <src> " , 0 , 0x00 , FILE_ATTRIBUTE_DIRECTORY, (0xffbcacull << 16 ) | (0x10 | F_GREEN) | FOREGROUND_TRUECOLOR, 0xFFFFFFFD0F , (0x8F0C00ull << 16 ) | (0x30 | F_GREEN) | FOREGROUND_TRUECOLOR, 0xFFFFFFFD0F , 0xFF0000 , 0 , 0 },
140
+ {L" Image" , L" <pic> " , 0 , 0x00 , FILE_ATTRIBUTE_DIRECTORY, (0x00ffaeull << 16 ) | (0x10 | F_BROWN) | FOREGROUND_TRUECOLOR, 0xFFFFFFFD0F , (0x00432eull << 16 ) | (0x30 | F_BROWN) | FOREGROUND_TRUECOLOR, 0xFFFFFFFD0F , 0xFF0000 , 0 , 0 },
141
+ {L" Model" , L" <3d> " , 0 , 0x00 , FILE_ATTRIBUTE_DIRECTORY, (0x00ffaeull << 16 ) | (0x10 | F_BROWN) | FOREGROUND_TRUECOLOR, 0xFFFFFFFD0F , (0x00432eull << 16 ) | (0x30 | F_BROWN) | FOREGROUND_TRUECOLOR, 0xFFFFFFFD0F , 0xFF0000 , 0 , 0 },
142
+ {L" Scripts" , L" <exec> " , 0 , 0x00 , FILE_ATTRIBUTE_DIRECTORY, 0x10 | F_LIGHTGREEN, 0xFFFFFFFD0F , 0x30 | F_LIGHTGREEN, 0xFFFFFFFD0F , 0xFF0000 , 0 , 0 },
143
+ {L" Archives" , L" <arc> " , 0 , 0x00 , FILE_ATTRIBUTE_DIRECTORY, 0x10 | F_LIGHTMAGENTA, 0xFFFFFFFD0F , 0x30 | F_LIGHTMAGENTA, 0xFFFFFFFD0F , 0xFF0000 , 0 , 0 },
144
+ {L" Temporary" , L" <temp> " , 0 , 0x00 , FILE_ATTRIBUTE_DIRECTORY, 0x10 | F_BROWN, 0xFFFFFFFD0F , 0x30 | F_BROWN, 0xFFFFFFFD0F , 0xFF0000 , 0 , 0 },
169
145
// sound '♪' (disabled by default)
170
- {L" Sound" , MasksSoundFiles, 0 , 0x00 , FILE_ATTRIBUTE_DIRECTORY, (0xAAFF00ull << 16 ) | (0x10 | F_LIGHTGREEN) | FOREGROUND_TRUECOLOR, 0xFFFFFFFD0F , (0x005500ull << 16 ) | (0x30 | F_LIGHTGREEN) | FOREGROUND_TRUECOLOR, 0xFFFFFFFD0F , 0xFF266A /* ♪*/ , 0 , FFF_DISABLED},
146
+ {L" Sound" , L" <sound> " , 0 , 0x00 , FILE_ATTRIBUTE_DIRECTORY, (0xAAFF00ull << 16 ) | (0x10 | F_LIGHTGREEN) | FOREGROUND_TRUECOLOR, 0xFFFFFFFD0F , (0x005500ull << 16 ) | (0x30 | F_LIGHTGREEN) | FOREGROUND_TRUECOLOR, 0xFFFFFFFD0F , 0xFF266A /* ♪*/ , 0 , FFF_DISABLED},
171
147
// without any mark, only different colors
172
- {L" Video" , MaskVideoFiles, 0 , 0x00 , FILE_ATTRIBUTE_DIRECTORY, (0x30b8ffull << 16 ) | (0x10 | F_BROWN) | FOREGROUND_TRUECOLOR, 0xFFFFFFFD0F , (0x006767ull << 16 ) | (0x30 | F_BROWN) | FOREGROUND_TRUECOLOR, 0xFFFFFFFD0F , 0xFF0000 , 0 , 0 },
173
- {L" Text files" , MaskTextFiles, 0 , 0x00 , FILE_ATTRIBUTE_DIRECTORY, (0xccccccull << 16 ) | (0x10 | F_BROWN) | FOREGROUND_TRUECOLOR, 0xFFFFFFFD0F , (0x767676ull << 16 ) | (0x30 | F_BROWN) | FOREGROUND_TRUECOLOR, 0xFFFFFFFD0F , 0xFF0000 , 0 , 0 },
148
+ {L" Video" , L" <video> " , 0 , 0x00 , FILE_ATTRIBUTE_DIRECTORY, (0x30b8ffull << 16 ) | (0x10 | F_BROWN) | FOREGROUND_TRUECOLOR, 0xFFFFFFFD0F , (0x006767ull << 16 ) | (0x30 | F_BROWN) | FOREGROUND_TRUECOLOR, 0xFFFFFFFD0F , 0xFF0000 , 0 , 0 },
149
+ {L" Text files" , L" <doc> " , 0 , 0x00 , FILE_ATTRIBUTE_DIRECTORY, (0xccccccull << 16 ) | (0x10 | F_BROWN) | FOREGROUND_TRUECOLOR, 0xFFFFFFFD0F , (0x767676ull << 16 ) | (0x30 | F_BROWN) | FOREGROUND_TRUECOLOR, 0xFFFFFFFD0F , 0xFF0000 , 0 , 0 },
174
150
175
151
};
176
152
@@ -804,6 +780,70 @@ void HighlightFiles::HiEdit(int MenuPos)
804
780
805
781
break ;
806
782
}
783
+ case KEY_F3: { // show for current item file masks after expand all groups
784
+ int *Count = nullptr ;
785
+ int RealSelectPos = MenuPosToRealPos (SelectPos, &Count);
786
+
787
+ if (Count && RealSelectPos < (int )HiData.getCount ()) {
788
+ const wchar_t *fmask;
789
+ FileFilterParams *ffp = HiData.getItem (RealSelectPos);
790
+ FARString fs;
791
+
792
+ ExMessager em (L" Files highlighting expand Mask Groups" );
793
+ fs.Format (L" == Highlighting Name: \" %ls\" " , ffp->GetTitle ());
794
+ em.AddDup (fs);
795
+ {
796
+ HighlightDataColor hl;
797
+ ffp->GetColors (&hl);
798
+ fs.Format (L" == Highlighting Marker: \" %ls\" " , hl.Mark );
799
+ em.AddDup (fs);
800
+ }
801
+ if (!ffp->GetMask (&fmask) )
802
+ em.AddDup (L" == Highlighting has empty masks" );
803
+ else {
804
+ fs = L" == " + Msg::FileFilterMatchMaskCase;
805
+ fs.AppendFormat (L" : %s" , ffp->GetMaskIgnoreCase () ? " OFF" : " ON" );
806
+ em.AddDup (fs);
807
+ em.AddDup (L" " );
808
+ em.AddDup (L" == Highlighting masks before expand:" );
809
+ em.AddDupWrap (fmask);
810
+
811
+ // expand all groups
812
+ bool b_first = true ;
813
+ int ngroups = 0 ;
814
+ size_t pos_open, pos_close;
815
+ FARString fs_group_name, fs_masks_from_group;
816
+ fs = fmask;
817
+ for ( ;; ) {
818
+ if ( !fs.Pos (pos_open, ' <' , b_first ? 0 : pos_close+1 ) )
819
+ break ;
820
+ b_first = false ;
821
+ if ( !fs.Pos (pos_close, ' >' , pos_open+1 ) )
822
+ break ;
823
+ if ( pos_close-pos_open < 2 )
824
+ continue ;
825
+ fs_group_name = fs.SubStr (pos_open+1 , pos_close-pos_open-1 );
826
+ if ( !GetMaskGroup (fs_group_name, fs_masks_from_group) )
827
+ continue ;
828
+ fs.Replace (pos_open, pos_close-pos_open+1 , fs_masks_from_group);
829
+ pos_close = pos_open-1 ; // may be need recursive expand
830
+ ngroups++;
831
+ }
832
+ em.AddDup (L" " );
833
+ fs_group_name.Format (L" == Correctly expanded Groups inside Highlighting masks: %d" , ngroups);
834
+ em.AddDup (fs_group_name);
835
+ em.AddDup (L" " );
836
+ em.AddDup (L" == Highlighting masks after expand all groups:" );
837
+ em.AddDupWrap (fs);
838
+ }
839
+ em.AddDup (Msg::Ok);
840
+ em.AddDup (Msg::MaskGroupTitle);
841
+ if ( em.Show (MSG_LEFTALIGN, 2 ) == 1 )
842
+ MaskGroupsSettings ();
843
+ }
844
+
845
+ break ;
846
+ }
807
847
case KEY_NUMENTER:
808
848
case KEY_ENTER:
809
849
case KEY_F4: {
0 commit comments