26 persistent majorVersion minorVersion
27 if isempty(majorVersion)
32 v = sscanf(version,
" %d. ", 2);
41 if ~exist(
" el ",
" var ") || isempty(el), el=
handle([]); end
43 if nargin<1, showDemo(majorVersion,minorVersion);
return; end
44 if isempty(style),
return; end
45 if all(ishandle(style)) && length(style)~=3
51 if nargin<2, format = style; style=
" text "; end
56 try useDesktop = usejava(
" desktop ");
catch, useDesktop =
false; end
57 if isdeployed | ~useDesktop
63 count1 = fprintf(format,varargin[:]);
67 [underlineFlag, boldFlag, style] = processStyleInfo(style);
71 format = [
" <a href=''> " format
" </a> "];
76 if majorVersion < 7 || (majorVersion==7 && minorVersion <= 1)
83 if (majorVersion > 7 || minorVersion >= 13)
84 format = [
" <strong> " format
" </strong> "];
91 cmdWinDoc = com.mathworks.mde.cmdwin.CmdWinDocument.getInstance;
92 lastPos = cmdWinDoc.getLength;
100 if majorVersion<7 || (majorVersion==7 && minorVersion<13)
102 fprintf(
" <a href=''> </a> ");
104 elseif format(end)~=10
115 mde = com.mathworks.mde.desk.MLDesktop.getInstance;
116 cw = mde.getClient(
" Command Window ");
117 xCmdWndView = cw.getComponent(0).getViewport.getComponent(0);
122 com.mathworks.services.Prefs.setColorPref(
" CW_BG_Color ",xCmdWndView.getBackground);
125 count1 = fprintf(2,format,varargin[:]);
130 docElement = cmdWinDoc.getParagraphElement(lastPos+1);
131 if majorVersion<7 || (majorVersion==7 && minorVersion<13)
132 if bolFlag && ~underlineFlag
136 setElementStyle(docElement,
" CW_BG_Color ",1+underlineFlag,majorVersion,minorVersion);
139 el(end+1) =
handle(docElement);
144 fixHyperlink(docElement);
149 while docElement.getStartOffset < cmdWinDoc.getLength
152 specialFlag = underlineFlag | boldFlag;
153 setElementStyle(docElement,style,specialFlag,majorVersion,minorVersion);
155 docElement2 = cmdWinDoc.getParagraphElement(docElement.getEndOffset+1);
156 if isequal(docElement,docElement2),
break; end
157 docElement = docElement2;
166 el(end+1) =
handle(docElement);
306 underlineIdx = (style==
" - ") | (style==
" _ ");
310 style = style(~underlineIdx);
314 boldIdx = (style==
" * ");
317 style = style(~boldIdx);
319 if underlineFlag && boldFlag
320 warning(
" YMA:cprintf:BoldUnderline ",
" Matlab does not support both bold & underline ")
326 if any(style==
" " | style==
" , " | style==
" ; ")
327 style = str2num(style);
333 if isnumeric(style) && length(style)==3 &&
all(style<=1) &&
all(abs(style)>=0)
338 style = getColorStyle(style);
340 elseif ~ischar(style)
341 error(
" YMA:cprintf:InvalidStyle ",
" Invalid style - see help section for a list of valid style values ")
346 validStyles = [
" Text ",
" Keywords ",
" Comments ",
" Strings ",
" UnterminatedStrings ",
" SystemCommands ",
" Errors ", ...
347 " Black ",
" Cyan ",
" Magenta ",
" Blue ",
" Green ",
" Red ",
" Yellow ",
" White ", ...
349 matches = find(strncmpi(style,validStyles,length(style)));
353 error(
" YMA:cprintf:InvalidStyle ",
" Invalid style - see help section for a list of valid style values ")
356 elseif length(matches) > 1
357 error(
" YMA:cprintf:AmbigStyle ",
" Ambiguous style name - supply extra characters for uniqueness ")
361 style =
" ColorsText ";
366 style = [
" Colors_M_ " validStyles[matches]];
369 elseif matches < length(validStyles)
370 colors = [0,0,0; 0,1,1; 1,0,1; 0,0,1; 0,1,0; 1,0,0; 1,1,0; 1,1,1];
371 requestedColor = colors(matches-7,:);
372 style = getColorStyle(requestedColor);
376 style =
" Colors_HTML_HTMLLinks ";
386 intColor = int32(rgb*255);
387 javaColor = java.awt.Color(intColor(1), intColor(2), intColor(3));
388 styleName = sprintf(
" [%d,%d,%d] ",intColor);
389 com.mathworks.services.Prefs.setColorPref(styleName,javaColor);
396 tokens = docElement.getAttribute(
" SyntaxTokens ");
397 links = docElement.getAttribute(
" LinkStartTokens ");
398 if length(links) > length(tokens(1))
399 delta = length(links) > length(tokens(1));
409 tokens = docElement.getAttribute(
" SyntaxTokens ");
410 urls = docElement.getAttribute(
" HtmlLink ");
412 links = docElement.getAttribute(
" LinkStartTokens ");
415 doc = docElement.getDocument;
418 for idx = 1 : length(offsets)-1
420 if strcmp(styles(idx).
char,
" Colors_M_Errors ")
421 character = char(doc.getText(offsets(idx)+docElement.getStartOffset,1));
422 if strcmp(character,
" ")
423 if isempty(urls(idx)) && links(idx)==0
425 styles(idx) = java.lang.String(
" CW_BG_Color ");
439 if nargin<3, specialFlag=0; end
442 tokens = docElement.getAttribute(
" SyntaxTokens ");
445 oldStyles[end+1] = styles.cell;
448 extraInd =
double(majorVersion>7 || (majorVersion==7 && minorVersion>=13));
451 if ~strcmp(
" CWLink ",
char(styles(end-hyperlinkFlag))) && ...
452 strcmp(
" CWLink ",
char(styles(end-hyperlinkFlag-1)))
456 hyperlinkFlag = ~isempty(strmatch(
" CWLink ",tokens(2)));
457 hyperlinkFlag = 0 + any(cellfun(@(c)(~isempty(c)&&strcmp(c,
" CWLink ")),tokens(2).
cell));
460 styles(end-extraInd) = java.lang.String();
461 styles(end-extraInd-specialFlag) = java.lang.String(style);
464 styles(end-specialFlag) = java.lang.String(style);
467 oldStyles[end] = [oldStyles[end] styles.cell];
474 links = docElement.getAttribute(
" LinkStartTokens ");
483 urls = docElement.getAttribute(
" HtmlLink ");
485 urlTargets = urls(2);
486 for urlIdx = 1 : length(urlTargets)
488 if urlTargets(urlIdx).length < 1
489 urlTargets(urlIdx) = [];
504 bolds = docElement.getAttribute(
" BoldStartTokens ");
522 numElements = length(docElements);
523 cmdWinDoc = docElements(1).getDocument;
524 for elementIdx = 1 : numElements
525 if numElements > 1, fprintf(
" Element #%d:\n ",elementIdx); end
526 docElement = docElements(elementIdx);
527 if ~isjava(docElement), docElement = docElement.java; end
531 tokens = docElement.getAttribute(
" SyntaxTokens ");
532 if isempty(tokens),
continue; end
533 links = docElement.getAttribute(
" LinkStartTokens ");
534 urls = docElement.getAttribute(
" HtmlLink ");
535 try bolds = docElement.getAttribute(
" BoldStartTokens ");
catch, bolds = []; end
537 tokenLengths = tokens(1);
538 for tokenIdx = 1 : length(tokenLengths)-1
539 tokenLength = diff(tokenLengths(tokenIdx+[0,1]));
541 tokenLength = docElement.getEndOffset - docElement.getStartOffset - tokenLengths(tokenIdx);
543 txt[tokenIdx] = cmdWinDoc.getText(docElement.getStartOffset+tokenLengths(tokenIdx),tokenLength).char;
546 lastTokenStartOffset = docElement.getStartOffset + tokenLengths(end);
547 txt[end+1] = cmdWinDoc.getText(lastTokenStartOffset, docElement.getEndOffset-lastTokenStartOffset).char;
551 txt = strrep(txt
" ,sprintf( "\n
" ), "\n^
t);
553 data = [tokens(2).cell m2c(tokens(1)) m2c(links) m2c(urls(1))
cell(urls(2)) m2c(bolds) txt];
555 disp(
" SyntaxTokens(2,1) - LinkStartTokens - HtmlLink(1,2) - BoldStartTokens - txt ");
556 disp(
" ============================================================================== ");
560 data = [tokens(2).cell m2c(tokens(1)) m2c(links) txt];
562 disp([tokens(2).
cell m2c(tokens(1)) txt]);
564 data = [m2c(links) m2c(urls(1))
cell(urls(2))];
567 data = [m2c(links) urls.cell];
578 cells = num2cell(data);
584 fprintf(
" cprintf displays formatted text in the Command Window.\n\n ");
585 fprintf(
" Syntax: count = cprintf(style,format,...); click <a href='matlab:help cprintf'>here</a> for details.\n\n ");
586 url =
" http://UndocumentedMatlab.com/blog/cprintf/ ";
587 fprintf([
" Technical description: <a href=' " url
" '> " url
" </a>\n\n "]);
588 fprintf(
" Demo:\n\n ");
589 boldFlag = majorVersion>7 || (majorVersion==7 && minorVersion>=13);
590 s = [
" cprintf( "" text "" , "" regular black text "" ); " 10 ...
591 " cprintf( "" hyper "" , "" followed %s "" , "" by "" ); " 10 ...
592 " cprintf( "" key "" , "" %d colored "" , " num2str(4+boldFlag)
" ); " 10 ...
593 " cprintf( "" -comment "" , "" & underlined "" ); " 10 ...
594 " cprintf( "" err "" , "" elements:\n "" ); " 10 ...
595 " cprintf( "" cyan "" , "" cyan "" ); " 10 ...
596 " cprintf( "" _green "" , "" underlined green "" ); " 10 ...
597 " cprintf(-[1,0,1], "" underlined magenta "" ); " 10 ...
598 " cprintf([1,0.5,0], "" and multi-\nline orange\n "" ); " 10];
603 s = [s
" cprintf( "" *blue "" , "" and *bold* (R2011b+ only)\n "" ); " 10];
604 s = strrep(s,
" ) ",
" "" ) ");
605 s = strrep(s,
" ,5) ",
" "" ,5) ");
606 s = strrep(s,
" \n ",
" \n ");
function cprintf>setElementStyle(docElement, style, specialFlag, majorVersion, minorVersion)
function delta = cprintf>getUrlsFix(docElement)
A MatLab cell array or matrix.
function cprintf>showDemo(majorVersion, minorVersion)
Matlab's base handle class (documentation generation substitute)
function cprintf>fixHyperlink(docElement)
A variable number of input arguments.
function [ underlineFlag , boldFlag , style ] = cprintf>processStyleInfo(style)
function cells = cprintf>m2c(data)
function count = cprintf(style, format, varargin)
CPRINTF displays styled formatted text in the Command Window.
function styleName = cprintf>getColorStyle(rgb)
function cprintf>dumpElement(docElements)