Database tüddelei DBHanlder läuft gut für DIESE Datanbank struktur... App begonnen aber weit entfernt von gutem Stand
677 lines
30 KiB
Matlab
677 lines
30 KiB
Matlab
%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 |