Auswertung Experiment
Database tüddelei DBHanlder läuft gut für DIESE Datanbank struktur... App begonnen aber weit entfernt von gutem Stand
This commit is contained in:
677
Libs/schemer/schemer_export.m
Normal file
677
Libs/schemer/schemer_export.m
Normal file
@@ -0,0 +1,677 @@
|
||||
%SCHEMER_EXPORT Export current MATLAB color scheme to text file
|
||||
% If this is your first time using SCHEMER_EXPORT, please ensure you
|
||||
% read the IMPORTANT NOTE at the bottom of the help section before using
|
||||
% this function.
|
||||
%
|
||||
% SCHEMER_EXPORT() with no input will prompt the user to locate a
|
||||
% destination file via the GUI, and will save the current color scheme
|
||||
% to this location. Please read the IMORTANT NOTE below
|
||||
% before running this script or it may not work correctly.
|
||||
% The MATLAB preference options which are exported are:
|
||||
% - All settings in the Color pane of Preferences
|
||||
% - All settings in the Color > Programming Tools pane
|
||||
% - From Editor/Debugger > Display pane, the following:
|
||||
% - Highlight current line (whether to highlight, and the colour)
|
||||
% - Right-hand text limit (colour and thickness, whether on/off)
|
||||
% The output format is the same as used in MATLAB's preferences file,
|
||||
% which is found at FULLFILE(PREFDIR,'matlab.prf').
|
||||
%
|
||||
% SCHEMER_EXPORT(FILENAME) exports the relevant MATLAB preferences
|
||||
% to the file FILENAME.
|
||||
%
|
||||
% SCHEMER_EXPORT(FILENAME, FLAG_MODE) controls which settings are output
|
||||
% into the preference file FILENAME. Along with the colour settings for
|
||||
% MATLAB syntax highlighting, one can also export the boolean preferences
|
||||
% (such as whether cells and non-local variables, etc, should be coloured
|
||||
% differently to the regular backgound and text); and one can also export
|
||||
% the colour settings for syntax highlighting in other languages
|
||||
% supported by MATLAB.
|
||||
%
|
||||
% The FLAG_MODE settings available are:
|
||||
% 0 - neither booleans, nor additional languages are exported
|
||||
% 1 - boolean settings are exported, but not additional languages
|
||||
% 2 - additional language colours are exported, but not boolean settings
|
||||
% 3 - both booleans and additional languages are exported
|
||||
%
|
||||
% By default FLAG_MODE is set to 1, so boolean settings will be
|
||||
% exported, but the settings for syntax highlighting in additional
|
||||
% languages will not be.
|
||||
%
|
||||
% The colour settings for all MATLAB syntax highlighting will always be
|
||||
% exported, even for syntax options which are currently disabled, and
|
||||
% regardless of whether the boolean settings are being exported. This is
|
||||
% because users loading your exported color scheme may want syntax
|
||||
% options highlighted which you are not currently using. Consequently,
|
||||
% when designing a color scheme, it is advisable to set colours for all
|
||||
% possisble MATLAB colour settings, even if you don't usually use them.
|
||||
% By default, SCHEMER_IMPORT will not import boolean settings, so users
|
||||
% will keep their syntax options enabled or disabled as they prefer even
|
||||
% after importing your color scheme.
|
||||
%
|
||||
% Colours for highlighting syntax in other languages supported by MATLAB
|
||||
% (MuPAD, TLC, VRML, C++, Java, VHDL, Verilog, XML) can be set in the
|
||||
% preferences panel Editor/Debugger > Language. If you have not set any
|
||||
% of these colours yourself, you should not export them. If SCHEMER_IMPORT
|
||||
% loads a color scheme without additional language syntax included, the
|
||||
% MATLAB colours are extended to highlight syntax in the other languages
|
||||
% consistent with the MATLAB scheme.
|
||||
%
|
||||
% SCHEMER_EXPORT(FLAG_MODE, FILENAME), with a numeric input followed by a
|
||||
% string, will also work as above because the input order is reversible.
|
||||
%
|
||||
% SCHEMER_EXPORT(FLAG_MODE) with a single numeric input will open the GUI
|
||||
% to pick the filename and will save the output according to FLAG_MODE.
|
||||
%
|
||||
% RET = SCHEMER_EXPORT(...) returns 1 on success, 0 on user
|
||||
% cancellation at the output file selection screen, -1 on fopen error,
|
||||
% and -2 on any other error.
|
||||
%
|
||||
% [RET, NAMES, PREFS] = SCHEMER_EXPORT(...) also returns two cell
|
||||
% arrays listing the names and preferences which were saved to file.
|
||||
%
|
||||
% For more details on how to get and set MATLAB preferences with
|
||||
% commands, see the following URL.
|
||||
% http://undocumentedmatlab.com/blog/changing-system-preferences-programmatically
|
||||
%
|
||||
% IMPORTANT NOTE:
|
||||
% You must have, at any point since installing MATLAB, visited the
|
||||
% Color, Color>Programming Tools and Editor/Debugger>Display panes of
|
||||
% the Preferences diaglogue within MATLAB and then clicked OK in order
|
||||
% for all the settings to be exported correctly. You will obviously have
|
||||
% done this for any settings you have changed but, for example, you may
|
||||
% have left the Editor/Debugger>Display settings unchanged. If this
|
||||
% preference pane has not been set its entries will not have been
|
||||
% defined, and when trying to export these they will be incorrectly saved
|
||||
% as off (for booleans) or black (for colours).
|
||||
%
|
||||
% Example 1: User is not sure if they have OK'd all the relevent
|
||||
% Preferences panes (or sure they haven't).
|
||||
% - Open File>Preferences
|
||||
% - On the left-hand side
|
||||
% - Click Colors
|
||||
% - Click Programming Tools (underneath "Colors" as a subsection)
|
||||
% - Click Editor/Debugger (a different panel to Colors)
|
||||
% - Click Display (underneath "Editor/Debugger" as a subsection)
|
||||
% - Click OK
|
||||
% (Yes, that is literally all you need to do to make sure you can
|
||||
% export correctly. There is no need to click anywhere which was
|
||||
% not mentioned. You just have to have each pane appear, and then
|
||||
% click OK at the end.)
|
||||
% - Go to your command window and execute SCHEMER_EXPORT
|
||||
% - The GUI appears, and you pick where to save the file.
|
||||
%
|
||||
% Example 2: User is sure they have OK'd all the relevent Preferences
|
||||
% panes already.
|
||||
% schemer_export
|
||||
%
|
||||
% Example 3: User is sure they have OK'd all the relevent Preferences
|
||||
% panes already, knows the path they wish to save to, and doesn't want
|
||||
% to export their boolean settings.
|
||||
% schemer_export('some/path/schemeName.prf', 0)
|
||||
%
|
||||
% Example 4: User has set some colour preferences for C/C++ syntax
|
||||
% highlighting in addition to MATLAB syntax highlighting, and wants to
|
||||
% output this along with their boolean settings
|
||||
% schemer_export(3)
|
||||
%
|
||||
% See also SCHEMER_IMPORT, PREFDIR, COLOR2JAVARGBINT.
|
||||
|
||||
% Copyright (c) 2013-2016, Scott C. Lowe <scott.code.lowe@gmail.com>
|
||||
% All rights reserved.
|
||||
%
|
||||
% Redistribution and use in source and binary forms, with or without
|
||||
% modification, are permitted provided that the following conditions are
|
||||
% met:
|
||||
% * Redistributions of source code must retain the above copyright
|
||||
% notice, this list of conditions and the following disclaimer.
|
||||
% * Redistributions in binary form must reproduce the above copyright
|
||||
% notice, this list of conditions and the following disclaimer in
|
||||
% the documentation and/or other materials provided with the distribution
|
||||
%
|
||||
% THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
% AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
% IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
% ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||
% LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
% CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
% SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
% INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
% CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
% ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
% POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
function varargout = schemer_export(fname, flag_mode)
|
||||
|
||||
% ------------------------ Parameters -------------------------------------
|
||||
SCHEMER_VERSION = 'v1.4.0';
|
||||
SCHEMER_URLGIT = 'https://github.com/scottclowe/matlab-schemer';
|
||||
SCHEMER_URLFEX = 'https://www.mathworks.com/matlabcentral/fileexchange/53862-matlab-schemer';
|
||||
DEFOUTNAME = 'ColorSchemeForMATLAB.prf';
|
||||
|
||||
% ------------------------ Input handling ---------------------------------
|
||||
% Default inputs
|
||||
if nargin<2
|
||||
% Default is on. Recipient can pick themselves whether to import.
|
||||
flag_mode = 1;
|
||||
end
|
||||
if nargin<1
|
||||
fname = [];
|
||||
end
|
||||
% Input switching
|
||||
if nargin>=1 && ~ischar(fname) && ~isempty(fname)
|
||||
if ~isnumeric(fname)
|
||||
error('Invalid input argument 1');
|
||||
end
|
||||
if nargin==1
|
||||
% First input omitted
|
||||
flag_mode = fname;
|
||||
fname = [];
|
||||
elseif ischar(flag_mode)
|
||||
% Inputs switched
|
||||
tmp = fname;
|
||||
fname = flag_mode;
|
||||
flag_mode = tmp;
|
||||
clear tmp;
|
||||
else
|
||||
error('Invalid combination of inputs');
|
||||
end
|
||||
end
|
||||
% Mode handling
|
||||
if ~isnumeric(flag_mode)
|
||||
error('Export mode flag must be numeric.');
|
||||
elseif flag_mode < 0 || flag_mode > 3
|
||||
error('Bad mode specified: %s', num2str(flag_mode));
|
||||
end
|
||||
inc_bools = mod(flag_mode, 2);
|
||||
inc_otherlangs = flag_mode >= 2;
|
||||
% 0: no bools, no other languages
|
||||
% 1: yes bools, no other languages
|
||||
% 2: no bools, yes other languages
|
||||
% 3: yes bools, yes other languages
|
||||
|
||||
% ------------------------ Settings ---------------------------------------
|
||||
% Names of boolean preferences which should always be output
|
||||
names_boolean = { ...
|
||||
'ColorsUseSystem' ; ... % Color: Desktop: Use system colors
|
||||
};
|
||||
% Names of boolean preferences which the user can choose whether to output
|
||||
names_boolextra = { ...
|
||||
'ColorsUseMLintAutoFixBackground' ; ... % Color>PT: Analyser: autofix highlight
|
||||
'Editor.VariableHighlighting.Automatic' ; ... % Color>PT: Var&fn: auto highlight
|
||||
'Editor.NonlocalVariableHighlighting' ; ... % Color>PT: Var&fn: with shared scope
|
||||
'EditorCodepadHighVisible' ; ... % Color>PT: CellDisp: highlight cells
|
||||
'EditorCodeBlockDividers' ; ... % Color>PT: CellDisp: show lines between cells
|
||||
'Editorhighlight-caret-row-boolean' ; ... % Editor>Display: Highlight current line
|
||||
'EditorRightTextLineVisible' ; ... % Editor>Display: Show Right-hand text limit
|
||||
};
|
||||
% Names of preferences for which the values are integers
|
||||
names_integer = { ...
|
||||
'EditorRightTextLimitLineWidth' ; ... % Editor>Display: Right-hand text limit Width
|
||||
};
|
||||
% The names of the main colour panels, so we can let the user know by name
|
||||
% if there is an issue with any of them
|
||||
panels_main = { ...
|
||||
'Color' ; ...
|
||||
'Color > Programming Tools' ; ...
|
||||
'Editor/Debugger > Display' ; ...
|
||||
};
|
||||
% Names of colour preferences which are in the main panels and used in
|
||||
% MATLAB syntax highlighting
|
||||
names_color_main = { ...
|
||||
{ ... % Color panel
|
||||
'ColorsText' ; ... % Color: Desktop: main text colour
|
||||
'ColorsBackground' ; ... % Color: Desktop: main background
|
||||
'Colors_M_Keywords' ; ... % Color: Syntax: keywords
|
||||
'Colors_M_Comments' ; ... % Color: Syntax: comments
|
||||
'Colors_M_Strings' ; ... % Color: Syntax: strings
|
||||
'Colors_M_UnterminatedStrings' ; ... % Color: Syntax: unterminated strings
|
||||
'Colors_M_SystemCommands' ; ... % Color: Syntax: system commands
|
||||
'Colors_M_Errors' ; ... % Color: Syntax: errors
|
||||
'Colors_HTML_HTMLLinks' ; ... % Color: Other: hyperlinks
|
||||
} ...
|
||||
{ ... % Color > Programming Tools
|
||||
'Colors_M_Warnings' ; ... % Color>PT: Analyser: warnings
|
||||
'ColorsMLintAutoFixBackground' ; ... % Color>PT: Analyser: autofix
|
||||
'Editor.VariableHighlighting.Color' ; ... % Color>PT: Var&fn: highlight
|
||||
'Editor.NonlocalVariableHighlighting.TextColor' ; ... % Color>PT: Var&fn: with shared scope
|
||||
'Editorhighlight-lines' ; ... % Color>PT: CellDisp: highlight
|
||||
} ...
|
||||
{ ... % Editor/Debugger > Display
|
||||
'Editorhighlight-caret-row-boolean-color' ; ... % Editor>Display: Highlight current line Color
|
||||
'EditorRightTextLimitLineColor' ; ... % Editor>Display: Right-hand text limit line Color
|
||||
}
|
||||
};
|
||||
% Names of colour preferences which are known to have been added since the
|
||||
% year 2011, and so their presence in the preferences is not guaranteed
|
||||
% column 1: name of setting
|
||||
% column 2: first version in which preference might have been implemented
|
||||
% column 3: first version in which preference has been observed to exist
|
||||
names_color_versioned = { ...
|
||||
'Color_CmdWinWarnings' , ... % Color: Command Window Warning messages
|
||||
'7.13' , ... % Known to NOT be in 2011a (7.12)
|
||||
'8.2' ; ... % Known to be in 2013b
|
||||
'Color_CmdWinErrors' , ... % Color: Command Window Error messages
|
||||
'8.3' , ... % Known to NOT be in 2013b (8.2)
|
||||
'8.4' ; ... % Known to be in 2014b
|
||||
};
|
||||
% Names of colour preferences for syntax highlighting in languages other
|
||||
% than MATLAB
|
||||
names_color_otherlangs = { ...
|
||||
{ ... % MuPAD
|
||||
'Editor.Language.MuPAD.Color.keyword' ; ...
|
||||
'Editor.Language.MuPAD.Color.operator' ; ...
|
||||
'Editor.Language.MuPAD.Color.block-comment' ; ...
|
||||
'Editor.Language.MuPAD.Color.option' ; ...
|
||||
'Editor.Language.MuPAD.Color.string' ; ...
|
||||
'Editor.Language.MuPAD.Color.function' ; ...
|
||||
'Editor.Language.MuPAD.Color.constant' ; ...
|
||||
} ...
|
||||
{ ... % TLC
|
||||
'Editor.Language.TLC.Color.Colors_M_SystemCommands' ; ...
|
||||
'Editor.Language.TLC.Color.Colors_M_Keywords' ; ...
|
||||
'Editor.Language.TLC.Color.Colors_M_Comments' ; ...
|
||||
'Editor.Language.TLC.Color.string-literal' ; ...
|
||||
} ...
|
||||
{ ... % C/C++
|
||||
'Editor.Language.C.Color.keywords' ; ...
|
||||
'Editor.Language.C.Color.line-comment' ; ...
|
||||
'Editor.Language.C.Color.string-literal' ; ...
|
||||
'Editor.Language.C.Color.preprocessor' ; ...
|
||||
'Editor.Language.C.Color.char-literal' ; ...
|
||||
'Editor.Language.C.Color.errors' ; ...
|
||||
} ...
|
||||
{ ... % Java
|
||||
'Editor.Language.Java.Color.keywords' ; ...
|
||||
'Editor.Language.Java.Color.line-comment' ; ...
|
||||
'Editor.Language.Java.Color.string-literal' ; ...
|
||||
'Editor.Language.Java.Color.char-literal' ; ...
|
||||
} ...
|
||||
{ ... % VHDL
|
||||
'Editor.Language.VHDL.Color.Colors_M_Keywords' ; ...
|
||||
'Editor.Language.VHDL.Color.operator' ; ...
|
||||
'Editor.Language.VHDL.Color.Colors_M_Comments' ; ...
|
||||
'Editor.Language.VHDL.Color.string-literal' ; ...
|
||||
} ...
|
||||
{ ... % Verilog
|
||||
'Editor.Language.Verilog.Color.Colors_M_Comments' ; ...
|
||||
'Editor.Language.Verilog.Color.operator' ; ...
|
||||
'Editor.Language.Verilog.Color.Colors_M_Keywords' ; ...
|
||||
'Editor.Language.Verilog.Color.string-literal' ; ...
|
||||
} ...
|
||||
{ ... % XML
|
||||
'Editor.Language.XML.Color.error' ; ...
|
||||
'Editor.Language.XML.Color.tag' ; ...
|
||||
'Editor.Language.XML.Color.attribute' ; ...
|
||||
'Editor.Language.XML.Color.operator' ; ...
|
||||
'Editor.Language.XML.Color.value' ; ...
|
||||
'Editor.Language.XML.Color.comment' ; ...
|
||||
'Editor.Language.XML.Color.doctype' ; ...
|
||||
'Editor.Language.XML.Color.ref' ; ...
|
||||
'Editor.Language.XML.Color.pi-content' ; ...
|
||||
'Editor.Language.XML.Color.cdata-section' ; ...
|
||||
}
|
||||
};
|
||||
|
||||
% Names of colour preferences for syntax highlighting in languages other
|
||||
% than MATLAB
|
||||
names_color_vrml = { ...
|
||||
% VRML
|
||||
'Editor.Language.VRML.Color.keyword' ; ...
|
||||
'Editor.Language.VRML.Color.node-keyword' ; ...
|
||||
'Editor.Language.VRML.Color.field-keyword' ; ...
|
||||
'Editor.Language.VRML.Color.data-type-keyword' ; ...
|
||||
'Editor.Language.VRML.Color.terminal-symbol' ; ...
|
||||
'Editor.Language.VRML.Color.comment' ; ...
|
||||
'Editor.Language.VRML.Color.string' ; ...
|
||||
};
|
||||
% First version of matlab which uses VRMLX3DV instead of VRML
|
||||
version_vrmlx3dv = '9.0';
|
||||
|
||||
% Names of preferences for other language syntax and where setting value
|
||||
% is a string
|
||||
% column 1: name of preference
|
||||
% column 2: a regex which the string must match if it is to be exported
|
||||
% use '.' or '.+' to allow any non-empty string to be output
|
||||
% use '' or '.*' for anything, including empty strings
|
||||
% use '\S' for anything except empty or whitespace-only strings
|
||||
% use '^str1|str2|str3$' to allow only a finite set of strings
|
||||
names_string_otherlang = { ...
|
||||
'Editor.Language.Java.method' , ... % Java: Show methods
|
||||
'^(none|bold|italic)$' ; ...
|
||||
};
|
||||
|
||||
|
||||
% ------------------------ Setup ------------------------------------------
|
||||
% Initialise output
|
||||
if nargout==0
|
||||
% Empty if no output requested
|
||||
varargout = {};
|
||||
else
|
||||
% -2 to signify unknown error otherwise
|
||||
varargout = {-2};
|
||||
end
|
||||
% If we are outputting all the bools, add them to the list to do
|
||||
if inc_bools
|
||||
names_boolean = [names_boolean; names_boolextra];
|
||||
end
|
||||
|
||||
% ------------------------ Check -------------------------------------
|
||||
% Check the user is not exporting without having visited any of the
|
||||
% preference panels, or has otherwise set text and background to match
|
||||
if isequal(com.mathworks.services.Prefs.getColorPref('ColorsText').getRGB, ...
|
||||
com.mathworks.services.Prefs.getColorPref('ColorsBackground').getRGB)
|
||||
|
||||
% Define the base error message. We will add to it depending on the
|
||||
% exact set up.
|
||||
msg = 'Colour for text and background appear to be the same.';
|
||||
|
||||
% The values match, so give an error
|
||||
if com.mathworks.services.Prefs.getColorPref('ColorsText').getRGB ...
|
||||
== -16777216
|
||||
% Since the colour is black, it seems the user hasn't visited the
|
||||
% colour preference panes at all
|
||||
msg = [msg, 10, ...
|
||||
'Are you sure you have visited all the preference panels,'...
|
||||
' as per the instructions in the function description?'];
|
||||
|
||||
elseif com.mathworks.services.Prefs.getBooleanPref('ColorsUseSystem')
|
||||
% The colour is something else, but both text and background match.
|
||||
% The user is managing to use the colours by overriding them with
|
||||
% the system colours.
|
||||
msg = [msg, 10, ...
|
||||
'Although you have enabled system colors, the underlying ', ...
|
||||
'colour settings match. This is not permitted because the ', ...
|
||||
'text would be illegible if system colours were disabled.'];
|
||||
|
||||
else
|
||||
% The colour is something else, but both text and background match.
|
||||
% Presumably the text is currently illegible to the user right now.
|
||||
msg = [msg, 10, ...
|
||||
'This is not permitted because the text is illegible.'];
|
||||
end
|
||||
|
||||
% Raise the error with the completed message
|
||||
error(msg);
|
||||
end
|
||||
|
||||
% Go through all the main color preference panels, checking their settings
|
||||
% are available to us
|
||||
% Initialise outer level of holding variables
|
||||
cprefs_main = cell(size(names_color_main));
|
||||
colors_main = cell(size(names_color_main));
|
||||
% Loop over every one of the main colour preference panels
|
||||
for iPanel = 1:numel(names_color_main)
|
||||
% Fetch the colours for this panel
|
||||
[cprefs_main{iPanel}, colors_main{iPanel}] = ...
|
||||
fetch_colors(names_color_main{iPanel});
|
||||
% Only give the error on the Color and Programming Tools pages, because
|
||||
% there are only two colours set in the Editor > Display and they could
|
||||
% plausibly both be black. We instead check this panel seperately below.
|
||||
if iPanel <= 2 && all(colors_main{iPanel} == -16777216)
|
||||
% This panel appears to all be black, so we make an error
|
||||
error(...
|
||||
['Colours for all of %1$s panel appear to be black. ' 10 ...
|
||||
'This will be because you have never set the preferences ' ...
|
||||
'in this panel. You can do so by visiting the %1$s ' ...
|
||||
'Preferences page and clicking OK, as detailed in the ' ...
|
||||
'description of this function.'], panels_main{iPanel});
|
||||
end
|
||||
end
|
||||
% Check the Editor > Display panel has been initialised.
|
||||
% If it hasn't, the line width will appear to be 0, which is not a possible
|
||||
% setting.
|
||||
if com.mathworks.services.Prefs.getIntegerPref(...
|
||||
'EditorRightTextLimitLineWidth') == 0
|
||||
% It hasn't been set, so we generate an error
|
||||
error(...
|
||||
['Properties from the %1$s preference panel could not be loaded. ' ...
|
||||
10 ...
|
||||
'This will be because you have never set the preferences in '...
|
||||
'this panel. You can do so by visiting the %1$s ' ...
|
||||
'Preferences page and clicking OK, as detailed in the ' ...
|
||||
'description of this function.'], panels_main{3});
|
||||
end
|
||||
|
||||
% Let the user know they are doing a stupid thing if they export when using
|
||||
% the default settings
|
||||
if com.mathworks.services.Prefs.getBooleanPref('ColorsUseSystem')
|
||||
warning(...
|
||||
['You are exporting with system colors for main text and background.'...
|
||||
10, 'The exported theme will look different on different systems.']);
|
||||
end
|
||||
|
||||
% ------------------------ File stuff -------------------------------------
|
||||
if isempty(fname)
|
||||
% Get user's name
|
||||
username = java.lang.System.getProperty('user.name');
|
||||
% Prepend username to default filename
|
||||
outFileName = [char(username) DEFOUTNAME];
|
||||
% Dialog asking for savename, with smart default output filename
|
||||
[filename, pathname] = uiputfile(outFileName, ...
|
||||
'Select file to write MATLAB color scheme');
|
||||
% End if user cancels
|
||||
if isequal(filename, 0);
|
||||
if nargout>0; varargout{1} = 0; end;
|
||||
return;
|
||||
end
|
||||
fname = fullfile(pathname, filename);
|
||||
end
|
||||
|
||||
% Open for write access of text file, create if necessary
|
||||
fid = fopen(fname, 'w+t', 'n');
|
||||
if isequal(fid, -1);
|
||||
if nargout>0; varargout{1} = -1; end;
|
||||
return;
|
||||
end
|
||||
% Add a cleanup object incase of failure
|
||||
finishup = onCleanup(@() fclose(fid));
|
||||
|
||||
% Find the name of the color scheme based on the filename
|
||||
[~, schemename] = fileparts(fname);
|
||||
|
||||
% Write a few comments to the start of the file
|
||||
fprintf(fid, '# %s - MATLAB color scheme\n', schemename);
|
||||
fprintf(fid, '# Generated with schemer_export %s, on MATLAB %s\n', ...
|
||||
SCHEMER_VERSION, version);
|
||||
fprintf(fid, '# %s\n', char(java.util.Date));
|
||||
fprintf(fid, '# To enable this color scheme in MATLAB use schemer_import, available at:\n');
|
||||
fprintf(fid, '# %s\n', SCHEMER_URLGIT);
|
||||
fprintf(fid, '# %s\n', SCHEMER_URLFEX);
|
||||
|
||||
|
||||
% ------------------------ Read and Write ---------------------------------
|
||||
% Loop through the boolean type settings
|
||||
prefs_boolean = cell(size(names_boolean));
|
||||
for i=1:length(names_boolean)
|
||||
% Check the name of this preference
|
||||
nm = names_boolean{i};
|
||||
% Get the value of this boolean preference
|
||||
prefs_boolean{i} = com.mathworks.services.Prefs.getBooleanPref(nm);
|
||||
% Construct the string to output
|
||||
outstr = [nm '=B'];
|
||||
if prefs_boolean{i}
|
||||
outstr = [outstr 'true'];
|
||||
else
|
||||
outstr = [outstr 'false'];
|
||||
end
|
||||
outstr = [outstr '\n'];
|
||||
% Write this boolean value to the output file
|
||||
fprintf(fid, outstr);
|
||||
end
|
||||
|
||||
% Loop through the integer type settings
|
||||
prefs_integer = cell(size(names_integer));
|
||||
for i=1:length(names_integer)
|
||||
% Check the name of this preference
|
||||
nm = names_integer{i};
|
||||
% Get the integer value for this preference
|
||||
prefs_integer{i} = com.mathworks.services.Prefs.getIntegerPref(nm);
|
||||
% Write this integer value to the output file
|
||||
fprintf(fid, '%s=I%d\n', nm, prefs_integer{i});
|
||||
end
|
||||
|
||||
% Loop through the colour type settings for MATLAB syntax highlighting
|
||||
for iPanel=1:numel(names_color_main)
|
||||
for iPref=1:numel(names_color_main{iPanel})
|
||||
% Check the name of this preference
|
||||
nm = names_color_main{iPanel}{iPref};
|
||||
% Write its colour value to the output file
|
||||
fprintf(fid, '%s=C%d\n', nm, colors_main{iPanel}(iPref));
|
||||
end
|
||||
end
|
||||
|
||||
% Loop over colours which may or may not be available
|
||||
% Initialise cell arrays for successful fields
|
||||
onames_versioned = {};
|
||||
cprefs_versioned = {};
|
||||
% Loop over the colours
|
||||
for iPref=1:size(names_color_versioned, 1)
|
||||
% Check the name of this preference
|
||||
nm = names_color_versioned{iPref, 1};
|
||||
% Try to get the colour for this preference
|
||||
prf = com.mathworks.services.Prefs.getColorPref(nm);
|
||||
% If the current MATLAB version is less the first version where it is
|
||||
% not known whether it has implemented this preference feature
|
||||
% Or if the MATLAB version is less than the first version known to have
|
||||
% implemented the feature and the colour appears to be black
|
||||
% Then we skip this preference
|
||||
if verLessThan('matlab', names_color_versioned{iPref, 2}) ...
|
||||
|| ( ...
|
||||
verLessThan('matlab', names_color_versioned{iPref, 3}) ...
|
||||
&& prf.getRGB==-16777216 ...
|
||||
)
|
||||
% It appears that this version of MATLAB does not include this
|
||||
% preference. So we skip it.
|
||||
continue;
|
||||
end
|
||||
% Otherwise, we write its colour value to the output file
|
||||
fprintf(fid, '%s=C%d\n', nm, prf.getRGB);
|
||||
% And we add the values to the list to output
|
||||
onames_versioned{end+1} = nm;
|
||||
cprefs_versioned{end+1} = prf;
|
||||
end
|
||||
|
||||
|
||||
% Initialise a cell array to output for other language syntax
|
||||
onames_langs = {};
|
||||
cprefs_langs = {};
|
||||
% Loop through the colour type settings for other language syntax, only if
|
||||
% it is requested
|
||||
if inc_otherlangs
|
||||
% Go through all the language color syntax preference panels, checking
|
||||
% their settings are available to us
|
||||
% Loop over every one of the main colour preference panels
|
||||
for iPanel = 1:numel(names_color_otherlangs)
|
||||
[panel_prefs, panel_colors] = fetch_colors(...
|
||||
names_color_otherlangs{iPanel});
|
||||
if all(panel_colors==-16777216)
|
||||
% All the colours in this panel are black, so we assume the
|
||||
% color settings have not loaded because they have not been set
|
||||
continue;
|
||||
end
|
||||
% Not all the colours are black, so we assume we have loaded the
|
||||
% values for this language panel.
|
||||
|
||||
% Loop again over every colour setting in the panel
|
||||
for iPref = 1:numel(names_color_otherlangs{iPanel})
|
||||
% Get the name for the color setting we are interested in
|
||||
nm = names_color_otherlangs{iPanel}{iPref};
|
||||
% Write its colour value to the output file
|
||||
fprintf(fid, '%s=C%d\n', nm, panel_colors(iPref));
|
||||
end
|
||||
% Remember the prefences so we can return them
|
||||
onames_langs = [onames_langs; names_color_otherlangs{iPanel}];
|
||||
cprefs_langs = [cprefs_langs; panel_prefs];
|
||||
end
|
||||
end
|
||||
|
||||
% We have to do special handling for VRML because in R2016a, MathWorks
|
||||
% changed the encoding name from VRML to VRMLX3DV. Aside from this, nothing
|
||||
% else was changed. The rest of the preference name is the same, and the
|
||||
% default values are unchanged.
|
||||
if inc_otherlangs
|
||||
% Deal with VRML and VRMLX3DV possibilities
|
||||
if verLessThan('matlab', version_vrmlx3dv)
|
||||
names_color_vrml_usable = names_color_vrml;
|
||||
else
|
||||
names_color_vrml_usable = strrep(names_color_vrml, ...
|
||||
'.VRML.', '.VRMLX3DV.');
|
||||
end
|
||||
% Get the colours from the appropriate preference names
|
||||
[panel_prefs, panel_colors] = fetch_colors(names_color_vrml_usable);
|
||||
% If all the colours in this panel are black, we assume the color
|
||||
% settings have not loaded because they have not been set.
|
||||
if ~all(panel_colors==-16777216)
|
||||
for iPref = 1:numel(names_color_vrml)
|
||||
% Get the name for the color setting we are interested in
|
||||
nm = names_color_vrml{iPref};
|
||||
% Write its colour value to the output file
|
||||
fprintf(fid, '%s=C%d\n', nm, panel_colors(iPref));
|
||||
end
|
||||
% Remember the prefences so we can return them
|
||||
onames_langs = [onames_langs; names_color_otherlangs{iPanel}];
|
||||
cprefs_langs = [cprefs_langs; panel_prefs];
|
||||
end
|
||||
end
|
||||
|
||||
% Do strings for other languages
|
||||
if inc_otherlangs
|
||||
for iPref=1:size(names_string_otherlang, 1)
|
||||
% Get the name for the string preference we are interested in
|
||||
nm = names_string_otherlang{iPref, 1};
|
||||
% Read the string
|
||||
str = com.mathworks.services.Prefs.getStringPref(nm);
|
||||
% Turn it from a java.lang.String object to a regular char object
|
||||
str = char(str);
|
||||
% Check it is okay
|
||||
if isempty(regexp(str, names_string_otherlang{iPref, 2}, ...
|
||||
'start', 'emptymatch'))
|
||||
% It did not have any matches for the regex, so we will not use
|
||||
% this setting. We will assume its value is not available.
|
||||
continue;
|
||||
end
|
||||
% It matched the regex for acceptable values, so we will export it
|
||||
fprintf(fid, '%s=S%s\n', nm, str);
|
||||
% Remember the prefence so we can return it
|
||||
onames_langs = [onames_langs; nm];
|
||||
cprefs_langs = [cprefs_langs; str];
|
||||
end
|
||||
end
|
||||
|
||||
% ------------------------ Tidy up ----------------------------------------
|
||||
% fclose(fid); % Don't need to close as it will autoclose
|
||||
if nargout>0; varargout{1} = 1; end;
|
||||
|
||||
fprintf('Exported color scheme to %s\n', fname);
|
||||
|
||||
if nargout>1;
|
||||
varargout{2} = cat(1, ...
|
||||
names_boolean , ...
|
||||
names_integer , ...
|
||||
names_color_main{:} , ...
|
||||
onames_versioned , ...
|
||||
onames_langs );
|
||||
varargout{3} = cat(1, ...
|
||||
prefs_boolean , ...
|
||||
prefs_integer , ...
|
||||
cprefs_main{:} , ...
|
||||
cprefs_versioned , ...
|
||||
cprefs_langs );
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
|
||||
function [prefs, colors] = fetch_colors(names)
|
||||
% Initialise holding variable for settings in this panel
|
||||
prefs = cell(size(names));
|
||||
colors = nan(size(names));
|
||||
% Loop over every colour setting in the panel
|
||||
for iName = 1:numel(names)
|
||||
% Read the preference for this colour and get a Java color object
|
||||
prefs{iName} = com.mathworks.services.Prefs.getColorPref(...
|
||||
names{iName});
|
||||
% Turn this into an integer colour value
|
||||
colors(iName) = prefs{iName}.getRGB;
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user