Browse Source

[svn r14104] improve naming of steps

Eric Marguin 17 years ago
parent
commit
bb2b874672

+ 4 - 4
main/inc/lib/ppt2png/AbstractDokeosDocumentConverter.java

@@ -68,14 +68,14 @@ public abstract class AbstractDokeosDocumentConverter extends AbstractOpenOffice
 
 	public AbstractDokeosDocumentConverter(OpenOfficeConnection connection, int width, int height) {		
 		super(connection);
-		this.width = 800;
-		this.height = 600;
+		this.width = width;
+		this.height = height;
 	}
 
 	public AbstractDokeosDocumentConverter(OpenOfficeConnection connection, DocumentFormatRegistry formatRegistry, int width, int height) {
 		super(connection, formatRegistry);
-		this.width = 800;
-		this.height = 600;
+		this.width = width;
+		this.height = height;
 	}
 
 	/**

BIN
main/inc/lib/ppt2png/OogieDocumentConverter.class


+ 69 - 16
main/inc/lib/ppt2png/OogieDocumentConverter.java

@@ -14,24 +14,17 @@
 // http://www.gnu.org/copyleft/lesser.html
 //
 
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.util.HashMap;
+import java.util.Arrays;
 import java.util.Map;
 
 import org.apache.commons.io.FilenameUtils;
-import org.apache.commons.io.IOUtils;
 
 import com.artofsolving.jodconverter.DocumentConverter;
-import com.artofsolving.jodconverter.DocumentFormat;
 import com.artofsolving.jodconverter.DocumentFormatRegistry;
 import com.artofsolving.jodconverter.openoffice.connection.OpenOfficeConnection;
 import com.artofsolving.jodconverter.openoffice.connection.OpenOfficeException;
 import com.artofsolving.jodconverter.openoffice.converter.StreamOpenOfficeDocumentConverter;
+import com.sun.star.awt.Point;
 import com.sun.star.beans.PropertyValue;
 import com.sun.star.container.XNamed;
 import com.sun.star.document.XExporter;
@@ -39,10 +32,12 @@ import com.sun.star.document.XFilter;
 import com.sun.star.drawing.XDrawPage;
 import com.sun.star.drawing.XDrawPages;
 import com.sun.star.drawing.XDrawPagesSupplier;
+import com.sun.star.drawing.XShape;
+import com.sun.star.drawing.XShapes;
 import com.sun.star.frame.XComponentLoader;
 import com.sun.star.lang.XComponent;
 import com.sun.star.lang.XMultiComponentFactory;
-import com.sun.star.ucb.XFileIdentifierConverter;
+import com.sun.star.text.XText;
 import com.sun.star.uno.UnoRuntime;
 
 /**
@@ -60,7 +55,7 @@ import com.sun.star.uno.UnoRuntime;
  */
 public class OogieDocumentConverter extends AbstractDokeosDocumentConverter {
 	
-	public OogieDocumentConverter(OpenOfficeConnection connection, int width, int height) {		
+	public OogieDocumentConverter(OpenOfficeConnection connection, int width, int height) {
 		super(connection, width, height);
 	}
 
@@ -100,6 +95,7 @@ public class OogieDocumentConverter extends AbstractDokeosDocumentConverter {
 			filterDatas[1].Name = "PixelHeight";
 			filterDatas[1].Value = new Integer(this.height);
 			filterDatas[2].Name = "LogicalWidth";
+			
 			filterDatas[2].Value = new Integer(2000);
 			filterDatas[3].Name = "LogicalHeight";
 			filterDatas[3].Value = new Integer(2000);
@@ -110,20 +106,74 @@ public class OogieDocumentConverter extends AbstractDokeosDocumentConverter {
 			//System.out.println(pagesSupplier.toString());				
 			XDrawPages pages = pagesSupplier.getDrawPages();
 			int nbPages = pages.getCount();
-			
+			String[] slidenames = new String[nbPages];
+			Arrays.fill(slidenames,"");
 			
 			for (int i = 0; i < nbPages; i++) {
 				
 				XDrawPage page = (XDrawPage) UnoRuntime.queryInterface(
 						com.sun.star.drawing.XDrawPage.class, pages
 								.getByIndex(i));
+				XShapes xShapes = (XShapes)UnoRuntime.queryInterface(XShapes.class, page);
+				int top = 0;
+				String slidename = "";
+				for (int j = 0; j < xShapes.getCount(); j++) {
+					XShape firstXshape = (XShape)UnoRuntime.queryInterface(XShape.class, xShapes.getByIndex(j));
+					Point pos = firstXshape.getPosition();
+					if(pos.Y < top || top==0)
+					{
+						XText xText = (XText)UnoRuntime.queryInterface( XText.class, firstXshape );
+						if(xText!=null && xText.getString().length()>0)
+						{
+							top = pos.Y;
+							slidename = xText.getString();
+						}
+					}
+				}
 				
-				XNamed xPageName = (XNamed)UnoRuntime.queryInterface(XNamed.class,page);
+				if(slidename.length()==0)
+				{
+					slidename = "slide"+(i+1);		
+				}
+				else
+				{
+					int nbSpaces = 0;
+					String formatedSlidename = "";
+					slidename = slidename.replaceAll(" ", "_");
+					slidename = slidename.replaceAll("\n", "_");
+					slidename = slidename.replaceAll("__", "_");
+					slidename = slidename.replaceAll("\\W", "_");
+					slidename = slidename.replaceAll("__", "_");
+					
+					for(int j=0 ; j<slidename.length() ; j++)
+					{
+						char currentChar = slidename.charAt(j);
+						if(currentChar==' ')
+						{
+							nbSpaces++;
+						}
+						if(nbSpaces == 4)
+						{
+							break;
+						}
+						formatedSlidename += slidename.charAt(j);
+					}
+					slidename = formatedSlidename.toLowerCase();
+					slidename = StringOperation.sansAccent(slidename);
+				}
+				int j=1;
+				String slidenamebackup = slidename;
+				Arrays.sort(slidenames);
+				while(Arrays.binarySearch(slidenames, slidename)>=0)
+				{
+					j++;
+					slidename = slidenamebackup+j;
+				}
+				slidenames[i] = slidename;
 				
-				xPageName.setName("slide"+(i+1));
-				if(!xPageName.getName().equals("slide"+(i+1)) && !xPageName.getName().equals("page"+(i+1)))
-					xPageName.setName((i+1)+"-"+xPageName.getName());
+				XNamed xPageName = (XNamed)UnoRuntime.queryInterface(XNamed.class,page);
 				
+				xPageName.setName(slidename);				
 				
 	            XMultiComponentFactory localServiceManager = ((DokeosSocketOfficeConnection)this.openOfficeConnection).getServiceManager();
 				Object GraphicExportFilter = localServiceManager
@@ -164,3 +214,6 @@ public class OogieDocumentConverter extends AbstractDokeosDocumentConverter {
 		}
 	}
 }
+
+
+

BIN
main/inc/lib/ppt2png/StringOperation.class


+ 144 - 0
main/inc/lib/ppt2png/StringOperation.java

@@ -0,0 +1,144 @@
+import java.util.Vector;
+
+/**
+ * Classe complementaire du J2SDK sur la manipulation de chaines de caractéres
+ * Permet nottament de supprimer les accents d'une chaine de caractères
+ */
+public abstract class StringOperation {
+
+	/** Index du 1er caractere accentué * */
+	private static final int MIN = 192;
+
+	/** Index du dernier caractere accentué * */
+	private static final int MAX = 255;
+
+	/** Vecteur de correspondance entre accent / sans accent * */
+	private static final Vector map = initMap();
+
+	/**
+	 * Initialisation du tableau de correspondance entre les caractéres
+	 * accentués et leur homologues non accentués *
+	 */
+	private static Vector initMap() {
+		Vector Result = new Vector();
+		java.lang.String car = null;
+
+		car = new java.lang.String("A");
+		Result.add(car); /* '\u00C0' À alt-0192 */
+		Result.add(car); /* '\u00C1' Á alt-0193 */
+		Result.add(car); /* '\u00C2' Â alt-0194 */
+		Result.add(car); /* '\u00C3' Ã alt-0195 */
+		Result.add(car); /* '\u00C4' Ä alt-0196 */
+		Result.add(car); /* '\u00C5' Å alt-0197 */
+		car = new java.lang.String("AE");
+		Result.add(car); /* '\u00C6' Æ alt-0198 */
+		car = new java.lang.String("C");
+		Result.add(car); /* '\u00C7' Ç alt-0199 */
+		car = new java.lang.String("E");
+		Result.add(car); /* '\u00C8' È alt-0200 */
+		Result.add(car); /* '\u00C9' É alt-0201 */
+		Result.add(car); /* '\u00CA' Ê alt-0202 */
+		Result.add(car); /* '\u00CB' Ë alt-0203 */
+		car = new java.lang.String("I");
+		Result.add(car); /* '\u00CC' Ì alt-0204 */
+		Result.add(car); /* '\u00CD' Í alt-0205 */
+		Result.add(car); /* '\u00CE' Î alt-0206 */
+		Result.add(car); /* '\u00CF' Ï alt-0207 */
+		car = new java.lang.String("D");
+		Result.add(car); /* '\u00D0' Ð alt-0208 */
+		car = new java.lang.String("N");
+		Result.add(car); /* '\u00D1' Ñ alt-0209 */
+		car = new java.lang.String("O");
+		Result.add(car); /* '\u00D2' Ò alt-0210 */
+		Result.add(car); /* '\u00D3' Ó alt-0211 */
+		Result.add(car); /* '\u00D4' Ô alt-0212 */
+		Result.add(car); /* '\u00D5' Õ alt-0213 */
+		Result.add(car); /* '\u00D6' Ö alt-0214 */
+		car = new java.lang.String("*");
+		Result.add(car); /* '\u00D7' × alt-0215 */
+		car = new java.lang.String("0");
+		Result.add(car); /* '\u00D8' Ø alt-0216 */
+		car = new java.lang.String("U");
+		Result.add(car); /* '\u00D9' Ù alt-0217 */
+		Result.add(car); /* '\u00DA' Ú alt-0218 */
+		Result.add(car); /* '\u00DB' Û alt-0219 */
+		Result.add(car); /* '\u00DC' Ü alt-0220 */
+		car = new java.lang.String("Y");
+		Result.add(car); /* '\u00DD' Ý alt-0221 */
+		car = new java.lang.String("Þ");
+		Result.add(car); /* '\u00DE' Þ alt-0222 */
+		car = new java.lang.String("B");
+		Result.add(car); /* '\u00DF' ß alt-0223 */
+		car = new java.lang.String("a");
+		Result.add(car); /* '\u00E0' à alt-0224 */
+		Result.add(car); /* '\u00E1' á alt-0225 */
+		Result.add(car); /* '\u00E2' â alt-0226 */
+		Result.add(car); /* '\u00E3' ã alt-0227 */
+		Result.add(car); /* '\u00E4' ä alt-0228 */
+		Result.add(car); /* '\u00E5' å alt-0229 */
+		car = new java.lang.String("ae");
+		Result.add(car); /* '\u00E6' æ alt-0230 */
+		car = new java.lang.String("c");
+		Result.add(car); /* '\u00E7' ç alt-0231 */
+		car = new java.lang.String("e");
+		Result.add(car); /* '\u00E8' è alt-0232 */
+		Result.add(car); /* '\u00E9' é alt-0233 */
+		Result.add(car); /* '\u00EA' ê alt-0234 */
+		Result.add(car); /* '\u00EB' ë alt-0235 */
+		car = new java.lang.String("i");
+		Result.add(car); /* '\u00EC' ì alt-0236 */
+		Result.add(car); /* '\u00ED' í alt-0237 */
+		Result.add(car); /* '\u00EE' î alt-0238 */
+		Result.add(car); /* '\u00EF' ï alt-0239 */
+		car = new java.lang.String("d");
+		Result.add(car); /* '\u00F0' ð alt-0240 */
+		car = new java.lang.String("n");
+		Result.add(car); /* '\u00F1' ñ alt-0241 */
+		car = new java.lang.String("o");
+		Result.add(car); /* '\u00F2' ò alt-0242 */
+		Result.add(car); /* '\u00F3' ó alt-0243 */
+		Result.add(car); /* '\u00F4' ô alt-0244 */
+		Result.add(car); /* '\u00F5' õ alt-0245 */
+		Result.add(car); /* '\u00F6' ö alt-0246 */
+		car = new java.lang.String("/");
+		Result.add(car); /* '\u00F7' ÷ alt-0247 */
+		car = new java.lang.String("0");
+		Result.add(car); /* '\u00F8' ø alt-0248 */
+		car = new java.lang.String("u");
+		Result.add(car); /* '\u00F9' ù alt-0249 */
+		Result.add(car); /* '\u00FA' ú alt-0250 */
+		Result.add(car); /* '\u00FB' û alt-0251 */
+		Result.add(car); /* '\u00FC' ü alt-0252 */
+		car = new java.lang.String("y");
+		Result.add(car); /* '\u00FD' ý alt-0253 */
+		car = new java.lang.String("þ");
+		Result.add(car); /* '\u00FE' þ alt-0254 */
+		car = new java.lang.String("y");
+		Result.add(car); /* '\u00FF' ÿ alt-0255 */
+		Result.add(car); /* '\u00FF' alt-0255 */
+
+		return Result;
+	}
+
+	/**
+	 * Transforme une chaine pouvant contenir des accents dans une version sans
+	 * accent
+	 * 
+	 * @param chaine
+	 *            Chaine a convertir sans accent
+	 * @return Chaine dont les accents ont été supprimé
+	 */
+	public static java.lang.String sansAccent(java.lang.String chaine) {
+		java.lang.StringBuffer Result = new StringBuffer(chaine);
+
+		for (int bcl = 0; bcl < Result.length(); bcl++) {
+			int carVal = chaine.charAt(bcl);
+			if (carVal >= MIN && carVal <= MAX) { // Remplacement
+				java.lang.String newVal = (java.lang.String) map.get(carVal
+						- MIN);
+				Result.replace(bcl, bcl + 1, newVal);
+			}
+		}
+		return Result.toString();
+	}
+}

+ 2 - 1
main/newscorm/openoffice_presentation.class.php

@@ -30,7 +30,7 @@ class OpenofficePresentation extends OpenofficeDocument {
 		$previous = 0;
 		$i = 0;
 		foreach($files as $file){
-			$i++;		
+			$i++;	
 			
 			// add the png to documents
 			$document_id = add_document($_course,$this->created_dir.'/'.$file,'file',filesize($this->base_work_dir.$this->created_dir.'/'.$file),$file);
@@ -59,6 +59,7 @@ class OpenofficePresentation extends OpenofficeDocument {
 				if($this->take_slide_name === true)
 				{
 					$slide_name = substr($infos['basename'],0,strrpos($infos['basename'],'.'));
+					$slide_name = str_replace('_',' ',$slide_name);
 				}
 				else
 				{