diff --git a/wp-admin/import/blogger.php b/wp-admin/import/blogger.php index c200fba114..0495a7ade3 100644 --- a/wp-admin/import/blogger.php +++ b/wp-admin/import/blogger.php @@ -1,663 +1,663 @@ -
$welcome
"; - if ( function_exists('curl_init') ) - echo ""; - else - echo "$incompat
"; - echo "\n"; - } - - // Deletes saved data and redirect. - function restart() { - delete_option('import-blogger'); - header("Location: admin.php?import=blogger"); - die(); - } - - // Generates a string that will make the page reload in a specified interval. - function refresher($msec) { - if ( $msec ) - return "\n\n\n"; - else - return "\n\n\n"; - } - - // Returns associative array of code, header, cookies, body. Based on code from php.net. - function parse_response($this_response) { - // Split response into header and body sections - list($response_headers, $response_body) = explode("\r\n\r\n", $this_response, 2); - $response_header_lines = explode("\r\n", $response_headers); - - // First line of headers is the HTTP response code - $http_response_line = array_shift($response_header_lines); - if(preg_match('@^HTTP/[0-9]\.[0-9] ([0-9]{3})@',$http_response_line, $matches)) { $response_code = $matches[1]; } - - // put the rest of the headers in an array - $response_header_array = array(); - foreach($response_header_lines as $header_line) { - list($header,$value) = explode(': ', $header_line, 2); - $response_header_array[$header] .= $value."\n"; - } - - $cookie_array = array(); - $cookies = explode("\n", $response_header_array["Set-Cookie"]); - foreach($cookies as $this_cookie) { array_push($cookie_array, "Cookie: ".$this_cookie); } - - return array("code" => $response_code, "header" => $response_header_array, "cookies" => $cookie_array, "body" => $response_body); - } - - // Prints a form for the user to enter Blogger creds. - function login_form($text='') { - echo '.*
#U', $response['body'], $matches); - $progress = $matches[0]; - die($head . $progress); - } else { - $this->import['blogs'][$_GET['blog']]['publish'][$i] = false; - update_option('import-blogger', $this->import); - die($head); - } - } else { - // Subsequent call. Keep checking status until Blogger reports publish complete. - $url = $this->import['blogs'][$_GET['blog']]['publish'][$i]; - $response = $this->get_blogger($url, $this->import['cookies']); - if ( preg_match('#.*
#U', $response['body'], $matches) ) { - $progress = $matches[0]; - if ( strstr($progress, '100%') ) { - $this->set_next_step($i); - $progress .= ''.__('Moving on...').'
'; - } - die($head . $progress); - } else { - $this->import['blogs'][$_GET['blog']]['publish'][$i] = false; - update_option('import-blogger', $this->import); - die("$head" . __('Trying again...') . '
'); - } - } - } - - // Sets next step, saves options - function set_next_step($step) { - $this->import['blogs'][$_GET['blog']]['nextstep'] = $step; - update_option('import-blogger', $this->import); - } - - // Redirects to next step - function do_next_step() { - header("Location: admin.php?import=blogger&noheader=true&blog={$_GET['blog']}"); - die(); - } - - // Step 0: Do Blogger login, get blogid/title pairs. - function do_login() { - if ( ( ! $this->import['user'] && ! is_array($this->import['cookies']) ) ) { - // The user must provide a Blogger username and password. - if ( ! ( $_POST['user'] && $_POST['pass'] ) ) { - $this->login_form(__('The script will log into your Blogger account, change some settings so it can read your blog, and restore the original settings when it\'s done. Here\'s what you do:'.__('Are you looking for %title%? It is temporarily out of service. Please try again in a few minutes. Meanwhile, discover a better blogging tool.').'
' . addslashes(print_r($headers, 1)) . addslashes(print_r($response, 1)) . ''); - $this->import['blogs'][$_GET['blog']]['url'] = 'http://' . $optary['modify']['subdomain'] . '.blogspot.com/'; - sleep(2); - } else { - $this->import['blogs'][$_GET['blog']]['url'] = 'http://' . $_POST['subdomain'] . '.blogspot.com/'; - update_option('import-blogger', $this->import); - $output .= "
$blog_opt
'.__('Error on form submission. Retry or reset the importer.').'
' . addslashes(print_r($response, 1))); - } - $output .= "$blog_opt
$blog_opt
$blog_opt in progress, please wait...
\n"; - } else { - $output.= "$blog_opt
\n"; - } - } - if ( $form ) - die($output . $form); - - $this->set_next_step(4); - $this->do_next_step(); - } - - // Step 3: Cancelled :-) - - // Step 4: Publish with the new template and settings. - function publish_blog() { - $this->publish_blogger(5, __('Publishing with new template and options')); - } - - // Step 5: Get the archive URLs from the new blog. - function get_archive_urls() { - $bloghtml = $this->get_blogger($this->import['blogs'][$_GET['blog']]['url']); - if (! strstr($bloghtml['body'], 'import['blogs'][$_GET['blog']]['archives'][$archive] = false; - } - $this->set_next_step(6); - $this->do_next_step(); - } - - // Step 6: Get each monthly archive, import it, mark it done. - function get_archive() { - global $wpdb; - $output = '$archivename $status
\n"; - } - if ( ! $did_one ) - $this->set_next_step(7); - die( $this->refresher(1000) . $output ); - } - - // Step 7: Restore the backed-up settings to Blogger - function restore_settings() { - $output = '$blog_opt
\n"; - } elseif ( $optary['restored'] || ! $optary['modify'] ) { - $output .= "$blog_opt
Please tell the devs.
' . addslashes(print_r($response, 1)) ); - } - } - if ( $optary['backup'] != $optary['modify'] ) { - $response = $this->post_blogger($posturl, $headers, $optary['backup']); - if ( $response['code'] >= 400 || strstr($response['body'], 'There are errors on this form') ) { - $this->import['blogs'][$_GET['blog']]['options']["$blog_opt"]['error'] = true; - update_option('import-blogger', $this->import); - $output .= "$blog_opt ".__('failed. Trying again.').'
'; - } else { - $this->import['blogs'][$_GET['blog']]['options']["$blog_opt"]['restored'] = true; - update_option('import-blogger', $this->import); - $output .= "$blog_opt ".__('restored.').'
'; - } - } - $did_one = true; - } - } - - if ( $did_one ) { - die( $this->refresher(1000) . $output ); - } elseif ( $this->import['blogs'][$_GET['blog']]['options']['blog-publishing']['backup']['publishMode'] > 0 ) { - $this->set_next_step(9); - } else { - $this->set_next_step(8); - } - - $this->do_next_step(); - } - - // Step 8: Republish, all back to normal - function republish_blog() { - $this->publish_blogger(9, __('Publishing with original template and options')); - } - - // Step 9: Congratulate the user - function congrats() { - echo ''.__('Now that you have imported your Blogger blog into WordPress, what are you going to do? Here are some suggestions:').'
'.print_r($this->import,1).'do_login(); - break; - case 1 : - $this->select_blog(); - break; - case 2 : - $this->backup_settings(); - break; - case 3 : - $this->wait_for_blogger(); - break; - case 4 : - $this->publish_blog(); - break; - case 5 : - $this->get_archive_urls(); - break; - case 6 : - $this->get_archive(); - break; - case 7 : - $this->restore_settings(); - break; - case 8 : - $this->republish_blog(); - break; - case 9 : - $this->congrats(); - break; - } - die; - - } else { - $this->greet(); - } - } - - function Blogger_Import() { - // This space intentionally left blank. - } -} - -$blogger_import = new Blogger_Import(); - -register_importer('blogger', 'Blogger', __('Import posts and comments from a Blogger account'), array ($blogger_import, 'start')); - -?> +
$welcome
"; + if ( function_exists('curl_init') ) + echo ""; + else + echo "$incompat
"; + echo "\n"; + } + + // Deletes saved data and redirect. + function restart() { + delete_option('import-blogger'); + header("Location: admin.php?import=blogger"); + die(); + } + + // Generates a string that will make the page reload in a specified interval. + function refresher($msec) { + if ( $msec ) + return "\n\n\n"; + else + return "\n\n\n"; + } + + // Returns associative array of code, header, cookies, body. Based on code from php.net. + function parse_response($this_response) { + // Split response into header and body sections + list($response_headers, $response_body) = explode("\r\n\r\n", $this_response, 2); + $response_header_lines = explode("\r\n", $response_headers); + + // First line of headers is the HTTP response code + $http_response_line = array_shift($response_header_lines); + if(preg_match('@^HTTP/[0-9]\.[0-9] ([0-9]{3})@',$http_response_line, $matches)) { $response_code = $matches[1]; } + + // put the rest of the headers in an array + $response_header_array = array(); + foreach($response_header_lines as $header_line) { + list($header,$value) = explode(': ', $header_line, 2); + $response_header_array[$header] .= $value."\n"; + } + + $cookie_array = array(); + $cookies = explode("\n", $response_header_array["Set-Cookie"]); + foreach($cookies as $this_cookie) { array_push($cookie_array, "Cookie: ".$this_cookie); } + + return array("code" => $response_code, "header" => $response_header_array, "cookies" => $cookie_array, "body" => $response_body); + } + + // Prints a form for the user to enter Blogger creds. + function login_form($text='') { + echo '.*
#U', $response['body'], $matches); + $progress = $matches[0]; + die($head . $progress); + } else { + $this->import['blogs'][$_GET['blog']]['publish'][$i] = false; + update_option('import-blogger', $this->import); + die($head); + } + } else { + // Subsequent call. Keep checking status until Blogger reports publish complete. + $url = $this->import['blogs'][$_GET['blog']]['publish'][$i]; + $response = $this->get_blogger($url, $this->import['cookies']); + if ( preg_match('#.*
#U', $response['body'], $matches) ) { + $progress = $matches[0]; + if ( strstr($progress, '100%') ) { + $this->set_next_step($i); + $progress .= ''.__('Moving on...').'
'; + } + die($head . $progress); + } else { + $this->import['blogs'][$_GET['blog']]['publish'][$i] = false; + update_option('import-blogger', $this->import); + die("$head" . __('Trying again...') . '
'); + } + } + } + + // Sets next step, saves options + function set_next_step($step) { + $this->import['blogs'][$_GET['blog']]['nextstep'] = $step; + update_option('import-blogger', $this->import); + } + + // Redirects to next step + function do_next_step() { + header("Location: admin.php?import=blogger&noheader=true&blog={$_GET['blog']}"); + die(); + } + + // Step 0: Do Blogger login, get blogid/title pairs. + function do_login() { + if ( ( ! $this->import['user'] && ! is_array($this->import['cookies']) ) ) { + // The user must provide a Blogger username and password. + if ( ! ( $_POST['user'] && $_POST['pass'] ) ) { + $this->login_form(__('The script will log into your Blogger account, change some settings so it can read your blog, and restore the original settings when it\'s done. Here\'s what you do:'.__('Are you looking for %title%? It is temporarily out of service. Please try again in a few minutes. Meanwhile, discover a better blogging tool.').'
' . addslashes(print_r($headers, 1)) . addslashes(print_r($response, 1)) . ''); + $this->import['blogs'][$_GET['blog']]['url'] = 'http://' . $optary['modify']['subdomain'] . '.blogspot.com/'; + sleep(2); + } else { + $this->import['blogs'][$_GET['blog']]['url'] = 'http://' . $_POST['subdomain'] . '.blogspot.com/'; + update_option('import-blogger', $this->import); + $output .= "
$blog_opt
'.__('Error on form submission. Retry or reset the importer.').'
' . addslashes(print_r($response, 1))); + } + $output .= "$blog_opt
$blog_opt
$blog_opt in progress, please wait...
\n"; + } else { + $output.= "$blog_opt
\n"; + } + } + if ( $form ) + die($output . $form); + + $this->set_next_step(4); + $this->do_next_step(); + } + + // Step 3: Cancelled :-) + + // Step 4: Publish with the new template and settings. + function publish_blog() { + $this->publish_blogger(5, __('Publishing with new template and options')); + } + + // Step 5: Get the archive URLs from the new blog. + function get_archive_urls() { + $bloghtml = $this->get_blogger($this->import['blogs'][$_GET['blog']]['url']); + if (! strstr($bloghtml['body'], 'import['blogs'][$_GET['blog']]['archives'][$archive] = false; + } + $this->set_next_step(6); + $this->do_next_step(); + } + + // Step 6: Get each monthly archive, import it, mark it done. + function get_archive() { + global $wpdb; + $output = '$archivename $status
\n"; + } + if ( ! $did_one ) + $this->set_next_step(7); + die( $this->refresher(1000) . $output ); + } + + // Step 7: Restore the backed-up settings to Blogger + function restore_settings() { + $output = '$blog_opt
\n"; + } elseif ( $optary['restored'] || ! $optary['modify'] ) { + $output .= "$blog_opt
Please tell the devs.
' . addslashes(print_r($response, 1)) ); + } + } + if ( $optary['backup'] != $optary['modify'] ) { + $response = $this->post_blogger($posturl, $headers, $optary['backup']); + if ( $response['code'] >= 400 || strstr($response['body'], 'There are errors on this form') ) { + $this->import['blogs'][$_GET['blog']]['options']["$blog_opt"]['error'] = true; + update_option('import-blogger', $this->import); + $output .= "$blog_opt ".__('failed. Trying again.').'
'; + } else { + $this->import['blogs'][$_GET['blog']]['options']["$blog_opt"]['restored'] = true; + update_option('import-blogger', $this->import); + $output .= "$blog_opt ".__('restored.').'
'; + } + } + $did_one = true; + } + } + + if ( $did_one ) { + die( $this->refresher(1000) . $output ); + } elseif ( $this->import['blogs'][$_GET['blog']]['options']['blog-publishing']['backup']['publishMode'] > 0 ) { + $this->set_next_step(9); + } else { + $this->set_next_step(8); + } + + $this->do_next_step(); + } + + // Step 8: Republish, all back to normal + function republish_blog() { + $this->publish_blogger(9, __('Publishing with original template and options')); + } + + // Step 9: Congratulate the user + function congrats() { + echo ''.__('Now that you have imported your Blogger blog into WordPress, what are you going to do? Here are some suggestions:').'
'.print_r($this->import,1).'do_login(); + break; + case 1 : + $this->select_blog(); + break; + case 2 : + $this->backup_settings(); + break; + case 3 : + $this->wait_for_blogger(); + break; + case 4 : + $this->publish_blog(); + break; + case 5 : + $this->get_archive_urls(); + break; + case 6 : + $this->get_archive(); + break; + case 7 : + $this->restore_settings(); + break; + case 8 : + $this->republish_blog(); + break; + case 9 : + $this->congrats(); + break; + } + die; + + } else { + $this->greet(); + } + } + + function Blogger_Import() { + // This space intentionally left blank. + } +} + +$blogger_import = new Blogger_Import(); + +register_importer('blogger', 'Blogger', __('Import posts and comments from a Blogger account'), array ($blogger_import, 'start')); + +?> diff --git a/wp-includes/js/tinymce/themes/advanced/about.htm b/wp-includes/js/tinymce/themes/advanced/about.htm index f4130fdfe4..bbd8d1389a 100644 --- a/wp-includes/js/tinymce/themes/advanced/about.htm +++ b/wp-includes/js/tinymce/themes/advanced/about.htm @@ -1,52 +1,52 @@ - - -
Version: {$tinymce_version} ({$tinymce_releasedate})
-TinyMCE is a platform independent web based Javascript HTML WYSIWYG editor control released as Open Source under LGPL - by Moxiecode Systems AB. It has the ability to convert HTML TEXTAREA fields or other HTML elements to editor instances.
-Copyright © 2005, Moxiecode Systems AB, All rights reserved.
-For more information about this software visit the TinyMCE website.
- - --
Version: {$tinymce_version} ({$tinymce_releasedate})
+TinyMCE is a platform independent web based Javascript HTML WYSIWYG editor control released as Open Source under LGPL + by Moxiecode Systems AB. It has the ability to convert HTML TEXTAREA fields or other HTML elements to editor instances.
+Copyright © 2005, Moxiecode Systems AB, All rights reserved.
+For more information about this software visit the TinyMCE website.
+ + ++
| {$lang_theme_charmap_title} | -|||||
| - - | -
-
|
- ||||
-
|
- |||||
| {$lang_theme_charmap_title} | +|||||
| + + | +
+
|
+ ||||
+
|
+ |||||
| ' + tinyMCE.getLang('lang_plugin') + ' | '; - html += '' + tinyMCE.getLang('lang_author') + ' | '; - html += '' + tinyMCE.getLang('lang_version') + ' | '; - html += '' + info.longname + ' | '; - else - html += '' + info.longname + ' | '; - - if (info.authorurl != null && info.authorurl != '') - html += '' + info.author + ' | '; - else - html += '' + info.author + ' | '; - - html += '' + info.version + ' | '; - html += ''; - } - - html += '
';
- html += '
';
-
- document.getElementById('buttoncontainer').innerHTML = html;
-}
+function init() {
+ tinyMCEPopup.resizeToInnerSize();
+
+ // Give FF some time
+ window.setTimeout('insertHelpIFrame();', 10);
+
+ var tcont = document.getElementById('plugintablecontainer');
+ var plugins = tinyMCE.getParam('plugins', '', true, ',');
+ if (plugins.length == 0)
+ document.getElementById('plugins_tab').style.display = 'none';
+
+ var html = "";
+ html += '| ' + tinyMCE.getLang('lang_plugin') + ' | '; + html += '' + tinyMCE.getLang('lang_author') + ' | '; + html += '' + tinyMCE.getLang('lang_version') + ' | '; + html += '' + info.longname + ' | '; + else + html += '' + info.longname + ' | '; + + if (info.authorurl != null && info.authorurl != '') + html += '' + info.author + ' | '; + else + html += '' + info.author + ' | '; + + html += '' + info.version + ' | '; + html += ''; + } + + html += '
';
+ html += '
';
+
+ document.getElementById('buttoncontainer').innerHTML = html;
+}
diff --git a/wp-includes/js/tinymce/themes/advanced/jscripts/anchor.js b/wp-includes/js/tinymce/themes/advanced/jscripts/anchor.js
index 446a3ce2be..a89f9729d4 100644
--- a/wp-includes/js/tinymce/themes/advanced/jscripts/anchor.js
+++ b/wp-includes/js/tinymce/themes/advanced/jscripts/anchor.js
@@ -1,59 +1,59 @@
-var action, element;
-
-function init() {
- tinyMCEPopup.resizeToInnerSize();
-
- var inst = tinyMCE.getInstanceById(tinyMCE.getWindowArg('editor_id'));
- var anchor = tinyMCE.getParentElement(inst.getFocusElement(), "a", "name");
- var img = inst.getFocusElement();
- action = 'insert';
-
- if (anchor != null) {
- element = anchor;
- action = "update";
- }
-
- if (tinyMCE.getAttrib(img, "class") == "mceItemAnchor") {
- element = img;
- action = "update";
- }
-
- if (action == "update")
- document.forms[0].anchorName.value = element.nodeName == "IMG" ? element.getAttribute("title") : element.getAttribute("name");
-
- document.forms[0].insert.value = tinyMCE.getLang('lang_' + action, 'Insert', true);
-}
-
-function insertAnchor() {
- var inst = tinyMCE.getInstanceById(tinyMCE.getWindowArg('editor_id'));
- var name = document.forms[0].anchorName.value;
-
- tinyMCEPopup.execCommand("mceBeginUndoLevel");
-
- if (action == "update") {
- if (element.nodeName == "IMG")
- element.setAttribute("title", name);
- else
- element.setAttribute("name", name);
- } else {
- var rng = inst.getRng();
-
- if (rng.collapse)
- rng.collapse(false);
-
- name = name.replace(/&/g, '&');
- name = name.replace(/\"/g, '"');
- name = name.replace(//g, '&gr;');
-
- html = '';
-
- tinyMCEPopup.execCommand("mceInsertContent", false, html);
- tinyMCE.handleVisualAid(inst.getBody(), true, inst.visualAid, inst);
- }
-
- tinyMCEPopup.execCommand("mceEndUndoLevel");
-
- tinyMCE.triggerNodeChange();
- tinyMCEPopup.close();
-}
+var action, element;
+
+function init() {
+ tinyMCEPopup.resizeToInnerSize();
+
+ var inst = tinyMCE.getInstanceById(tinyMCE.getWindowArg('editor_id'));
+ var anchor = tinyMCE.getParentElement(inst.getFocusElement(), "a", "name");
+ var img = inst.getFocusElement();
+ action = 'insert';
+
+ if (anchor != null) {
+ element = anchor;
+ action = "update";
+ }
+
+ if (tinyMCE.getAttrib(img, "class") == "mceItemAnchor") {
+ element = img;
+ action = "update";
+ }
+
+ if (action == "update")
+ document.forms[0].anchorName.value = element.nodeName == "IMG" ? element.getAttribute("title") : element.getAttribute("name");
+
+ document.forms[0].insert.value = tinyMCE.getLang('lang_' + action, 'Insert', true);
+}
+
+function insertAnchor() {
+ var inst = tinyMCE.getInstanceById(tinyMCE.getWindowArg('editor_id'));
+ var name = document.forms[0].anchorName.value;
+
+ tinyMCEPopup.execCommand("mceBeginUndoLevel");
+
+ if (action == "update") {
+ if (element.nodeName == "IMG")
+ element.setAttribute("title", name);
+ else
+ element.setAttribute("name", name);
+ } else {
+ var rng = inst.getRng();
+
+ if (rng.collapse)
+ rng.collapse(false);
+
+ name = name.replace(/&/g, '&');
+ name = name.replace(/\"/g, '"');
+ name = name.replace(//g, '&gr;');
+
+ html = '';
+
+ tinyMCEPopup.execCommand("mceInsertContent", false, html);
+ tinyMCE.handleVisualAid(inst.getBody(), true, inst.visualAid, inst);
+ }
+
+ tinyMCEPopup.execCommand("mceEndUndoLevel");
+
+ tinyMCE.triggerNodeChange();
+ tinyMCEPopup.close();
+}
diff --git a/wp-includes/js/tinymce/themes/advanced/jscripts/charmap.js b/wp-includes/js/tinymce/themes/advanced/jscripts/charmap.js
index bc9df27b35..2f758cfa8d 100644
--- a/wp-includes/js/tinymce/themes/advanced/jscripts/charmap.js
+++ b/wp-includes/js/tinymce/themes/advanced/jscripts/charmap.js
@@ -1,324 +1,324 @@
-function init() {
- tinyMCEPopup.resizeToInnerSize();
-}
-
-var charmap = new Array();
-
-// for mor details please see w3c.org
-// now here is the complete list ;)
-
-charmap = [
- [' ', ' ', true, 'no-break space'],
- ['&', '&', true, 'ampersand'],
- ['"', '"', true, 'quotation mark'],
-// finance
- ['¢', '¢', true, 'cent sign'],
- ['€', '€', true, 'euro sign'],
- ['£', '£', true, 'pound sign'],
- ['¥', '¥', true, 'yen sign'],
-// signs
- ['©', '©', true, 'copyright sign'],
- ['®', '®', true, 'registered sign'],
- ['™', '™', true, 'trade mark sign'],
- ['‰', '‰', true, 'per mille sign'],
- ['µ', 'µ', true, 'micro sign'],
- ['·', '·', true, 'middle dot'],
- ['•', '•', true, 'bullet'],
- ['…', '…', true, 'three dot leader'],
- ['′', '′', true, 'minutes / feet'],
- ['″', '″', true, 'seconds / inches'],
- ['§', '§', true, 'section sign'],
- ['¶', '¶', true, 'paragraph sign'],
- ['ß', 'ß', true, 'sharp s / ess-zed'],
-// quotations
- ['‹', '‹', true, 'single left-pointing angle quotation mark'],
- ['›', '›', true, 'single right-pointing angle quotation mark'],
- ['«', '«', true, 'left pointing guillemet'],
- ['»', '»', true, 'right pointing guillemet'],
- ['‘', '‘', true, 'left single quotation mark'],
- ['’', '’', true, 'right single quotation mark'],
- ['“', '“', true, 'left double quotation mark'],
- ['”', '”', true, 'right double quotation mark'],
- ['‚', '‚', true, 'single low-9 quotation mark'],
- ['„', '„', true, 'double low-9 quotation mark'],
- ['<', '<', true, 'less-than sign'],
- ['>', '>', true, 'greater-than sign'],
- ['≤', '≤', true, 'less-than or equal to'],
- ['≥', '≥', true, 'greater-than or equal to'],
- ['–', '–', true, 'en dash'],
- ['—', '—', true, 'em dash'],
- ['¯', '¯', true, 'macron'],
- ['‾', '‾', true, 'overline'],
- ['¤', '¤', true, 'currency sign'],
- ['¦', '¦', true, 'broken bar'],
- ['¨', '¨', true, 'diaeresis'],
- ['¡', '¡', true, 'inverted exclamation mark'],
- ['¿', '¿', true, 'turned question mark'],
- ['ˆ', 'ˆ', true, 'circumflex accent'],
- ['˜', '˜', true, 'small tilde'],
- ['°', '°', true, 'degree sign'],
- ['−', '−', true, 'minus sign'],
- ['±', '±', true, 'plus-minus sign'],
- ['÷', '÷', true, 'division sign'],
- ['⁄', '⁄', true, 'fraction slash'],
- ['×', '×', true, 'multiplication sign'],
- ['¹', '¹', true, 'superscript one'],
- ['²', '²', true, 'superscript two'],
- ['³', '³', true, 'superscript three'],
- ['¼', '¼', true, 'fraction one quarter'],
- ['½', '½', true, 'fraction one half'],
- ['¾', '¾', true, 'fraction three quarters'],
-// math / logical
- ['ƒ', 'ƒ', true, 'function / florin'],
- ['∫', '∫', true, 'integral'],
- ['∑', '∑', true, 'n-ary sumation'],
- ['∞', '∞', true, 'infinity'],
- ['√', '√', true, 'square root'],
- ['∼', '∼', false,'similar to'],
- ['≅', '≅', false,'approximately equal to'],
- ['≈', '≈', true, 'almost equal to'],
- ['≠', '≠', true, 'not equal to'],
- ['≡', '≡', true, 'identical to'],
- ['∈', '∈', false,'element of'],
- ['∉', '∉', false,'not an element of'],
- ['∋', '∋', false,'contains as member'],
- ['∏', '∏', true, 'n-ary product'],
- ['∧', '∧', false,'logical and'],
- ['∨', '∨', false,'logical or'],
- ['¬', '¬', true, 'not sign'],
- ['∩', '∩', true, 'intersection'],
- ['∪', '∪', false,'union'],
- ['∂', '∂', true, 'partial differential'],
- ['∀', '∀', false,'for all'],
- ['∃', '∃', false,'there exists'],
- ['∅', '∅', false,'diameter'],
- ['∇', '∇', false,'backward difference'],
- ['∗', '∗', false,'asterisk operator'],
- ['∝', '∝', false,'proportional to'],
- ['∠', '∠', false,'angle'],
-// undefined
- ['´', '´', true, 'acute accent'],
- ['¸', '¸', true, 'cedilla'],
- ['ª', 'ª', true, 'feminine ordinal indicator'],
- ['º', 'º', true, 'masculine ordinal indicator'],
- ['†', '†', true, 'dagger'],
- ['‡', '‡', true, 'double dagger'],
-// alphabetical special chars
- ['À', 'À', true, 'A - grave'],
- ['Á', 'Á', true, 'A - acute'],
- ['Â', 'Â', true, 'A - circumflex'],
- ['Ã', 'Ã', true, 'A - tilde'],
- ['Ä', 'Ä', true, 'A - diaeresis'],
- ['Å', 'Å', true, 'A - ring above'],
- ['Æ', 'Æ', true, 'ligature AE'],
- ['Ç', 'Ç', true, 'C - cedilla'],
- ['È', 'È', true, 'E - grave'],
- ['É', 'É', true, 'E - acute'],
- ['Ê', 'Ê', true, 'E - circumflex'],
- ['Ë', 'Ë', true, 'E - diaeresis'],
- ['Ì', 'Ì', true, 'I - grave'],
- ['Í', 'Í', true, 'I - acute'],
- ['Î', 'Î', true, 'I - circumflex'],
- ['Ï', 'Ï', true, 'I - diaeresis'],
- ['Ð', 'Ð', true, 'ETH'],
- ['Ñ', 'Ñ', true, 'N - tilde'],
- ['Ò', 'Ò', true, 'O - grave'],
- ['Ó', 'Ó', true, 'O - acute'],
- ['Ô', 'Ô', true, 'O - circumflex'],
- ['Õ', 'Õ', true, 'O - tilde'],
- ['Ö', 'Ö', true, 'O - diaeresis'],
- ['Ø', 'Ø', true, 'O - slash'],
- ['Œ', 'Œ', true, 'ligature OE'],
- ['Š', 'Š', true, 'S - caron'],
- ['Ù', 'Ù', true, 'U - grave'],
- ['Ú', 'Ú', true, 'U - acute'],
- ['Û', 'Û', true, 'U - circumflex'],
- ['Ü', 'Ü', true, 'U - diaeresis'],
- ['Ý', 'Ý', true, 'Y - acute'],
- ['Ÿ', 'Ÿ', true, 'Y - diaeresis'],
- ['Þ', 'Þ', true, 'THORN'],
- ['à', 'à', true, 'a - grave'],
- ['á', 'á', true, 'a - acute'],
- ['â', 'â', true, 'a - circumflex'],
- ['ã', 'ã', true, 'a - tilde'],
- ['ä', 'ä', true, 'a - diaeresis'],
- ['å', 'å', true, 'a - ring above'],
- ['æ', 'æ', true, 'ligature ae'],
- ['ç', 'ç', true, 'c - cedilla'],
- ['è', 'è', true, 'e - grave'],
- ['é', 'é', true, 'e - acute'],
- ['ê', 'ê', true, 'e - circumflex'],
- ['ë', 'ë', true, 'e - diaeresis'],
- ['ì', 'ì', true, 'i - grave'],
- ['í', 'í', true, 'i - acute'],
- ['î', 'î', true, 'i - circumflex'],
- ['ï', 'ï', true, 'i - diaeresis'],
- ['ð', 'ð', true, 'eth'],
- ['ñ', 'ñ', true, 'n - tilde'],
- ['ò', 'ò', true, 'o - grave'],
- ['ó', 'ó', true, 'o - acute'],
- ['ô', 'ô', true, 'o - circumflex'],
- ['õ', 'õ', true, 'o - tilde'],
- ['ö', 'ö', true, 'o - diaeresis'],
- ['ø', 'ø', true, 'o slash'],
- ['œ', 'œ', true, 'ligature oe'],
- ['š', 'š', true, 's - caron'],
- ['ù', 'ù', true, 'u - grave'],
- ['ú', 'ú', true, 'u - acute'],
- ['û', 'û', true, 'u - circumflex'],
- ['ü', 'ü', true, 'u - diaeresis'],
- ['ý', 'ý', true, 'y - acute'],
- ['þ', 'þ', true, 'thorn'],
- ['ÿ', 'ÿ', true, 'y - diaeresis'],
-// ['Α', 'Α', true, 'Alpha'],
- ['Β', 'Β', true, 'Beta'],
- ['Γ', 'Γ', true, 'Gamma'],
- ['Δ', 'Δ', true, 'Delta'],
- ['Ε', 'Ε', true, 'Epsilon'],
- ['Ζ', 'Ζ', true, 'Zeta'],
- ['Η', 'Η', true, 'Eta'],
- ['Θ', 'Θ', true, 'Theta'],
- ['Ι', 'Ι', true, 'Iota'],
- ['Κ', 'Κ', true, 'Kappa'],
- ['Λ', 'Λ', true, 'Lambda'],
- ['Μ', 'Μ', true, 'Mu'],
- ['Ν', 'Ν', true, 'Nu'],
- ['Ξ', 'Ξ', true, 'Xi'],
- ['Ο', 'Ο', true, 'Omicron'],
- ['Π', 'Π', true, 'Pi'],
- ['Ρ', 'Ρ', true, 'Rho'],
- ['Σ', 'Σ', true, 'Sigma'],
- ['Τ', 'Τ', true, 'Tau'],
- ['Υ', 'Υ', true, 'Upsilon'],
- ['Φ', 'Φ', true, 'Phi'],
- ['Χ', 'Χ', true, 'Chi'],
- ['Ψ', 'Ψ', true, 'Psi'],
- ['Ω', 'Ω', true, 'Omega'],
- ['α', 'α', true, 'alpha'],
- ['β', 'β', true, 'beta'],
- ['γ', 'γ', true, 'gamma'],
- ['δ', 'δ', true, 'delta'],
- ['ε', 'ε', true, 'epsilon'],
- ['ζ', 'ζ', true, 'zeta'],
- ['η', 'η', true, 'eta'],
- ['θ', 'θ', true, 'theta'],
- ['ι', 'ι', true, 'iota'],
- ['κ', 'κ', true, 'kappa'],
- ['λ', 'λ', true, 'lambda'],
- ['μ', 'μ', true, 'mu'],
- ['ν', 'ν', true, 'nu'],
- ['ξ', 'ξ', true, 'xi'],
- ['ο', 'ο', true, 'omicron'],
- ['π', 'π', true, 'pi'],
- ['ρ', 'ρ', true, 'rho'],
- ['ς', 'ς', true, 'final sigma'],
- ['σ', 'σ', true, 'sigma'],
- ['τ', 'τ', true, 'tau'],
- ['υ', 'υ', true, 'upsilon'],
- ['φ', 'φ', true, 'phi'],
- ['χ', 'χ', true, 'chi'],
- ['ψ', 'ψ', true, 'psi'],
- ['ω', 'ω', true, 'omega'],
-// symbols
- ['ℵ', 'ℵ', false,'alef symbol'],
- ['ϖ', 'ϖ', false,'pi symbol'],
- ['ℜ', 'ℜ', false,'real part symbol'],
- ['ϑ','ϑ', false,'theta symbol'],
- ['ϒ', 'ϒ', false,'upsilon - hook symbol'],
- ['℘', '℘', false,'Weierstrass p'],
- ['ℑ', 'ℑ', false,'imaginary part'],
-// arrows
- ['←', '←', true, 'leftwards arrow'],
- ['↑', '↑', true, 'upwards arrow'],
- ['→', '→', true, 'rightwards arrow'],
- ['↓', '↓', true, 'downwards arrow'],
- ['↔', '↔', true, 'left right arrow'],
- ['↵', '↵', false,'carriage return'],
- ['⇐', '⇐', false,'leftwards double arrow'],
- ['⇑', '⇑', false,'upwards double arrow'],
- ['⇒', '⇒', false,'rightwards double arrow'],
- ['⇓', '⇓', false,'downwards double arrow'],
- ['⇔', '⇔', false,'left right double arrow'],
- ['∴', '∴', false,'therefore'],
- ['⊂', '⊂', false,'subset of'],
- ['⊃', '⊃', false,'superset of'],
- ['⊄', '⊄', false,'not a subset of'],
- ['⊆', '⊆', false,'subset of or equal to'],
- ['⊇', '⊇', false,'superset of or equal to'],
- ['⊕', '⊕', false,'circled plus'],
- ['⊗', '⊗', false,'circled times'],
- ['⊥', '⊥', false,'perpendicular'],
- ['⋅', '⋅', false,'dot operator'],
- ['⌈', '⌈', false,'left ceiling'],
- ['⌉', '⌉', false,'right ceiling'],
- ['⌊', '⌊', false,'left floor'],
- ['⌋', '⌋', false,'right floor'],
- ['〈', '〈', false,'left-pointing angle bracket'],
- ['〉', '〉', false,'right-pointing angle bracket'],
- ['◊', '◊', true,'lozenge'],
- ['♠', '♠', false,'black spade suit'],
- ['♣', '♣', true, 'black club suit'],
- ['♥', '♥', true, 'black heart suit'],
- ['♦', '♦', true, 'black diamond suit'],
- [' ', ' ', false,'en space'],
- [' ', ' ', false,'em space'],
- [' ', ' ', false,'thin space'],
- ['', '', false,'zero width non-joiner'],
- ['', '', false,'zero width joiner'],
- ['', '', false,'left-to-right mark'],
- ['', '', false,'right-to-left mark'],
- ['', '', false,'soft hyphen']
-];
-
-function renderCharMapHTML() {
- var charsPerRow = 20, tdWidth=20, tdHeight=20;
- var html = ''
- + '
| |||||||||||||||||||
'
+ + '
| |||||||||||||||||||