preparecode4blog.m
function preparecode4blog(maxcolumns) if nargin == 0 maxcolumns = 71; elseif maxcolumns <=4 error(['PREPARETEXT4HTML: el numero maximo de columnas debe ser'... ' mayor de 4']) end [file, path]=uigetfile('*.*','Abrir archivo...'); ruta=[path,file]; espacio = ' '; comentario = '%'; stringlist = textread(ruta, '%s','delimiter','\n','whitespace', ''); lines = length(stringlist); newstringlist = cell(lines, 1); newstringlist{1} = '<pre>'; inew = 2; for i = 1:lines string = cell(1); string{1} = stringlist{i}; ii = 1; % su valor incrementarA si el renglon se divide en dos % o mas. % quitar espacios del final del renglon para estimar bien su % tamaño, etc... while ~isempty(string{1}) & (string{1}(end) == espacio) string{1}(end) = []; end if ~isempty(string{1}) escomentario = 0; esliteral = 0; while length(string{ii}) > maxcolumns % buscar primer caracter del renglon primerc = 1; while (string{ii}(primerc) == espacio) & (primerc < ... (maxcolumns - 8)) primerc = primerc + 1; end if primerc == (maxcolumns - 8) error(['No es posible ajustar el documento al '... 'ancho deseado sin romper el nivel de tabulacion.' ... 'Linea ' num2str(i)]) end % buscar espacio por donde cortar caracter = maxcolumns - 4; while (string{ii}(caracter) ~= espacio) & (caracter > ... max(primerc, 4)) caracter = caracter - 1; end if caracter == max(primerc, 4) caracter = maxcolumns - 4; end % comprobar si estamos en un comentario if any(string{ii}(primerc:caracter) == comentario) escomentario = 1; end % comprobar si estamos en un literal if ~escomentario if mod(sum(string{ii}(primerc:caracter) == ''''),2) > 0 esliteral = 1; end end if escomentario string{ii + 1} = [repmat(espacio, 1, primerc-1), ... comentario, espacio, string{ii}(caracter+1:end)]; string{ii} = string{ii}(1:caracter); elseif esliteral string{ii + 1} = [repmat(espacio, 1, primerc-1), ... '''', string{ii}(caracter+1:end)]; string{ii} = [string{ii}(1:caracter), '''...']; msg = sprintf(['Atencion: Cadena de caracteres '... 'rota en la linea ' num2str(inew + ii - 1)... '\nEs posible que tenga que concatenar las '... 'dos partes manualmente']); disp(msg) else string{ii + 1} = [repmat(espacio, 1, primerc-1), ... string{ii}(caracter+1:end)]; string{ii} = [string{ii}(1:caracter), '...']; end ii = ii + 1; end % Si el ultimo renglon es un comentario a medias, se une % al siguiente renglon de comentario. if escomentario & (string{ii}(end) ~= '.') & (i < lines) & ... (ii > 1) if ~isempty(stringlist{i+1}) % buscar primer caracter del renglon siguiente % (esto se repite dos veces por renglon. No esta % optimizado. No importa) primercnext = 1; while (stringlist{i+1}(primercnext) == espacio) & ... (primercnext < ... min(length(stringlist{i+1}),(maxcolumns - 8))) primercnext = primercnext + 1; end if stringlist{i+1}(primercnext) == comentario stringlist{i + 1} = [string{ii} espacio ... stringlist{i + 1}(2:end)]; ii = ii - 1; end end end end % Copiamos los renglones a newstringlist for j = 1:ii newstringlist{inew} = string{j}; inew = inew + 1; end % disp(['listo renglon ' num2str(i) ' de ' num2str(lines)]) end newstringlist{inew} = '</pre>'; for i = 2:length(newstringlist)-1 newstringlist{i} = replace(newstringlist{i}, '&', '&'); newstringlist{i} = replace(newstringlist{i}, '<', '<'); newstringlist{i} = replace(newstringlist{i}, '>', '>'); end [file, path]=uiputfile('*.*','Guardar como...'); ruta=[path,file]; fid = fopen(ruta, 'w'); for i = 1:length(newstringlist) fprintf(fid, '%s\n ', newstringlist{i}); end fclose(fid); function strout = replace(strin, s1, s2) strout = []; caracter1 = 1; caracter2 = 2; indices = findstr(strin, s1); if ~isempty(indices) for i = 1:length(indices) caracter2 = indices(i); if caracter2 > caracter1 strout = [strout, strin(caracter1:caracter2-1), s2]; else strout = [strout, s2]; end caracter1 = caracter2 +1; end if indices(end) < length(strin) strout = [strout strin(indices(end) + 1:end)]; end else strout = strin; end
About this entry
You’re currently reading “preparecode4blog.m,” an entry on Códigos de "Polo Estable"
- Publicado:
- diciembre 4, 2009 / 7:47 pm
- Categoría:
- matlab
- Etiquetas:
1 comentario
Jump to comment form | comment rss [?] | trackback uri [?]