It is advisable for all Mageia
+ installations to set a superuser or administrator's password, usually
+ called the root password in Linux. As you type a
+ password into the top box the colour of its shield will change from red to
+ yellow to green depending on the strength of the password. A green shield
+ shows you are using a strong password. You need to repeat the same
+ password in the box just below the first password box, this checks that
+ you have not mistyped the first password by comparing them.
Note
All passwords are case sensitive, it is best to use a mixture of
+ letters (upper and lower case), numbers and other characters in a
+ password.
Enter a user
Add a user here. A user has fewer rights than the superuser (root),
+ but enough to surf the internet, use office applications or play games and
+ anything else the average user does with his computer
Icon: if you click on this button it will
+ change the users icon.
Real Name: Insert the users real name into
+ this text box.
Login Name: Here you enter the user login
+ name or let drakx use a version of the users real name. The
+ login name is case sensitive.
Password: In this text box you should type
+ in the user password. There is a shield at the end of the text box
+ that indicates the strength of the password. (See also Note)
Password (again): Retype the user password
+ into this text box and drakx will check you have the same password in
+ each of the user password text boxes.
Note
Any user you add while installing Mageia, will have a world readable
+ (but write protected) home directory.
However, while using your new install, any user you add in
+ MCC - System - Manage users on system will have a
+ home directory that is both read and write protected.
If you don't want a world readable home directory for anyone, it is
+ advised to only add a temporary user now and to add the real one(s) after
+ reboot.
If you prefer world readable home directories, you might want to add
+ all extra needed users in the Configuration - Summary
+ step during the install. Choose User management.
The access permissions can also be changed after the install.
Advanced User Management
If the advanced button is clicked you are
+ offered a screen that allows you to edit the settings for the user you are
+ adding. Additionally, you can disable or enable a guest account.
Warning
Anything a guest with a default rbash guest
+ account saves to his /home directory will be erased when he logs out.
+ The guest should save his important files to a USB key.
Enable guest account: Here you can enable
+ or disable a guest account. The guest account allows a guest to log
+ into and use the PC, but he has more restricted access than normal
+ users.
Shell: This drop down list allows you to
+ change the shell used by the user you are adding in the previous
+ screen, options are Bash, Dash and Sh
User ID: Here you can set the user ID for
+ the user you are adding in the previous screen. This is a number.
+ Leave it blank unless you know what you are doing.
Group ID: This lets you set the group ID.
+ Also a number, usually the same one as for the user. Leave it blank
+ unless you know what you are doing.
Media Selection (Configure Supplemental Installation Media)
Media Selection (Configure Supplemental Installation Media)
This screen gives you the list of already recognized repositories. You
+ can add other sources for packages, like an optical disc or a remote
+ source. The source selection determines which packages will be available for
+ selection during the next steps.
For a network source, there are two steps to follow:
Choosing and activation of the network, if not already up.
Selecting a mirror or specifying a URL (very first entry). By
+ selecting a mirror, you have access to the selection of all repositories
+ managed by Mageia, like the Nonfree , the Tainted repositories and the
+ Updates. With the URL, you can designate a specific repository or your
+ own NFS installation.
Here you see the Linux partitions that have been found on your
+ computer. If you don't agree with the DrakX
+ suggestions, you can change the mount points.
Note
If you change anything, make sure you still have a
+ / (root) partition.
Every partition is shown as follows: "Device" ("Capacity", "Mount
+ point", "Type").
"Device", is made up of: "hard drive", ["hard drive
+ number"(letter)], "partition number" (for example, "sda5").
If you have many partitions, you can choose many different mount
+ points from the drop down menu, such as /,
+ /home and /var. You can even make
+ your own mount points, for instance /video for a
+ partition where you want to store your films, or
+ /cauldron-home for the /home
+ partition of a cauldron install.
For partitions you don't need to have access to, you can leave the
+ mount point field blank.
Warning
Choose Previous if you are not sure what to
+ choose, and then tick Custom disk partitioning. In
+ the screen that follows, you can click on a partition to see its type
+ and size.
If you are sure the mount points are correct, click on
+ Next, and choose whether you only want to format the
+ partition(s) DrakX suggests, or more.
Depending on your selection here, you may be offered further screens to fine tune your choice.
After the selection step(s), you will see a slide show during package
+ installation. The slide show can be disabled by pressing the
+ Details button
Choose whether you prefer to use the KDE
+ or Gnome desktop environment. Both come with a
+ full set of useful applications and tools. Tick
+ Custom if you want to use neither or both, or if you
+ want something other than the default software choices for these desktop
+ environments. The LXDE desktop is lighter than
+ the previous two, sporting less eye candy and fewer packages installed by
+ default.
Packages have been sorted into groups, to make choosing what you
+ need on your system a lot easier. The groups are fairly self explanatory,
+ however more information about the content of each is available in
+ tool-tips which become visible as the mouse is hovered over them.
Workstation.
Server.
Graphical Environment.
Individual Package Selection: You can use this option to
+ manually add or remove packages.
Here you can add or remove any extra packages to customise your
+ installation.
After having made your choice, you can click on the
+ floppy icon at the bottom of the page to save your
+ choice of packages (saving to a USB key works, too). You can then use this
+ file to install the same packages on another system, by pressing the same
+ button during install and choosing to load it.
Choose an X Server (Configure
+ your Graphic Card)
Choose an X Server (Configure
+ your Graphic Card)
DrakX has a very comprehensive database of video cards and will
+ usually correctly identify your video device.
If the installer has not correctly detected your graphic card and you
+ know which one you have, you can select it from the tree by:
vendor
then the name of your card
and the type of card
If you cannot find your card in the vendor lists (because it's not yet
+ in the database or it's an older card) you may find a suitable driver in the
+ Xorg category
The Xorg listing provides more than 40 generic and open source video
+ card drivers. If you still can't find a named driver for your card there is
+ the option of using the vesa driver which provides basic
+ capabilities.
Be aware that if you select an incompatible driver you may only have
+ access to the Commandline Interface.
Some video card manufacturers provide proprietary drivers for Linux
+ which may only be available in the Nonfree repository and in some cases only
+ from the card manufacturers' websites.
The Nonfree repository needs to be explicitly enabled to access them.
+ If you didn't select it previously, you should do this after your first
+ reboot.
No matter which graphical environment
+ (also known as desktop environment) you chose for this install of
+ Mageia, they are all based on a graphical user
+ interface system called X Window System, or simply
+ X. So in order for KDE,
+ Gnome, LXDE or any other graphical
+ environment to work well, the following X settings need
+ to be correct. Choose the correct settings if you can see that
+ DrakX didn't make a choice, or if you think the
+ choice is incorrect.
Graphic
+ card: Choose your card from the list if
+ needed.
Monitor:
+ You can choose Plug'n Play when applicable, or
+ choose your monitor from the Vendor or
+ Generic list. Choose Custom if
+ you prefer to manually set the horizontal and vertical refresh rates of
+ your monitor.
Warning
Incorrect refresh rates may
+ damage your monitor
Resolution:
+ Set the desired resolution and color depth of your monitor here.
Test:
+ The test button does not always appear during install. If the button is
+ there, you can control your settings by pressing it. If you see a
+ question asking you whether your settings are correct, you can answer
+ "yes", and the settings will be kept. If you don't see anything, you'll
+ return to the configuration screen and be able to reconfigure everything
+ until the test is good. Make sure your settings are on the
+ safe side if the test button isn't available
Options:
+ Here you can choose to enable or disable various options.
DrakX has a very
+ comprehensive database of monitors and will usually correctly identify
+ yours.
Warning
Selecting a
+ monitor with different characteristics could damage your monitor or video
+ hardware. Please don't try something without knowing what you are
+ doing. If in doubt you should consult your monitor
+ documentation
Custom
This option allows you to
+ set two critical parameters, the vertical refresh rate and the horizontal
+ sync rate. Vertical refresh determines how often the screen is refreshed and
+ horizontal sync is the rate at which scan lines are displayed.
It is VERY
+ IMPORTANT that you do not specify a monitor type with a sync
+ range that is beyond the capabilities of your monitor: you may damage your
+ monitor. If in doubt, choose a conservative setting and consult your monitor
+ documentation.
Plug 'n
+ Play
This is the default
+ option and tries to determine the monitor type from the monitor
+ database.
Vendor
If the installer has not
+ correctly detected your monitor and you know which one you have, you can
+ select it from the tree by selecting:
vendor
the monitor manufacturers name
the monitor description
Generic
selecting this group
+ displays nearly 30 display configurations such as 1024x768 @ 60Hz and
+ includes Flat panel displays as used in laptops. This is often a good
+ monitor selection group if you need to use the Vesa card driver when your
+ video hardware cannot be determined automatically. Once again it may be wise
+ to be conservative in your selections.
If you wish to use encryption on
+ your / partition you must ensure that you have a separate /boot
+ partition. The encryption option for the /boot partition must NOT be set,
+ otherwise your system will be unbootable.
Adjust the layout of your disk(s) here. You can remove or create partitions, change the filesystem of a partition or change its size and even view what is in them before you start.
+
There is a tab for every detected hard disk or other storage device, like an USB key. For example sda, sdb and sdc if there are three of them.
+
Push Clear all to wipe all partitions on the selected storage device
For all other actions: click on the desired partition first. Then view it, or choose a filesystem and a mount point, resize it or wipe it.
Continue until you adjusted everything to your wishes.
In this screen you can see
+ the content of your hard drive(s) and see the solutions the DrakX
+ partitioning wizard found for where to install
+ Mageia.
The options available from
+ the list below will vary depending on your particular hard drive(s) layout
+ and content.
Use Existing
+ Partitions
If this option is
+ available, then existing Linux compatible partitions have been found
+ and may be used for the installation.
Use Free Space
If you have unused
+ space on your hard drive then this option will use it for your new
+ Mageia installation.
Use Free Space on a
+ Windows Partition
If you have unused
+ space on an existing Windows partition, the installer may offer to use
+ it.
This can be a useful
+ way of making room for your new Mageia installation, but is a risky
+ operation so you should make sure you have backed up all important
+ files!
Note that this
+ involves shrinking the size of the Windows partition. The partition
+ must be "clean", meaning that Windows must have closed down correctly
+ the last time it was used. It must also have been defragmented,
+ although this is not a guarantee that all files in the partition have
+ been moved out of the area that is about to be used. It is highly
+ recommended to back up your personal files.
Erase and use Entire
+ Disk.
This option will use
+ the complete drive for Mageia.
Note! This will
+ erase ALL data on the selected hard drive. Take care!
If you intend to use
+ part of the disk for something else, or you already have data on the
+ drive that you are not prepared to lose, then do not use this
+ option.
Custom
This gives you
+ complete control over the placing of the installation on your hard
+ drive(s).
Warning
Some newer drives are now using 4096 byte logical sectors, instead
+ of the previous standard of 512 byte logical sectors. Due to lack of
+ available hardware, the partitioning tool used in the installer has not
+ been tested with such a drive. Also some ssd drives now use an erase block
+ size over 1 MB. We suggest to pre-partition the drive, using an
+ alternative partitioning tool like gparted, if you own such a device, and
+ to use the following settings:
"Align to" "MiB"
"Free space preceding (MiB)" "2"
Also make sure all partitions are created with an even number of
+ megabytes.
Here you can choose which
+ partition(s) you wish to format. Any data on partitions not
+ marked for formatting will be saved.
Usually at least the
+ partitions DrakX selected, need to be formatted
Click on
+ Advanced to choose partitions you want to check for
+ so called bad blocks
Tip
If you're not sure you
+ have made the right choice, you can click on
+ Previous, again on Previous
+ and then on Custom to get back to the main screen.
+ In that screen you can choose to view what is in your partitions.
When you are confident
+ about the selection, click on Next to
+ continue.
No one will see all the installer screens that you see in this
+ manual. Which screens you will see, depends on your hardware and the
+ choices you make while installing.
Whether you are new to GNU-Linux or an experienced user, the Mageia
+ Installer is designed to help make your installation or upgrade as easy as
+ possible.
The initial menu screen has various options, however the default one
+ will start the installer, which will normally be all that you will
+ need.
The install process is divided into a number of steps, which can be
+ followed on the side panel of the screen.
Each step has one or more screens which may also have
+ Advanced buttons with extra, less commonly
+ required, options.
Most screens have Help buttons which give
+ further explanations about the current step.
Note
If somewhere during install you decide to stop the installation,
+ it is possible to reboot, but please think twice before you do this.
+ Once a partition has been formatted or updates have started to be
+ installed, your computer is no longer in the same state and rebooting it
+ could very well leave you with an unusable system. If in spite of this
+ you are very sure rebooting is what you want, go to a text terminal by
+ pressing the three keys Alt Ctrl F2 at the same
+ time. After that, press Alt Ctrl Delete
+ simultaneously to reboot.
Installation options
If the installation fails then it may be necessary to try again by
+ using one of the extra options available by hitting the F1
+ (Help) key see Figure 1, “Installation Welcome Screen”
This will open the following text based help.
Figure 2. Installation Help
+ Screen
Installation Problems and
+ Possible Solutions
No Graphical Interface
After the initial screen you did not reach the language
+ selection screen. This can happen with some graphic cards and
+ older systems. Try using low resolution by typing
+ vgalo at the prompt.
If the hardware is very old, a graphical installation may
+ not be possible. In this case it is worth trying a text mode
+ installation. To use this hit ESC at the first welcome screen and
+ confirm with ENTER. You will be presented with a black screen with
+ the word "boot:". Type "text" and hit ENTER. Now continue with the
+ installation in text mode.
The Install Freezes
If the system appeared to freeze during the installation, this
+ may be a problem with hardware detection. In this case the automatic
+ detection of hardware may be bypassed and dealt with later. To try
+ this, type noauto at the prompt. This option may also be
+ combined with other options as necessary.
Kernel Options
These will rarely be needed, but in some cases the hardware may
+ report the available RAM incorrectly. To specify this manually, you
+ can use the mem=xxxM parameter, where xxx is the correct
+ amount of RAM. e.g. mem=256M would specify 256MB of
+ RAM.
Here you have the list of available repositories. Not all repositories
+ are available, according to which media you use for installing. The
+ repositories selection determines which packages will be available for
+ selection during the next steps.
The Core repository cannot be disabled as it
+ contains the base of the distribution.
The Nonfree repository includes packages
+ that are free-of-charge, i.e. Mageia may redistribute them, but they
+ contain closed-source software (hence the name - Nonfree). For example
+ this repository includes nVidia and ATI graphics card proprietary
+ drivers, firmware for various WiFi cards, etc.
The Tainted repository includes packages
+ released under a free license. The main criteria for placing packages in
+ this repository is that they may infringe patents and copyright laws
+ in some countries, e.g. Multimedia codecs needed to play various
+ audio/video files; packages needed to play commercial video DVD,
+ etc.
Minimal Installation is intended for those with specific uses in mind for their
+ Mageia, such as a server or a specialised
+ workstation. You will probably use this option combined with Manual
+ Package Selection, see the section called “Choose Individual
+ Packages”.
If you choose this installation class, then the related
+ screen will offer you a few useful extras to install, such as
+ documentation and X.
DrakX made smart choices for the
+ configuration of your system depending on the choices you made and on the
+ hardware DrakX detected. You can check the settings here and change them if
+ you want after pressing Configure.
This is where
+ you setup or change your keyboard layout which will depend on your
+ location, language or type of keyboard.
Mouse:
Here you can add
+ or configure other pointing devices, tablets, trackballs etc.
Sound
+ card:
The installer uses
+ the default driver, if there is a default one. The option to select a
+ different driver is only given when there is more than one driver for
+ your card, but none of them is the default one.
Graphical
+ interface:
This section
+ allows you to configure your graphic card(s) and displays.
You can configure
+ your network here, but for network cards with non-free drivers it is
+ better to do that after reboot, in the Mageia Control
+ Center, if you have not yet enabled the Nonfree media
+ repositories.
Warning
When you add a
+ network card, do not forget to set your firewall to watch that
+ interface as well.
Proxies:
A Proxy Server
+ acts as an intermediary between your computer and the wider internet.
+ This section allows you to configure your computer to utilize a proxy
+ service.
You may need to
+ consult your systems administrator to get the parameters you need to
+ enter here
Security
Security
+ Level:
Here you set the
+ Security level for your computer, in most cases the default setting
+ (Standard) is adequate for general use.
Check the option
+ which best suits your usage.
Firewall:
A firewall is
+ intended to be a barrier between your important data and the rascals
+ out there on the internet who would compromise or steal it.
Select the
+ services that you wish to have access to your system. Your selections
+ will depend on what you use your computer for.
Warning
Bear in mind
+ that allowing everything (no firewall) may be very risky.
diff --git a/installer/4/en/content/nwSearchFnt.js b/installer/4/en/content/nwSearchFnt.js
new file mode 100644
index 00000000..fc12d113
--- /dev/null
+++ b/installer/4/en/content/nwSearchFnt.js
@@ -0,0 +1,513 @@
+/*----------------------------------------------------------------------------
+ * JavaScript for webhelp search
+ *----------------------------------------------------------------------------
+ This file is part of the webhelpsearch plugin for DocBook WebHelp
+ Copyright (c) 2007-2008 NexWave Solutions All Rights Reserved.
+ www.nexwave.biz Nadege Quaine
+ http://kasunbg.blogspot.com/ Kasun Gajasinghe
+ */
+
+//string initialization
+var htmlfileList = "htmlFileList.js";
+var htmlfileinfoList = "htmlFileInfoList.js";
+var useCJKTokenizing = false;
+
+/* Cette fonction verifie la validite de la recherche entrre par l utilisateur */
+function Verifie(ditaSearch_Form) {
+
+ // Check browser compatibitily
+ if (navigator.userAgent.indexOf("Konquerer") > -1) {
+
+ alert(txt_browser_not_supported);
+ return;
+ }
+
+
+ var expressionInput = document.ditaSearch_Form.textToSearch.value;
+ //Set a cookie to store the searched keywords
+ $.cookie('textToSearch', expressionInput);
+
+
+ if (expressionInput.length < 1) {
+
+ // expression is invalid
+ alert(txt_enter_at_least_1_char);
+ // reactive la fenetre de search (utile car cadres)
+ document.ditaSearch_Form.textToSearch.focus();
+ }
+ else {
+
+ // Effectuer la recherche
+ Effectuer_recherche(expressionInput);
+
+ // reactive la fenetre de search (utile car cadres)
+ document.ditaSearch_Form.textToSearch.focus();
+ }
+}
+
+var stemQueryMap = new Array(); // A hashtable which maps stems to query words
+
+/* This function parses the search expression, loads the indices and displays the results*/
+function Effectuer_recherche(expressionInput) {
+
+ /* Display a waiting message */
+ //DisplayWaitingMessage();
+
+ /*data initialisation*/
+ var searchFor = ""; // expression en lowercase et sans les caracte res speciaux
+ //w = new Object(); // hashtable, key=word, value = list of the index of the html files
+ scriptLetterTab = new Scriptfirstchar(); // Array containing the first letter of each word to look for
+ var wordsList = new Array(); // Array with the words to look for
+ var finalWordsList = new Array(); // Array with the words to look for after removing spaces
+ var linkTab = new Array();
+ var fileAndWordList = new Array();
+ var txt_wordsnotfound = "";
+
+
+ /*nqu: expressionInput, la recherche est lower cased, plus remplacement des char speciaux*/
+ searchFor = expressionInput.toLowerCase().replace(/<\//g, "_st_").replace(/\$_/g, "_di_").replace(/\.|%2C|%3B|%21|%3A|@|\/|\*/g, " ").replace(/(%20)+/g, " ").replace(/_st_/g, "").replace(/_di_/g, "%24_");
+
+ searchFor = searchFor.replace(/ +/g, " ");
+ searchFor = searchFor.replace(/ $/, "").replace(/^ /, "");
+
+ wordsList = searchFor.split(" ");
+ wordsList.sort();
+
+ //set the tokenizing method
+ if(typeof indexerLanguage != "undefined" && (indexerLanguage=="zh" || indexerLanguage=="ja" ||indexerLanguage=="ko")){
+ useCJKTokenizing=true;
+ } else {
+ useCJKTokenizing=false;
+ }
+ //If Lucene CJKTokenizer was used as the indexer, then useCJKTokenizing will be true. Else, do normal tokenizing.
+ // 2-gram tokenizinghappens in CJKTokenizing,
+ if(useCJKTokenizing){
+ finalWordsList = cjkTokenize(wordsList);
+ } else {
+ finalWordsList = tokenize(wordsList);
+ }
+
+ //load the scripts with the indices: the following lines do not work on the server. To be corrected
+ /*if (IEBrowser) {
+ scriptsarray = loadTheIndexScripts (scriptLetterTab);
+ } */
+
+ /**
+ * Compare with the indexed words (in the w[] array), and push words that are in it to tempTab.
+ */
+ var tempTab = new Array();
+ for (var t in finalWordsList) {
+ if (w[finalWordsList[t].toString()] == undefined) {
+ txt_wordsnotfound += finalWordsList[t] + " ";
+ } else {
+ tempTab.push(finalWordsList[t]);
+ }
+ }
+ finalWordsList = tempTab;
+
+ if (finalWordsList.length) {
+
+ //search 'and' and 'or' one time
+ fileAndWordList = SortResults(finalWordsList);
+
+ var cpt = fileAndWordList.length;
+ for (var i = cpt - 1; i >= 0; i--) {
+ if (fileAndWordList[i] != undefined) {
+ linkTab.push("
" + "Your search returned no results for " + "" + txt_wordsnotfound + "" + "
";
+ }
+ //alert(results);
+ document.getElementById('searchResults').innerHTML = results;
+}
+
+function tokenize(wordsList){
+ var stemmedWordsList = new Array(); // Array with the words to look for after removing spaces
+ var cleanwordsList = new Array(); // Array with the words to look for
+ for(var j in wordsList){
+ var word = wordsList[j];
+ if(typeof stemmer != "undefined" ){
+ stemQueryMap[stemmer(word)] = word;
+ } else {
+ stemQueryMap[word] = word;
+ }
+ }
+ //stemmedWordsList is the stemmed list of words separated by spaces.
+ for (var t in wordsList) {
+ wordsList[t] = wordsList[t].replace(/(%22)|^-/g, "");
+ if (wordsList[t] != "%20") {
+ scriptLetterTab.add(wordsList[t].charAt(0));
+ cleanwordsList.push(wordsList[t]);
+ }
+ }
+
+ if(typeof stemmer != "undefined" ){
+ //Do the stemming using Porter's stemming algorithm
+ for (var i = 0; i < cleanwordsList.length; i++) {
+ var stemWord = stemmer(cleanwordsList[i]);
+ stemmedWordsList.push(stemWord);
+ }
+ } else {
+ stemmedWordsList = cleanwordsList;
+ }
+ return stemmedWordsList;
+}
+
+//Invoker of CJKTokenizer class methods.
+function cjkTokenize(wordsList){
+ var allTokens= new Array();
+ var notCJKTokens= new Array();
+ var j=0;
+ for(j=0;j";
+ return this.input.substring(this.offset,this.offset+2);
+ }
+
+ function getAllTokens(){
+ while(this.incrementToken()){
+ var tmp = this.tokenize();
+ this.tokens.push(tmp);
+ }
+ return this.unique(this.tokens);
+// document.getElementById("content").innerHTML += tokens+" ";
+// document.getElementById("content").innerHTML += " dada"+sortedTokens+" ";
+// console.log(tokens.length+"dsdsds");
+ /*for(i=0;idada"+un[i]+"- "+stems[i]+" "+ ss;
+ document.getElementById("content").innerHTML += " "+sortedTokens[i];
+ }*/
+ }
+
+ function unique(a)
+ {
+ var r = new Array();
+ o:for(var i = 0, n = a.length; i < n; i++)
+ {
+ for(var x = 0, y = r.length; x < y; x++)
+ {
+ if(r[x]==a[i]) continue o;
+ }
+ r[r.length] = a[i];
+ }
+ return r;
+ }
+}
+
+
+/* Scriptfirstchar: to gather the first letter of index js files to upload */
+function Scriptfirstchar() {
+ this.strLetters = "";
+ this.add = addLettre;
+}
+
+function addLettre(caract) {
+
+ if (this.strLetters == 'undefined') {
+ this.strLetters = caract;
+ } else if (this.strLetters.indexOf(caract) < 0) {
+ this.strLetters += caract;
+ }
+
+ return 0;
+}
+/* end of scriptfirstchar */
+
+/*main loader function*/
+/*tab contains the first letters of each word looked for*/
+function loadTheIndexScripts(tab) {
+
+ //alert (tab.strLetters);
+ var scriptsarray = new Array();
+
+ for (var i = 0; i < tab.strLetters.length; i++) {
+
+ scriptsarray[i] = "..\/search" + "\/" + tab.strLetters.charAt(i) + ".js";
+ }
+ // add the list of html files
+ i++;
+ scriptsarray[i] = "..\/search" + "\/" + htmlfileList;
+
+ //debug
+ for (var t in scriptsarray) {
+ //alert (scriptsarray[t]);
+ }
+
+ tab = new ScriptLoader();
+ for (t in scriptsarray) {
+ tab.add(scriptsarray[t]);
+ }
+ tab.load();
+ //alert ("scripts loaded");
+ return (scriptsarray);
+}
+
+/* ScriptLoader: to load the scripts and wait that it's finished */
+function ScriptLoader() {
+ this.cpt = 0;
+ this.scriptTab = new Array();
+ this.add = addAScriptInTheList;
+ this.load = loadTheScripts;
+ this.onScriptLoaded = onScriptLoadedFunc;
+}
+
+function addAScriptInTheList(scriptPath) {
+ this.scriptTab.push(scriptPath);
+}
+
+function loadTheScripts() {
+ var script;
+ var head;
+
+ head = document.getElementsByTagName('head').item(0);
+
+ //script = document.createElement('script');
+
+ for (var el in this.scriptTab) {
+ //alert (el+this.scriptTab[el]);
+ script = document.createElement('script');
+ script.src = this.scriptTab[el];
+ script.type = 'text/javascript';
+ script.defer = false;
+
+ head.appendChild(script);
+ }
+
+}
+
+function onScriptLoadedFunc(e) {
+ e = e || window.event;
+ var target = e.target || e.srcElement;
+ var isComplete = true;
+ if (typeof target.readyState != undefined) {
+
+ isComplete = (target.readyState == "complete" || target.readyState == "loaded");
+ }
+ if (isComplete) {
+ ScriptLoader.cpt++;
+ if (ScriptLoader.cpt == ScriptLoader.scripts.length) {
+ ScriptLoader.onLoadComplete();
+ }
+ }
+}
+
+/*
+function onLoadComplete() {
+ alert("loaded !!");
+} */
+
+/* End of scriptloader functions */
+
+// Array.unique( strict ) - Remove duplicate values
+function unique(tab) {
+ var a = new Array();
+ var i;
+ var l = tab.length;
+
+ if (tab[0] != undefined) {
+ a[0] = tab[0];
+ }
+ else {
+ return -1
+ }
+
+ for (i = 1; i < l; i++) {
+ if (indexof(a, tab[i], 0) < 0) {
+ a.push(tab[i]);
+ }
+ }
+ return a;
+}
+function indexof(tab, element, begin) {
+ for (var i = begin; i < tab.length; i++) {
+ if (tab[i] == element) {
+ return i;
+ }
+ }
+ return -1;
+
+}
+/* end of Array functions */
+
+
+/*
+ Param: mots= list of words to look for.
+ This function creates an hashtable:
+ - The key is the index of a html file which contains a word to look for.
+ - The value is the list of all words contained in the html file.
+
+ Return value: the hashtable fileAndWordList
+ */
+function SortResults(mots) {
+
+ var fileAndWordList = new Object();
+ if (mots.length == 0) {
+ return null;
+ }
+
+ for (var t in mots) {
+ // get the list of the indices of the files.
+ var listNumerosDesFicStr = w[mots[t].toString()];
+ //alert ("listNumerosDesFicStr "+listNumerosDesFicStr);
+ var tab = listNumerosDesFicStr.split(",");
+
+ //for each file (file's index):
+ for (var t2 in tab) {
+ var temp = tab[t2].toString();
+ if (fileAndWordList[temp] == undefined) {
+
+ fileAndWordList[temp] = "" + mots[t];
+ } else {
+
+ fileAndWordList[temp] += "," + mots[t];
+ }
+ }
+ }
+
+ var fileAndWordListValuesOnly = new Array();
+
+ // sort results according to values
+ var temptab = new Array();
+ for (t in fileAndWordList) {
+ tab = fileAndWordList[t].split(',');
+
+ var tempDisplay = new Array();
+ for (var x in tab) {
+ if(stemQueryMap[tab[x]] != undefined){
+ tempDisplay.push(stemQueryMap[tab[x]]); //get the original word from the stem word.
+ } else {
+ tempDisplay.push(tab[x]); //no stem is available. (probably a CJK language)
+ }
+ }
+ var tempDispString = tempDisplay.join(", ");
+
+ temptab.push(new resultPerFile(t, fileAndWordList[t], tab.length, tempDispString));
+ fileAndWordListValuesOnly.push(fileAndWordList[t]);
+ }
+
+
+ //alert("t"+fileAndWordListValuesOnly.toString());
+
+ fileAndWordListValuesOnly = unique(fileAndWordListValuesOnly);
+ fileAndWordListValuesOnly = fileAndWordListValuesOnly.sort(compare_nbMots);
+ //alert("t: "+fileAndWordListValuesOnly.join(';'));
+
+ var listToOutput = new Array();
+
+ for (var j in fileAndWordListValuesOnly) {
+ for (t in temptab) {
+ if (temptab[t].motsliste == fileAndWordListValuesOnly[j]) {
+ if (listToOutput[j] == undefined) {
+ listToOutput[j] = new Array(temptab[t]);
+ } else {
+ listToOutput[j].push(temptab[t]);
+ }
+ }
+ }
+ }
+ return listToOutput;
+}
+
+function resultPerFile(filenb, motsliste, motsnb, motslisteDisplay) {
+ this.filenb = filenb;
+ this.motsliste = motsliste;
+ this.motsnb = motsnb;
+ this.motslisteDisplay= motslisteDisplay;
+}
+
+function compare_nbMots(s1, s2) {
+ var t1 = s1.split(',');
+ var t2 = s2.split(',');
+ //alert ("s1:"+t1.length + " " +t2.length)
+ if (t1.length == t2.length) {
+ return 0;
+ } else if (t1.length > t2.length) {
+ return 1;
+ } else {
+ return -1;
+ }
+ //return t1.length - t2.length);
+}
\ No newline at end of file
diff --git a/installer/4/en/content/search/punctuation.props b/installer/4/en/content/search/punctuation.props
new file mode 100644
index 00000000..d3e3fcd2
--- /dev/null
+++ b/installer/4/en/content/search/punctuation.props
@@ -0,0 +1,31 @@
+Punct01=\\u3002
+Punct02=\\u3003
+Punct03=\\u300C
+Punct04=\\u300D
+Punct05=\\u300E
+Punct06=\\u300F
+Punct07=\\u301D
+Punct08=\\u301E
+Punct09=\\u301F
+Punct10=\\u309B
+Punct11=\\u2018
+Punct12=\\u2019
+Punct13=\\u201A
+Punct14=\\u201C
+Punct15=\\u201D
+Punct16=\\u201E
+Punct17=\\u2032
+Punct18=\\u2033
+Punct19=\\u2035
+Punct20=\\u2039
+Punct21=\\u203A
+Punct22=\\u201E
+Punct23=\\u00BB
+Punct24=\\u00AB
+Punct25=
+Punct26=
+Punct27=\\u00A0
+Punct28=\\u2014
+
+
+
diff --git a/installer/4/en/content/search/stemmers/de_stemmer.js b/installer/4/en/content/search/stemmers/de_stemmer.js
new file mode 100644
index 00000000..7ff3822a
--- /dev/null
+++ b/installer/4/en/content/search/stemmers/de_stemmer.js
@@ -0,0 +1,247 @@
+/*
+ * Author: Joder Illi
+ *
+ * Copyright (c) 2010, FormBlitz AG
+ * All rights reserved.
+ * Implementation of the stemming algorithm from http://snowball.tartarus.org/algorithms/german/stemmer.html
+ * Copyright of the algorithm is: Copyright (c) 2001, Dr Martin Porter and can be found at http://snowball.tartarus.org/license.php
+ *
+ * Redistribution and use in source and binary forms, with or without modification, is covered by the standard BSD license.
+ *
+ */
+
+//var stemmer = function Stemmer() {
+ /*
+ German includes the following accented forms,
+ ä ö ü
+ and a special letter, ß, equivalent to double s.
+ The following letters are vowels:
+ a e i o u y ä ö ü
+ */
+
+ var stemmer = function(word) {
+ /*
+ Put u and y between vowels into upper case
+ */
+ word = word.replace(/([aeiouyäöü])u([aeiouyäöü])/g, '$1U$2');
+ word = word.replace(/([aeiouyäöü])y([aeiouyäöü])/g, '$1Y$2');
+
+ /*
+ and then do the following mappings,
+ (a) replace ß with ss,
+ (a) replace ae with ä, Not doing these, have trouble with diphtongs
+ (a) replace oe with ö, Not doing these, have trouble with diphtongs
+ (a) replace ue with ü unless preceded by q. Not doing these, have trouble with diphtongs
+ So in quelle, ue is not mapped to ü because it follows q, and in feuer it is not mapped because the first part of the rule changes it to feUer, so the u is not found.
+ */
+ word = word.replace(/ß/g, 'ss');
+ //word = word.replace(/ae/g, 'ä');
+ //word = word.replace(/oe/g, 'ö');
+ //word = word.replace(/([^q])ue/g, '$1ü');
+
+ /*
+ R1 and R2 are first set up in the standard way (see the note on R1 and R2), but then R1 is adjusted so that the region before it contains at least 3 letters.
+ R1 is the region after the first non-vowel following a vowel, or is the null region at the end of the word if there is no such non-vowel.
+ R2 is the region after the first non-vowel following a vowel in R1, or is the null region at the end of the word if there is no such non-vowel.
+ */
+
+ var r1Index = word.search(/[aeiouyäöü][^aeiouyäöü]/);
+ var r1 = '';
+ if (r1Index != -1) {
+ r1Index += 2;
+ r1 = word.substring(r1Index);
+ }
+
+ var r2Index = -1;
+ var r2 = '';
+
+ if (r1Index != -1) {
+ var r2Index = r1.search(/[aeiouyäöü][^aeiouyäöü]/);
+ if (r2Index != -1) {
+ r2Index += 2;
+ r2 = r1.substring(r2Index);
+ r2Index += r1Index;
+ } else {
+ r2 = '';
+ }
+ }
+
+ if (r1Index != -1 && r1Index < 3) {
+ r1Index = 3;
+ r1 = word.substring(r1Index);
+ }
+
+ /*
+ Define a valid s-ending as one of b, d, f, g, h, k, l, m, n, r or t.
+ Define a valid st-ending as the same list, excluding letter r.
+ */
+
+ /*
+ Do each of steps 1, 2 and 3.
+ */
+
+ /*
+ Step 1:
+ Search for the longest among the following suffixes,
+ (a) em ern er
+ (b) e en es
+ (c) s (preceded by a valid s-ending)
+ */
+ var a1Index = word.search(/(em|ern|er)$/g);
+ var b1Index = word.search(/(e|en|es)$/g);
+ var c1Index = word.search(/([bdfghklmnrt]s)$/g);
+ if (c1Index != -1) {
+ c1Index++;
+ }
+ var index1 = 10000;
+ var optionUsed1 = '';
+ if (a1Index != -1 && a1Index < index1) {
+ optionUsed1 = 'a';
+ index1 = a1Index;
+ }
+ if (b1Index != -1 && b1Index < index1) {
+ optionUsed1 = 'b';
+ index1 = b1Index;
+ }
+ if (c1Index != -1 && c1Index < index1) {
+ optionUsed1 = 'c';
+ index1 = c1Index;
+ }
+
+ /*
+ and delete if in R1. (Of course the letter of the valid s-ending is not necessarily in R1.) If an ending of group (b) is deleted, and the ending is preceded by niss, delete the final s.
+ (For example, äckern -> äck, ackers -> acker, armes -> arm, bedürfnissen -> bedürfnis)
+ */
+
+ if (index1 != 10000 && r1Index != -1) {
+ if (index1 >= r1Index) {
+ word = word.substring(0, index1);
+ if (optionUsed1 == 'b') {
+ if (word.search(/niss$/) != -1) {
+ word = word.substring(0, word.length -1);
+ }
+ }
+ }
+ }
+ /*
+ Step 2:
+ Search for the longest among the following suffixes,
+ (a) en er est
+ (b) st (preceded by a valid st-ending, itself preceded by at least 3 letters)
+ */
+
+ var a2Index = word.search(/(en|er|est)$/g);
+ var b2Index = word.search(/(.{3}[bdfghklmnt]st)$/g);
+ if (b2Index != -1) {
+ b2Index += 4;
+ }
+
+ var index2 = 10000;
+ var optionUsed2 = '';
+ if (a2Index != -1 && a2Index < index2) {
+ optionUsed2 = 'a';
+ index2 = a2Index;
+ }
+ if (b2Index != -1 && b2Index < index2) {
+ optionUsed2 = 'b';
+ index2 = b2Index;
+ }
+
+ /*
+ and delete if in R1.
+ (For example, derbsten -> derbst by step 1, and derbst -> derb by step 2, since b is a valid st-ending, and is preceded by just 3 letters)
+ */
+
+ if (index2 != 10000 && r1Index != -1) {
+ if (index2 >= r1Index) {
+ word = word.substring(0, index2);
+ }
+ }
+
+ /*
+ Step 3: d-suffixes (*)
+ Search for the longest among the following suffixes, and perform the action indicated.
+ end ung
+ delete if in R2
+ if preceded by ig, delete if in R2 and not preceded by e
+ ig ik isch
+ delete if in R2 and not preceded by e
+ lich heit
+ delete if in R2
+ if preceded by er or en, delete if in R1
+ keit
+ delete if in R2
+ if preceded by lich or ig, delete if in R2
+ */
+
+ var a3Index = word.search(/(end|ung)$/g);
+ var b3Index = word.search(/[^e](ig|ik|isch)$/g);
+ var c3Index = word.search(/(lich|heit)$/g);
+ var d3Index = word.search(/(keit)$/g);
+ if (b3Index != -1) {
+ b3Index ++;
+ }
+
+ var index3 = 10000;
+ var optionUsed3 = '';
+ if (a3Index != -1 && a3Index < index3) {
+ optionUsed3 = 'a';
+ index3 = a3Index;
+ }
+ if (b3Index != -1 && b3Index < index3) {
+ optionUsed3 = 'b';
+ index3 = b3Index;
+ }
+ if (c3Index != -1 && c3Index < index3) {
+ optionUsed3 = 'c';
+ index3 = c3Index;
+ }
+ if (d3Index != -1 && d3Index < index3) {
+ optionUsed3 = 'd';
+ index3 = d3Index;
+ }
+
+ if (index3 != 10000 && r2Index != -1) {
+ if (index3 >= r2Index) {
+ word = word.substring(0, index3);
+ var optionIndex = -1;
+ var optionSubsrt = '';
+ if (optionUsed3 == 'a') {
+ optionIndex = word.search(/[^e](ig)$/);
+ if (optionIndex != -1) {
+ optionIndex++;
+ if (optionIndex >= r2Index) {
+ word = word.substring(0, optionIndex);
+ }
+ }
+ } else if (optionUsed3 == 'c') {
+ optionIndex = word.search(/(er|en)$/);
+ if (optionIndex != -1) {
+ if (optionIndex >= r1Index) {
+ word = word.substring(0, optionIndex);
+ }
+ }
+ } else if (optionUsed3 == 'd') {
+ optionIndex = word.search(/(lich|ig)$/);
+ if (optionIndex != -1) {
+ if (optionIndex >= r2Index) {
+ word = word.substring(0, optionIndex);
+ }
+ }
+ }
+ }
+ }
+
+ /*
+ Finally,
+ turn U and Y back into lower case, and remove the umlaut accent from a, o and u.
+ */
+ word = word.replace(/U/g, 'u');
+ word = word.replace(/Y/g, 'y');
+ word = word.replace(/ä/g, 'a');
+ word = word.replace(/ö/g, 'o');
+ word = word.replace(/ü/g, 'u');
+
+ return word;
+ };
+//}
\ No newline at end of file
diff --git a/installer/4/en/content/search/stemmers/en_stemmer.js b/installer/4/en/content/search/stemmers/en_stemmer.js
new file mode 100644
index 00000000..f58012f2
--- /dev/null
+++ b/installer/4/en/content/search/stemmers/en_stemmer.js
@@ -0,0 +1,187 @@
+// Porter stemmer in Javascript. Few comments, but it's easy to follow against the rules in the original
+// paper, in
+//
+// Porter, 1980, An algorithm for suffix stripping, Program, Vol. 14,
+// no. 3, pp 130-137,
+//
+// see also http://www.tartarus.org/~martin/PorterStemmer
+
+// Release 1 be 'andargor', Jul 2004
+// Release 2 (substantially revised) by Christopher McKenzie, Aug 2009
+
+
+var stemmer = (function(){
+ var step2list = {
+ "ational" : "ate",
+ "tional" : "tion",
+ "enci" : "ence",
+ "anci" : "ance",
+ "izer" : "ize",
+ "bli" : "ble",
+ "alli" : "al",
+ "entli" : "ent",
+ "eli" : "e",
+ "ousli" : "ous",
+ "ization" : "ize",
+ "ation" : "ate",
+ "ator" : "ate",
+ "alism" : "al",
+ "iveness" : "ive",
+ "fulness" : "ful",
+ "ousness" : "ous",
+ "aliti" : "al",
+ "iviti" : "ive",
+ "biliti" : "ble",
+ "logi" : "log"
+ },
+
+ step3list = {
+ "icate" : "ic",
+ "ative" : "",
+ "alize" : "al",
+ "iciti" : "ic",
+ "ical" : "ic",
+ "ful" : "",
+ "ness" : ""
+ },
+
+ c = "[^aeiou]", // consonant
+ v = "[aeiouy]", // vowel
+ C = c + "[^aeiouy]*", // consonant sequence
+ V = v + "[aeiou]*", // vowel sequence
+
+ mgr0 = "^(" + C + ")?" + V + C, // [C]VC... is m>0
+ meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$", // [C]VC[V] is m=1
+ mgr1 = "^(" + C + ")?" + V + C + V + C, // [C]VCVC... is m>1
+ s_v = "^(" + C + ")?" + v; // vowel in stem
+
+ return function (w) {
+ var stem,
+ suffix,
+ firstch,
+ re,
+ re2,
+ re3,
+ re4,
+ origword = w;
+
+ if (w.length < 3) { return w; }
+
+ firstch = w.substr(0,1);
+ if (firstch == "y") {
+ w = firstch.toUpperCase() + w.substr(1);
+ }
+
+ // Step 1a
+ re = /^(.+?)(ss|i)es$/;
+ re2 = /^(.+?)([^s])s$/;
+
+ if (re.test(w)) { w = w.replace(re,"$1$2"); }
+ else if (re2.test(w)) { w = w.replace(re2,"$1$2"); }
+
+ // Step 1b
+ re = /^(.+?)eed$/;
+ re2 = /^(.+?)(ed|ing)$/;
+ if (re.test(w)) {
+ var fp = re.exec(w);
+ re = new RegExp(mgr0);
+ if (re.test(fp[1])) {
+ re = /.$/;
+ w = w.replace(re,"");
+ }
+ } else if (re2.test(w)) {
+ var fp = re2.exec(w);
+ stem = fp[1];
+ re2 = new RegExp(s_v);
+ if (re2.test(stem)) {
+ w = stem;
+ re2 = /(at|bl|iz)$/;
+ re3 = new RegExp("([^aeiouylsz])\\1$");
+ re4 = new RegExp("^" + C + v + "[^aeiouwxy]$");
+ if (re2.test(w)) { w = w + "e"; }
+ else if (re3.test(w)) { re = /.$/; w = w.replace(re,""); }
+ else if (re4.test(w)) { w = w + "e"; }
+ }
+ }
+
+ // Step 1c
+ re = /^(.+?)y$/;
+ if (re.test(w)) {
+ var fp = re.exec(w);
+ stem = fp[1];
+ re = new RegExp(s_v);
+ if (re.test(stem)) { w = stem + "i"; }
+ }
+
+ // Step 2
+ re = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/;
+ if (re.test(w)) {
+ var fp = re.exec(w);
+ stem = fp[1];
+ suffix = fp[2];
+ re = new RegExp(mgr0);
+ if (re.test(stem)) {
+ w = stem + step2list[suffix];
+ }
+ }
+
+ // Step 3
+ re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/;
+ if (re.test(w)) {
+ var fp = re.exec(w);
+ stem = fp[1];
+ suffix = fp[2];
+ re = new RegExp(mgr0);
+ if (re.test(stem)) {
+ w = stem + step3list[suffix];
+ }
+ }
+
+ // Step 4
+ re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/;
+ re2 = /^(.+?)(s|t)(ion)$/;
+ if (re.test(w)) {
+ var fp = re.exec(w);
+ stem = fp[1];
+ re = new RegExp(mgr1);
+ if (re.test(stem)) {
+ w = stem;
+ }
+ } else if (re2.test(w)) {
+ var fp = re2.exec(w);
+ stem = fp[1] + fp[2];
+ re2 = new RegExp(mgr1);
+ if (re2.test(stem)) {
+ w = stem;
+ }
+ }
+
+ // Step 5
+ re = /^(.+?)e$/;
+ if (re.test(w)) {
+ var fp = re.exec(w);
+ stem = fp[1];
+ re = new RegExp(mgr1);
+ re2 = new RegExp(meq1);
+ re3 = new RegExp("^" + C + v + "[^aeiouwxy]$");
+ if (re.test(stem) || (re2.test(stem) && !(re3.test(stem)))) {
+ w = stem;
+ }
+ }
+
+ re = /ll$/;
+ re2 = new RegExp(mgr1);
+ if (re.test(w) && re2.test(w)) {
+ re = /.$/;
+ w = w.replace(re,"");
+ }
+
+ // and turn initial Y back to y
+
+ if (firstch == "y") {
+ w = firstch.toLowerCase() + w.substr(1);
+ }
+
+ return w;
+ }
+})();
\ No newline at end of file
diff --git a/installer/4/en/content/search/stemmers/fr_stemmer.js b/installer/4/en/content/search/stemmers/fr_stemmer.js
new file mode 100644
index 00000000..34f97431
--- /dev/null
+++ b/installer/4/en/content/search/stemmers/fr_stemmer.js
@@ -0,0 +1,299 @@
+/*
+ * Author: Kasun Gajasinghe
+ * E-Mail: kasunbg AT gmail DOT com
+ * Date: 09.08.2010
+ *
+ * usage: stemmer(word);
+ * ex: var stem = stemmer(foobar);
+ * Implementation of the stemming algorithm from http://snowball.tartarus.org/algorithms/french/stemmer.html
+ *
+ * LICENSE:
+ *
+ * Copyright (c) 2010, Kasun Gajasinghe. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ *
+ * 2. 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 KASUN GAJASINGHE ''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 KASUN GAJASINGHE 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.
+ *
+ */
+
+var stemmer = function(word){
+// Letters in French include the following accented forms,
+// â à ç ë é ê è ï î ô û ù
+// The following letters are vowels:
+// a e i o u y â à ë é ê è ï î ô û ù
+
+ word = word.toLowerCase();
+ var oriWord = word;
+ word = word.replace(/qu/g, 'qU'); //have to perform first, as after the operation, capital U is not treated as a vowel
+ word = word.replace(/([aeiouyâàëéêèïîôûù])u([aeiouyâàëéêèïîôûù])/g, '$1U$2');
+ word = word.replace(/([aeiouyâàëéêèïîôûù])i([aeiouyâàëéêèïîôûù])/g, '$1I$2');
+ word = word.replace(/([aeiouyâàëéêèïîôûù])y/g, '$1Y');
+ word = word.replace(/y([aeiouyâàëéêèïîôûù])/g, 'Y$1');
+
+ var rv='';
+ var rvIndex = -1;
+ if(word.search(/^(par|col|tap)/) != -1 || word.search(/^[aeiouyâàëéêèïîôûù]{2}/) != -1){
+ rv = word.substring(3);
+ rvIndex = 3;
+ } else {
+ rvIndex = word.substring(1).search(/[aeiouyâàëéêèïîôûù]/);
+ if(rvIndex != -1){
+ rvIndex +=2; //+2 is to supplement the substring(1) used to find rvIndex
+ rv = word.substring(rvIndex);
+ } else {
+ rvIndex = word.length;
+ }
+ }
+
+// R1 is the region after the first non-vowel following a vowel, or the end of the word if there is no such non-vowel.
+// R2 is the region after the first non-vowel following a vowel in R1, or the end of the word if there is no such non-vowel
+ var r1Index = word.search(/[aeiouyâàëéêèïîôûù][^aeiouyâàëéêèïîôûù]/);
+ var r1 = '';
+ if (r1Index != -1) {
+ r1Index += 2;
+ r1 = word.substring(r1Index);
+ } else {
+ r1Index = word.length;
+ }
+
+ var r2Index = -1;
+ var r2 = '';
+ if (r1Index != -1) {
+ r2Index = r1.search(/[aeiouyâàëéêèïîôûù][^aeiouyâàëéêèïîôûù]/);
+ if (r2Index != -1) {
+ r2Index += 2;
+ r2 = r1.substring(r2Index);
+ r2Index += r1Index;
+ } else {
+ r2 = '';
+ r2Index = word.length;
+ }
+ }
+ if (r1Index != -1 && r1Index < 3) {
+ r1Index = 3;
+ r1 = word.substring(r1Index);
+ }
+
+ /*
+ Step 1: Standard suffix removal
+ */
+ var a1Index = word.search(/(ance|iqUe|isme|able|iste|eux|ances|iqUes|ismes|ables|istes)$/);
+ var a2Index = word.search(/(atrice|ateur|ation|atrices|ateurs|ations)$/);
+ var a3Index = word.search(/(logie|logies)$/);
+ var a4Index = word.search(/(usion|ution|usions|utions)$/);
+ var a5Index = word.search(/(ence|ences)$/);
+ var a6Index = word.search(/(ement|ements)$/);
+ var a7Index = word.search(/(ité|ités)$/);
+ var a8Index = word.search(/(if|ive|ifs|ives)$/);
+ var a9Index = word.search(/(eaux)$/);
+ var a10Index = word.search(/(aux)$/);
+ var a11Index = word.search(/(euse|euses)$/);
+ var a12Index = word.search(/[^aeiouyâàëéêèïîôûù](issement|issements)$/);
+ var a13Index = word.search(/(amment)$/);
+ var a14Index = word.search(/(emment)$/);
+ var a15Index = word.search(/[aeiouyâàëéêèïîôûù](ment|ments)$/);
+
+ if(a1Index != -1 && a1Index >= r2Index){
+ word = word.substring(0,a1Index);
+ } else if(a2Index != -1 && a2Index >= r2Index){
+ word = word.substring(0,a2Index);
+ var a2Index2 = word.search(/(ic)$/);
+ if(a2Index2 != -1 && a2Index2 >= r2Index){
+ word = word.substring(0, a2Index2); //if preceded by ic, delete if in R2,
+ } else { //else replace by iqU
+ word = word.replace(/(ic)$/,'iqU');
+ }
+ } else if(a3Index != -1 && a3Index >= r2Index){
+ word = word.replace(/(logie|logies)$/,'log'); //replace with log if in R2
+ } else if(a4Index != -1 && a4Index >= r2Index){
+ word = word.replace(/(usion|ution|usions|utions)$/,'u'); //replace with u if in R2
+ } else if(a5Index != -1 && a5Index >= r2Index){
+ word = word.replace(/(ence|ences)$/,'ent'); //replace with ent if in R2
+ } else if(a6Index != -1 && a6Index >= rvIndex){
+ word = word.substring(0,a6Index);
+ if(word.search(/(iv)$/) >= r2Index){
+ word = word.replace(/(iv)$/, '');
+ if(word.search(/(at)$/) >= r2Index){
+ word = word.replace(/(at)$/, '');
+ }
+ } else if(word.search(/(eus)$/) != -1){
+ var a6Index2 = word.search(/(eus)$/);
+ if(a6Index2 >=r2Index){
+ word = word.substring(0, a6Index2);
+ } else if(a6Index2 >= r1Index){
+ word = word.substring(0,a6Index2)+"eux";
+ }
+ } else if(word.search(/(abl|iqU)$/) >= r2Index){
+ word = word.replace(/(abl|iqU)$/,''); //if preceded by abl or iqU, delete if in R2,
+ } else if(word.search(/(ièr|Ièr)$/) >= rvIndex){
+ word = word.replace(/(ièr|Ièr)$/,'i'); //if preceded by abl or iqU, delete if in R2,
+ }
+ } else if(a7Index != -1 && a7Index >= r2Index){
+ word = word.substring(0,a7Index); //delete if in R2
+ if(word.search(/(abil)$/) != -1){ //if preceded by abil, delete if in R2, else replace by abl, otherwise,
+ var a7Index2 = word.search(/(abil)$/);
+ if(a7Index2 >=r2Index){
+ word = word.substring(0, a7Index2);
+ } else {
+ word = word.substring(0,a7Index2)+"abl";
+ }
+ } else if(word.search(/(ic)$/) != -1){
+ var a7Index3 = word.search(/(ic)$/);
+ if(a7Index3 != -1 && a7Index3 >= r2Index){
+ word = word.substring(0, a7Index3); //if preceded by ic, delete if in R2,
+ } else { //else replace by iqU
+ word = word.replace(/(ic)$/,'iqU');
+ }
+ } else if(word.search(/(iv)$/) != r2Index){
+ word = word.replace(/(iv)$/,'');
+ }
+ } else if(a8Index != -1 && a8Index >= r2Index){
+ word = word.substring(0,a8Index);
+ if(word.search(/(at)$/) >= r2Index){
+ word = word.replace(/(at)$/, '');
+ if(word.search(/(ic)$/) >= r2Index){
+ word = word.replace(/(ic)$/, '');
+ } else { word = word.replace(/(ic)$/, 'iqU'); }
+ }
+ } else if(a9Index != -1){ word = word.replace(/(eaux)/,'eau')
+ } else if(a10Index >= r1Index){ word = word.replace(/(aux)/,'al')
+ } else if(a11Index != -1 ){
+ var a11Index2 = word.search(/(euse|euses)$/);
+ if(a11Index2 >=r2Index){
+ word = word.substring(0, a11Index2);
+ } else if(a11Index2 >= r1Index){
+ word = word.substring(0, a11Index2)+"eux";
+ }
+ } else if(a12Index!=-1 && a12Index>=r1Index){
+ word = word.substring(0,a12Index+1); //+1- amendment to non-vowel
+ } else if(a13Index!=-1 && a13Index>=rvIndex){
+ word = word.replace(/(amment)$/,'ant');
+ } else if(a14Index!=-1 && a14Index>=rvIndex){
+ word = word.replace(/(emment)$/,'ent');
+ } else if(a15Index!=-1 && a15Index>=rvIndex){
+ word = word.substring(0,a15Index+1);
+ }
+
+ /* Step 2a: Verb suffixes beginning i*/
+ var wordStep1 = word;
+ var step2aDone = false;
+ if(oriWord == word.toLowerCase() || oriWord.search(/(amment|emment|ment|ments)$/) != -1){
+ step2aDone = true;
+ var b1Regex = /([^aeiouyâàëéêèïîôûù])(îmes|ît|îtes|i|ie|ies|ir|ira|irai|iraIent|irais|irait|iras|irent|irez|iriez|irions|irons|iront|is|issaIent|issais|issait|issant|issante|issantes|issants|isse|issent|isses|issez|issiez|issions|issons|it)$/i;
+ if(word.search(b1Regex) >= rvIndex){
+ word = word.replace(b1Regex,'$1');
+ }
+ }
+
+ /* Step 2b: Other verb suffixes*/
+ if (step2aDone && wordStep1 == word) {
+ if (word.search(/(ions)$/) >= r2Index) {
+ word = word.replace(/(ions)$/, '');
+ } else {
+ var b2Regex = /(é|ée|ées|és|èrent|er|era|erai|eraIent|erais|erait|eras|erez|eriez|erions|erons|eront|ez|iez)$/i;
+ if (word.search(b2Regex) >= rvIndex) {
+ word = word.replace(b2Regex, '');
+ } else {
+ var b3Regex = /e(âmes|ât|âtes|a|ai|aIent|ais|ait|ant|ante|antes|ants|as|asse|assent|asses|assiez|assions)$/i;
+ if (word.search(b3Regex) >= rvIndex) {
+ word = word.replace(b3Regex, '');
+ } else {
+ var b3Regex2 = /(âmes|ât|âtes|a|ai|aIent|ais|ait|ant|ante|antes|ants|as|asse|assent|asses|assiez|assions)$/i;
+ if (word.search(b3Regex2) >= rvIndex) {
+ word = word.replace(b3Regex2, '');
+ }
+ }
+ }
+ }
+ }
+
+ if(oriWord != word.toLowerCase()){
+ /* Step 3 */
+ var rep = '';
+ if(word.search(/Y$/) != -1) {
+ word = word.replace(/Y$/, 'i');
+ } else if(word.search(/ç$/) != -1){
+ word = word.replace(/ç$/, 'c');
+ }
+ } else {
+ /* Step 4 */
+ //If the word ends s, not preceded by a, i, o, u, è or s, delete it.
+ if (word.search(/([^aiouès])s$/) >= rvIndex) {
+ word = word.replace(/([^aiouès])s$/, '$1');
+ }
+ var e1Index = word.search(/ion$/);
+ if (e1Index >= r2Index && word.search(/[st]ion$/) >= rvIndex) {
+ word = word.substring(0, e1Index);
+ } else {
+ var e2Index = word.search(/(ier|ière|Ier|Ière)$/);
+ if (e2Index != -1 && e2Index >= rvIndex) {
+ word = word.substring(0, e2Index) + "i";
+ } else {
+ if (word.search(/e$/) >= rvIndex) {
+ word = word.replace(/e$/, ''); //delete last e
+ } else if (word.search(/guë$/) >= rvIndex) {
+ word = word.replace(/guë$/, 'gu');
+ }
+ }
+ }
+ }
+
+ /* Step 5: Undouble */
+ //word = word.replace(/(en|on|et|el|eil)(n|t|l)$/,'$1');
+ word = word.replace(/(en|on)(n)$/,'$1');
+ word = word.replace(/(ett)$/,'et');
+ word = word.replace(/(el|eil)(l)$/,'$1');
+
+ /* Step 6: Un-accent */
+ word = word.replace(/[éè]([^aeiouyâàëéêèïîôûù]+)$/,'e$1');
+ word = word.toLowerCase();
+ return word;
+};
+
+var eqOut = new Array();
+var noteqOut = new Array();
+var eqCount = 0;
+/*
+To test the stemming, create two arrays named "voc" and "COut" which are for vocabualary and the stemmed output.
+Then add the vocabulary strings and output strings. This method will generate the stemmed output for "voc" and will
+compare the output with COut.
+ (I used porter's voc and out files and did a regex to convert them to js objects. regex: /");\nvoc.push("/g . This
+ will add strings to voc array such that output would look like: voc.push("foobar"); ) drop me an email for any help.
+ */
+function testFr(){
+ var start = new Date().getTime(); //execution time
+ eqCount = 0;
+ eqOut = new Array();
+ noteqOut = new Array();
+ for(var k=0;k
+
+
+
+ Security Level
Select your country
+ or region. This is important for all kinds of settings, like the currency
+ and wireless regulatory domain. Setting the wrong country can lead to not
+ being able to use a Wireless network.
If your country
+ isn't in the list, click the Other Countries button
+ and choose your country / region there.
Note
If your country is
+ only in the Other Countries list, after clicking
+ OK it may seem a country from the first list was
+ chosen. Please ignore this, DrakX will follow your real choice.
Input method
In the
+ Other Countries screen you can also select an input
+ method (at the bottom of the list). Input methods allow users to input
+ multilingual characters (Chinese, Japanese, Korean, etc). IBus is the
+ default input method in Mageia DVDs, Africa/India and Asia/no-India
+ Live-CDs. For Asian and African locales, IBus will be set as default
+ input method so users should not need to configure it manually. Other
+ input methods(SCIM, GCIN, HIME, etc) also provide similar functions and
+ can be installed if you added HTTP/FTP media before package
+ selection.
Note
If you missed
+ the input method setup during installation, you can access it after
+ you boot your installed system via "Configure your Computer" ->
+ "System", or by running localedrake as root.
Use this option for a fresh Mageia
+ installation.
Upgrade
If you have one or more Mageia installations on your
+ system, the installer will allow you to upgrade one of them to the latest release.
Warning
Only upgrading from a previous Mageia version that was
+ still supported when this installer's version
+ was released, has been thoroughly tested. If you want to upgrade a
+ Mageia version that had already reached its End Of Life when this
+ one was released, then it is better to do a clean install while
+ preserving your /home partition.
Note
If during install you decide to stop the installation, it is
+ possible to reboot, but please think twice before you do this. Once a
+ partition has been formatted or updates have started to be installed, your
+ computer isn't in the same state anymore and rebooting it could very well
+ leave you with an unusable system. If in spite of that you are very sure
+ rebooting is what you want, go to a text terminal by pressing the three
+ keys Alt Ctrl F2 at the same time. After that, press
+ Alt Ctrl Delete simultaneously to reboot.
Tip
If you have discovered that you forgot to select an additional
+ language, you can return from the "Install or Upgrade" screen to the
+ language choice screen by pressing Alt Ctrl Home. Do
+ not do this later in the install.
DrakX selects an appropriate
+ keyboard for your language. If no suitable keyboard is found it will default
+ to a US keyboard layout.
Make sure that the
+ selection is correct or choose another keyboard layout. If you don't
+ know which layout your keyboard has, look in the specifications that
+ came with your system, or ask the computer vendor. There may even be a
+ label on the keyboard that identifies the layout. You can also look
+ here: en.wikipedia.org/wiki/Keyboard_layout
If your keyboard isn't in
+ the list shown, click on More to get a full list,
+ and select your keyboard there.
Warning
After choosing a
+ keyboard from the More dialog, you'll return
+ to the first keyboard choice dialog and it will seem as though a
+ keyboard from that screen was chosen. You can safely ignore this
+ anomaly and continue the installation: Your keyboard is the one you
+ chose from the full list.
If you choose a keyboard
+ based on non-Latin characters, you will see an extra dialog screen
+ asking how you would prefer to switch between the Latin and non-Latin
+ keyboard layouts
diff --git a/installer/4/en/content/selectLanguage.html b/installer/4/en/content/selectLanguage.html
new file mode 100644
index 00000000..5d202bdd
--- /dev/null
+++ b/installer/4/en/content/selectLanguage.html
@@ -0,0 +1,63 @@
+
+
+
+
+ Please choose a language to use
Select your preferred language, by first expanding the list for your
+ continent. Mageia will use this selection during
+ the installation and for your installed system.
If it is likely that you will require several languages installed on
+ your system, for yourself or other users, then you should use the
+ Multiple languages button to add them now. It will be
+ difficult to add extra language support after installation.
Warning
Even if you choose more than one language, you must first choose one
+ of them as your preferred language in the first language screen. It will
+ also be marked as chosen in the multiple languages screen .
If your keyboard language is not the same as your preferred
+ language, then it is advisable to install the language of your keyboard
+ as well.
Mageia uses UTF-8 (Unicode) support by default. This may be
+ disabled in the "multiple languages" screen if you know that it is
+ inappropriate for your language. Disabling UTF-8 applies to all
+ installed languages.
You can change the language of your system after installation in
+ the Mageia Control Center -> System -> Manage localization for
+ your system.
If you prefer different
+ bootloader settings to those chosen automatically by the installer, you can
+ change them here.
You may already have another
+ operating system on your machine, in which case you need to decide whether
+ to add Mageia to your existing bootloader, or allow Mageia to create a new
+ one.
Tip
The Mageia graphical menus
+ are nice :)
Using a Mageia
+ bootloader
By default, Mageia writes
+ a new GRUB (legacy) bootloader into the MBR (Master Boot Record) of your
+ first hard drive. If you already have other operating systems installed,
+ Mageia attempts to add them to your new Mageia boot menu.
Mageia now also offers GRUB2 as an optional bootloader
+ in addition to GRUB legacy and Lilo.
Warning
Linux systems which use
+ the GRUB2 bootloader are not currently supported by GRUB (legacy) and
+ will not be recognised if the default GRUB bootloader is used.
The best solution here is to use the GRUB2 bootloader
+ which is available at the Summary page during installation.
Using an
+ existing bootloader
If you decide to use an
+ existing bootloader then you will need to remember to STOP at the summary
+ page during the installation and click the Bootloader
+ Configure button, which will allow you to change
+ the bootloader install location.
Do not select a device
+ e.g."sda", or you will overwrite your existing MBR. You must select the
+ root partition that you chose during the partitioning phase earlier, e.g.
+ sda7.
To be clear, sda is a
+ device, sda7 is a partition on that device.
Tip
Go to tty2 with
+ Ctrl+Alt+F2 and type df to check where your
+ / (root) partition is. Ctrl+Alt+F7 takes you back to
+ the installer screen.
The exact procedure for
+ adding your Mageia system to an existing bootloader is beyond the scope of
+ this help, however in most cases it will involve running the relevant
+ bootloader installation program which should detect and add it
+ automatically. See the documentation for the operating system in
+ question.
Bootloader
+ advanced option
If you have very limited
+ disk space for the / partition that contains
+ /tmp, click on Advanced and
+ check the box for Clean /tmp at each boot. This helps
+ to maintain some free space.
You can add an entry or modify the one you select first, by pressing the relevant button in the Bootloader Configuration screen and editing the screen that pops up on top of it.
Some things that can be done without any risk, are changing the label of an entry and ticking the box to make an entry the default one.
You can add the proper version number of an entry, or rename it completely.
The default entry is the one the systems boots into if you don't make a choice while booting up.
Warning
Editing other things can leave you with an unbootable system. Please don't just try something without knowing what you are doing.
DrakX usually detects hard disks correctly. With some
+ older SCSI controllers it may be unable to determine the correct drivers to use and subsequently
+ fail to recognise the drive.
If this happens, you will need to
+ manually tell Drakx which SCSI drive(s) you have.
DrakX should then be able
+ to configure the drive(s) correctly.
In this screen the name of the driver that the installer chose for your
+ sound card is given, which will be the default driver if we have a
+ default one.
+
The default driver should work without problems. However, if after
+ install you do encounter problems, then run draksound
+ or start this tool via MCC (Mageia Control Center), by choosing the
+ Hardware tab and clicking on Sound
+ Configuration at the top right of the screen.
+
Then, in the draksound or "Sound Configuration" tool screen, click on
+ Advanced and then on
+ Troubleshooting to find very useful advice about how
+ to solve the problem.
+
Advanced
Clicking Advanced in this screen, during
+ install, is useful if there is no default driver and there are several
+ drivers available, but you think the installer selected the wrong one.
+
In that case you can select a different driver after clicking on
+ Let me pick any driver.
+
diff --git a/installer/4/en/content/t-mageia-2011.png b/installer/4/en/content/t-mageia-2011.png
new file mode 100644
index 00000000..b8260f33
Binary files /dev/null and b/installer/4/en/content/t-mageia-2011.png differ
diff --git a/installer/4/en/content/takeOverHdConfirm.html b/installer/4/en/content/takeOverHdConfirm.html
new file mode 100644
index 00000000..fc3de28a
--- /dev/null
+++ b/installer/4/en/content/takeOverHdConfirm.html
@@ -0,0 +1,54 @@
+
+
+
+
+ Confirm hard disk to be formatted