CSS, JavaScript and XHTML Explained

Estelle Weyl’s Blog of quirks, random thoughts and funky finds discovered in day-to-day coding

 

Using images as Bullets in XHTML Lists October 3, 2007

Filed under: Web Development — Estelle Weyl @ 8:35 am

Creating lists with Images as Bullets using CSS

All CSS compliant browsers and IE support images as a list style type. Most designers actually prefer to use images instead of default bullet support because there is more control and more consistency in appearance across different browsers.

While the general idea should be very simple, a simple declaration such as ul {list-style-image:url(../images/bullet.gif);} will only work cross browser if you use a 10px by 10px bullet with small font. The issue is that Firefox vertically aligns the bullet to text bottom and Internet Explorer (at least IE6, IE7 and IE5.5 on Windows), vertically aligns the bullet to text top, so if the user changes their font size, or if your image is not the same height as your text, the bullet will look off.

The solution is to remove the bullet with list-style-type: none; and include a positioned background image instead:

Single Line List Items

ul {
	list-style-type: none;
	margin: 0;
	padding: 0;
	}
li {
	background-image:url(bullet.jpg);
	background-position:0 50%;
	background-repeat:no-repeat;
	padding:0 0 0 25px;
}

Multiple Line List Items

ul {
	list-style-type: none;
	margin: 0;
	padding: 0;
	}
li {
	background-image:url(bullet.jpg);
	background-position:0 0.3em;
	background-repeat:no-repeat;
	padding:0 0 0 25px;
}

Explaining the code

  • We first remove the default bullets with list-style-type: none;. Bullets for list items are defined by the ul. Background images, however, are defined in the li.
  • Set the margin and padding to zero. This is important as browsers differ on whether they use padding or margin for the left indentation. Resetting both to zero would not have been necessary if you started off with the CSS reset as described in CSS Best Practices
  • Feel free to add a margin back onto the UL with margin-left: 0.5em or some other width that makes sense to you. This margin in on the UL and not the LI, so will not impact the placement of your bullets, but rather moves the whole block of list items over to the right.
  • Declare a background image to be used. A no-repeat is important.
    • For one line list items, such as navigation, this is a great spot to use a sprite and change background position for a hover effect.
    • For list items with chances of more than one line of content: don’t use a sprite unless it’s the bottom right hand corner of the sprite that is being used for the bullet.
  • Declare a background position
    • For one line list items, such as navigation, declare the background position as 0 50%. The line background-position:0 50%; means 0% from the left and 50% from the top. Unlike border, margin, etc. shorthand which is top/bottom left/right when 2 values are present, background is left top.
      A background position of 50% will vertically center the background image against the entire li as using percentages with backgrounds means place the xx% point in the image xx% from the top of the container.
    • For list items with chances of more than one line of content use ems instead of % to place the image. The placement will depend on your bullet image size, but generally line background-position:0 0.3em; will be approximately correct (tweak from there).  This will place your image correctly cross browser behind the first line on the left, and will be pushed down a bit or up a bit if the user resizes their text.
  • Give the list item some left padding so that it allows the image to hang off the left hand side of the text and appear like a bullet. Since the bullet is an image, which is sized in pixels, define the left padding in px units rather than em.

See: Using ASCII and UNICODE characters as Bullets with CSS.

 
 

Yet Another Image Replacement Method September 19, 2007

Filed under: Best Practices, CSS (including hacks), Web Development — Estelle Weyl @ 9:39 pm

Semantic CSS Image Replacement

Yes, "YAIRM" ("Yet Another Image Replacement Method") is a crappy acronym. Anyhow….

There have been several image replacement suggestions made over the past 5 years. Semantically, some just don’t make sense. Of course, the accessibility of your image replacement method and the semantic "correctness" has to do with how you code your HTML.

Pros

  • This method works for both in-line and block style elements.
  • Accessible to screen readers and non-image/non-screen media.
  • Does not add extra elements only for styling (no extra span).
  • Works cross browser

Cons

  • Using images for text does not allow for text resizing (like all IR methods).
  • Does not handle "images off/CSS on" scenario; but neither do most layouts with background images, such as the sidebar on this blog.

When I need to replace a header or some other text with an image, I simply give the element my image replacement class (<h1 class="imgreplacement">), and declare the background image, height and width I want to use either by providing an ID and defining the background image in the #id selector, or by targeting the element through specific/unique cascade. I place all of my image replacement css in a media="screen". Even though the media attribute is not heeded by all browsers, it is heeded by devices that are not screens. If your user than prints your webpage, the text that was replaced by an image in the browser will print as it semantically should.

The CSS for the Image Replacement class:

.imgreplacement {
  display:-moz-inline-box;
  display:inline-block;
  background:transparent none 0 0 no-repeat;
  text-indent:-3000px;
  font:0/0 Arial;
  overflow:hidden;
  color:rgba(255,255,255,0);
  vertical-align:bottom;
}

XHTML markup and CSS Overrides:

With my image replacement class, the image replacement method is reusable.

<h1 class="imgreplacment" title="Tool Tip Text here">Semantic Text</h1>
<a href="link.html" class="imgreplacement">Text that makes sense for this link</a>
<button class="imgreplacement" title="Close">Close Module</button>

h1.imgreplacement {
  background-image: url(path/headerimage.jpg);
  height: 60px;
  width: 540px;
	 background-position: 20px 10px;
}

a.imgreplacement {
  background-image: url(path/linkimage.jpg);
  width: 120px;
  height: 60px;
}

button {
  background-image:url(images/redx.gif);
  width: 18px;
  height: 18px;
  border: none; // overwrite default border
  cursor: pointer;
}

This is the button: . Note that is has layout, but it’s inline, and it has a tool-tip

Explanation of the Image Replacement Class:

The imgreplacement class does the following:

  • display:-moz-inline-box;
    and display:inline-block; displays the element as an inline block. inline-block is not part of the CSS specifications, but it is supported by IE and all other grade-A browsers other than Firefox. This enables the image replacement to work on inline elements by enabling them to have width and height. The first line, -moz-inline-box, is for mozilla based browsers that don’t render inline-block. The second line is for IE, Safari 3 and Opera, though IE does not render inline-block truly inline.
  • background: transparent none 0 0 no-repeat; sets a default to non-repeated background image placed at the top-left of the element block, but does not declare a background image, enabling you to overwrite the none with an image via a second, more precise, CSS declaration
  • text-indent:-3000px; Text indent only applies to block elements. text-indent, when implemented, moves the start of the first line of text to the left or right depending on whether the property is assigned a negative or positive value. The text-indent is applied to inline-block elements, but not to -moz-inline-box. Note that IE does not render text-indent correctly, so generally I override the text-indent property for IE, but in this case the disappearing text quirk is to our benefit.
  • font:0/0 Arial; Makes the font tiny or invisible for browsers. There are a few quirks: Opera doesn’t render this shorthand, and renders font-size: 0; at about 7px; IE6 and IE7 both render the font at about 1px and Safari doesn’t render font at size 0, but does intermittently underline the non-visible character at about 1px width per character.
  • overflow:hidden hides anything that might be wider than the space provided. IE6 has the bad habit of deciding to grow elements to fit the content even if the size of the element is defined.
  • color:rgba(255,255,255,0); Makes the font color transparent (opacity of 0) for those browsers that understand opacity via RGBA, which is a feature of CSS3 (Safari 3 and pre-alpha version of Firefox 3, but not IE6, IE7 or Firefox 2 for Windows).
  • vertical-align:bottom; is required for the inline elements - it places them at the same level vertically with respect to the text around it across all grade-A browsers.

Additional tidbits

  • You have to define the width, height and background image of your element.
  • If needed, you can set the background position of the replacement image. It causes fewer cross browser issues to place the background image rather than setting margins due to differences in browsers interpretations of the box-model.
  • Remember to use sematic markup. If the image is an area header, use h1-h6. If it’s a link going somewhere, use <a>. If it isn’t linking anywhere, it’s not a link!
  • You can enhance the image replacement with a title. The title will display in some browsers as a tool tip. This may enhance the accessibility for those who use tooltips regularly.
  • You can declare a different background image using the :hover pseudoclass, so when the user hovers over the element with the mouse pointer, the image changes.

While I just showed you a method of doing image replacement, I must caution against it. Using images for text is not optimum for accessibility. This method enables assistive devices to read your text with the semantic meaning defined by the encompassing element(s). This method enables users of alternative devices, such as cell phones, and text-only browsers to read your content. It also meets web standards in terms of separating content from presentation. However, when you use images to render text, your visitor is unable to control the font-size; which makes your site less than accessible. If you are required to use images instead of text to render content, and you can’t convince your client (boss, designer or contractee, or even yourself) of the stupidity (there, i said it) of using images for text, then this is the best method of making your inaccessible page accessible to the most people. Just try to make the text in your image large enough to be read by a user.

 
 

Favicons: why and how to create favicons September 3, 2007

Filed under: Best Practices, Cursors & Icons, SEO, Web Development — Estelle Weyl @ 9:35 pm

The "WHY" of Favicons

Favicons ARE an integral part of your website and branding.

Favicons are the single most important graphic appearing on a website. While that sounds like a strong statement, it’s true. Favicons are the least expensive and most overlooked visual branding opportunity.

Favicons are the 16 x 16 pixel images that show up in the navigation bar of your browser. They also appear in browser’s bookmark/favorites menu. You might think, "big whoop! that’s not vital." But those aren’t the only places they appear.

They also appear at the bottom of my blog: not my favicon, but the favicon for stumbleupon, digg, technorati, del.icio.us, etc. Web developers and copy editors don’t even need to use the names of those online brands: everyone recognizes these networking favicons.

They now also appear next to the page title on the tabs in tabbed browsers: if a user has 25 browser tabs, each tab may be as narrow as just the favicon: would you prefer your visitors see Internet Explorer’s blue E, Safari’s blue compass, an icon of a page (Firefox and Opera), or would you prefer that they see your logo? If they see a logo, they recognize immediately what site is opened in each tab: you want to be one of those recognized pages.

Are you looking at your open browser tabs? Can you tell which pages are which? Have you checked your bookmarks list? Are there some bookmarks that stand out more than others? Have you looked at the bottom of this blog entry? Depending on how many toolbars you have downloaded and have open, you may have a plethora of favicons there too. So, have I convinced you?

The "HOW" of Favicons: How to design & create a FavIcon:

Designing a Favicon:

  • If you have a logo that easily translates into something that looks decent at 32 x 32 or 16 x 16, use it.
  • If you can avoid using the color blue, especially the glassy shiny blue of IE, avoid using it.
  • Keep it simple. Yahoo uses a Y!, Google uses a G. Flickr uses two little circles. Delicious is a square made of 4 squares. IE is an E. These are all ones you know.
  • If your logo is very complex, try using just a part of it such as the first letter. If your first letter doesn’t represent your company well enough (like in the case of this blog), use your logo color to abstract an image.

Creating a FavIcon: Converting an image to a .ico

  • Following the suggestions above, create a 48×48 or a 32 x 32 image that you will use as your favicon. Save it.
  • If you have photoshop, you can download a Favicon extension for Photoshop. If you don’t have photoshop, or don’t want to deal with extensions, you can visit Dynamic Drive and use their tool to convert your .jpg, .png or .gif into a .ico file. The file created will be called favicon.ico. You will be directed to download it.
  • Upload the .ico file to the root directory of your website.
  • If your favicon is named favicon.ico, then you don’t need to add code. However, if you don’t have the .ico file in your top level directory, or if you saved it under a different file name, or if you have different favicons for different parts of your site (not usually a good idea, but Yahoo has different icons for some of their properties, such as Yahoo! answers), then include the following in the header:
     

    <link rel="shortcut icon" href="http://www.mysite.com/myicon.ico" type="image/x-icon" />

Uses of Favicons

Now your favicon can appear all across the web:

 
 

Alternative Text for Images: the ALT attribute August 25, 2007

Filed under: Accessibility, Best Practices, Web Development — Estelle Weyl @ 11:44 am

For a webpage to validate and be accessible, all images must have a value for the alt attribute, even if that value is empty. The XHTML DTD requires only two atttributes for the img element: src and alt. The XHTML DTD tells you it needs to be there. WCAG tells you a bit more about what it needs to look like. Unfortunately, W3C writings are is not always understandable. This entry will explain, in human terms, how to write the values for your alt attributes.

Section 508/WCAG alt attribute Guidelines:

The first Section 508 guidelines states, "A text equivalent for every non-text element shall be provided (e.g., via "alt", "longdesc", or in element content)". Checkpoint 1.1, the first priority of priority 1 of the WCAG guidelines states the same thing: Provide a text equivalent for every non-text element (e.g., via "alt", "longdesc", or in element content). This includes: images, graphical representations of text (including symbols), image map regions, animations (e.g., animated GIFs), applets… (I shortened it. the W3C tends to be loquacious.)

Decorative Images

Decorative images include background images, bullets, <hr /> equivalents, spacer images, etc. These types of images make the page prettier but have no semantic value for a webpage. The alt attribute for decorative images should be empty: <img src="path/image.gif" alt="" />.

Notes:

  • If you’ve read any of my other blog entries, or other articles on web standards, you likely will never have an empty alt attribute, since you are separating the content layer from the presentation layer; and therefore not including decorative images in your XHTML; opting instead for the use of CSS.
  • If you include an empty alt attribute, screen readers will skip over the image. If you fail to put an alt attibute in, the screen reader will read the entire URL of the image. Can you imagine listening to a robot say "spacer gif spacer gif spacer gif" repeatedly, or, worse, going letter bu letter thru the underscores and extensions of a filename generated by ImageReady.

Icons

The alt attribute of an icon should describe the intention of the icon, since an icon can have differing meanings depending on the context, and someone who has never seen the icon wouldn’t understand whatit emant if only visually described.

icon possible relevant values for alt useless alt
"correct", "open", "start", "completed", "asset", "" circle with check mark
  "stop", "wrong", "delete", "close window", "", "remove module", "delete email" red cross
  "RSS Feed", "add RSS feed to reader, "" orange square with 3 lines.
"answer", "enter password", "", "primary key", "security feature", "" gold key
"security feature", "blocked", "password protected" closed lock

The desription of the appearance of the icon is almost alwasys a useless alt attribute value. Unless you are writing a manual on graphic design or on understanging iconography, don’t include a description of the icon as the value of the alt attribute.

An empty string is a possible relevant value for all icon alt attributes. When an icon appears directly before an equivalent definition of the function of that icon, then the value of the alt attribute should be empty. The two most common examples of this are the print and email icons:

icon possible relevant values for alt useless alt
"open email", "email messages", "go to inbox", "send an email, "" inbox, email
print, "" print

When an icon describes the text immediately preceding or following it, it is redundant to include a value for the alt attribute of the icon. The screen reader will read "print print", or "email email".

Sample alt attribute encoding for icons:

 

Wrong:
<a href="inbox.html"><img src="icon/email.gif" /> inbox</a> //missing alt attribute

Will validate, but not really good: Screenreader will say “go to inbox inbox”
<a href="inbox.html"><img src="icon/email.gif" alt="go to inbox" /> inbox</a> //redundant alt attribute

Better, and correct:
<a href="inbox.html"><img src="icon/email.gif" alt="" /> inbox</a>

Best: seperates content from presentation
<a href="inbox.html" class-"email">inbox</a>

with the css of

a.email {
    padding-left: 18px;
    background: tranparent url(icon/email.gif) no-repeat 0 0;
    }

Notes:

  • Although it is generally best to use CSS background images (including sprites) if you are going to use an icon
  • If you use a sprite, the alt altribute should describe the relevant section of the sprite. Don’t write "sprite of icons". Instead, follow the recommendations above (all those images are actually one transparent .gif — a sprite.

Buttons, navigation and other images with text

If you are still using images for the elements in your navigation bar (shame on you!), the general rule is that the value of the alt attribute must match the text of the image. If your image says only "about", the value of the alt attribute should also read about. Then include more detail about the destination in the title attribute of the parent anchor tag.

<a href="about/index.html" title="About the Author"><img src="img/nav_about.jpg" alt="about" /></a>.

Include the text that appears within your image as the value of the image’s alt attribute.

If you are using mystery meat navigation, you should describe relevant text in the alt, not the an explanation of the iconography of the tab. This may go against standards guidelines, but since mystery meat navigation goes against web standards, at least make your website accessible to the visually impaired, even if it isn’t accessible to sighted users.

Instead of using an <img> for navigation, use text, and make your link attractive, including using your image, via CSS using image replacement. I will include a blog entry on image replacement in the near future, since i use it a lot. In the meantime, you can look it up on any search engine.

Images, without text, that link to somewhere

Sometimes it makes sense to actually use images, without image replacement, to link to a page. For example, on Facebook, Yahoo, and maybe on your company’s about page, thumbnail images of people or avatars may link to the person’s profile. If the image is within the same link as a text link, the alt attribute should be left empty. If not, however, the link should describe the purpose of the link: <a href="bios/jane.html"><img src="img/thmb_jane.jpg" alt="Jane Smith's profile" /></a>.

This is similar to the explanation on icons above. Let’s say you do use just the email icon (from the icon example above). The correct presentation would be:

<a href="inbox.html"><img src="icon/email.gif" alt="go to inbox" /></a>

Complex, detailed images that "convey 1000 words"

Sometimes images are worth a thousand words. Maps, Graphs and Charts are examples of images that contain information necessary to understanding the message of a page but too complex to be described in under 255 characters. If the complex image is followed by text explaining or detailing the content of the image, like you might find in a journal article, then a simple alt attribute value suffices.If there is information conveyed in the image that is not explained in the text following the image and is too complex to describe in 2 sentences, like you might find in a powerpoint presentation, then you need an alternative method of explaining the content of the image to those unable to view the image. In other words, if all the data presented in your image is reiterated as text, then an alt attribute value of "graph of blood pressure by age group" suffices. If there is information that is conveyed in the image that is not reiterated as text for all of your visitors to read (and search engines to find), then you should include a longer description of the image in the form of a longdesc attribute linking to content describing in full detail the contents of your image.

The longdesc attribute

longdesc is an optional attribute of the <img> and <frame> elements. The longdesc property specifies a url for a longer description of the contents of the current frame. The longdesc attribute is coded like this::

<img src="graph.gif" alt="graph of blood pressure by age group(long description available)" longdesc="supportfiles/graphdescribed.html" />

You then need to create a separate page for your longdescription. This page should include the description and a link back the current page. The longdesc attribute’s purpose is to provide a link to a separate page where a long description is available. This link is invisible to the sighted user but available to those using screen readers.

The longdesc functionality is rarely implemented in websites despite it’s being the recommendation of the WC3 and Section 508 guidelines. For this reason, you should:

  • Include the fact that a long description is available in the alt attribute value of the image: it’s used so infrequently that even those using screen readers may not otherwise notice you included it. alt="graph of blood pressure by age group(long description available)"
  • It’s better to not use the longdesc attribute, opting instead to fully describe the contents of the image in the text for all readers. This method provides more fodder for search engines, and explains the content of your graph that even sighted users may not have otherwise noticed or derived.
  • To test whether it’s necessary, turn off images and see if all the information conveyed in the image is presented in the text in the page. If yes, longdesc is not necessary. If not, either include more descriptive text, or include a longdesc.
  • When I receive data graphs, I usually include a datatable with the data conveyed in the graph. Most charts are created using MS Excel (open MS Excel, select "Insert" > "Chart"). Ask whoever created your chart image for the original Excel file, and present the data from the spreadsheet in a data table. If you don’t have the original spreadsheet, if the chart is detailed enough to require a longdesc, then it’s detailed enough to be able to cull the data.
  • WebAIM provides more information on the longdesc attribute.

Other images

This is for all other images! All othIf you included a picture of yourself standing with Britney Spears, your alt attribute value should minimally read "Britney Spears and me". You can, of course, add a few more details to better describe the image if there is other relevant information presented in the image that the visitor should know.

 
 

CSS & Javascript Character Entity Calculator

Filed under: CSS (including hacks), Character Entities, JavaScript, Web Development — Estelle Weyl @ 10:38 am

Javascript and CSS Entity Conversion Calculator

Enter your HTML Entity Character number (such as &#2335 or just 2335 - ट) to get the CSS and JS values for that entity. Explanations on how to use the results are below.







(open in new window). named entities | numeric entities | 2,636 entities

Example of JavaScript Charater Entities and the DOM

Example Code (This is the code for the dynamically generated content in the button above).
var calc = document.getElementById("calculator");
var theButton = calc.getElementsByTagName(’button’)[0];
var buttonOptions = ['\u03a0\u03a1\u0395\u03a3\u03a3', '\u2660\u2663\u2665\u2666', '\u221a'];
var rand = Math.floor(Math.random()*buttonOptions.length);
var buttonText = document.createTextNode(buttonOptions[rand]);
var z = theButton.appendChild(buttonText);

The Explanation:
Line 1: gets the div containing the button.
Line 2: gets the button as an elementNode
Line 3: creates an array of strings that are made up of encoded entities. The could also read var buttonOptions = ['� ΡΕΣΣ', '� ♣♥♦', '√'];
Line 4: Creates a random number; in this case either 0, 1 or 2, since there are 3 elements in our array.
Line 5: creates a text node containing the string of javascript character entities.
Line 6: Appends the textNode created in line 5 to the elementNode targeted by line 2. We also create the variable z as a reference to the button’s textNode. I can then use that reference replaceChild() method.

Including Character Entities in JavaScript and CSS

The processes for including special characters in JavaScript and CSS are very similar:

  1. hex encode the numeric HTML entity value.
  2. Preced the hex-value with a slash "\" in CSS and a slash+U "\u" for JavaScript.
  3. Include your entity in your code/markup.

Javascript Character Entities

alert('M\u00E9nage \u00E0 trois.') Try it

CSS Character Entities

    #heart {list-style-type:none;}
    #heart li:before {content:'\2665 '; color:#FF33FF; padding-right:1em;}
  • In all but IE, this will be preceded by a heart

Notes:

  • Don’t know the numeric value of the entity you want to include? named entities in alphabetical order which may be a good place to start. Find the entity you are looking for there by appearance, then do a search for the numeric entity on the Named Entities in Numeric Order page. Or, you can simply search the first 5800 character Entities. At some point I’ll add the rest of ‘em.
  • Remember that IE doesn’t understand the :before pseudoclass with content, and you would have to set the list-style-type as none, or you would get 2 bullets in CSS compliant browsers.
  • In javascript you can also use octal values instead of hexadecimal values for the first 255 or so characters. Yup, that’s trivia!

Including Entities without Encoding them

The reason I always use encoded entities is because I have no clue how to use my keyboard to get the right letters. It’s faster for me to look up the letter from Named Entities in Numeric Order then it is for me to look up the keyboard sequence to display the same character. For the following sample, I pulled up the "character map" that came with my OS.
You can include odd characters if you correctly set your content-Type to UTF-8.
That is the setting for this page, which allows for the following code without HTML or JS encoding.

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

alert('Ế ế ∑ ở Ẅ ۹'); Try it

The question is, short of editing your .htaccess character set, how do you tell your external scripts to be served up in UTF-8? This is external and doesn’t work. I tried <script type="text/javascript" src="/articles/entitycalculator.js" charset="utf-8"></script>, but it doesn’t work.

 
 

First 5800 Numeric HTML Character Entities August 4, 2007

Filed under: Web Development — Estelle Weyl @ 10:52 am

First 5800 Numeric HTML Character Entities

Below are left-to-right entities (Hebrew and Arabic were removed). To learn how to include the entities below in CSS or Javascript, please read visit Javascript, CSS, and (X)HTML entities in numeric order or convert is with the javascript and CSS entity calculator.

&#11; =
&#12; =
&#32; =
&#33; = !
&#34; = "
&#35; = #
&#36; = $
&#37; = %
&#38; = &
&#39; = '
&#40; = (
&#41; = )
&#42; = *
&#43; = +
&#44; = ,
&#45; = -
&#46; = .
&#47; = /
&#48; = 0
&#49; = 1
&#50; = 2
&#51; = 3
&#52; = 4
&#53; = 5
&#54; = 6
&#55; = 7
&#56; = 8
&#57; = 9
&#58; = :
&#59; = ;
&#60; = <
&#61; = =
&#62; = >
&#63; = ?
&#64; = @
&#65; = A
&#66; = B
&#67; = C
&#68; = D
&#69; = E
&#70; = F
&#71; = G
&#72; = H
&#73; = I
&#74; = J
&#75; = K
&#76; = L
&#77; = M
&#78; = N
&#79; = O
&#80; = P
&#81; = Q
&#82; = R
&#83; = S
&#84; = T
&#85; = U
&#86; = V
&#87; = W
&#88; = X
&#89; = Y
&#90; = Z
&#91; = [
&#92; = \
&#93; = ]
&#94; = ^
&#95; = _
&#96; = `
&#97; = a
&#98; = b
&#99; = c
&#100; = d
&#101; = e
&#102; = f
&#103; = g
&#104; = h
&#105; = i
&#106; = j
&#107; = k
&#108; = l
&#109; = m
&#110; = n
&#111; = o
&#112; = p
&#113; = q
&#114; = r
&#115; = s
&#116; = t
&#117; = u
&#118; = v
&#119; = w
&#120; = x
&#121; = y
&#122; = z
&#123; = {
&#124; = |
&#125; = }
&#126; = ~
&#127; = 
&#128; = €
&#129; =
&#130; = ‚
&#131; = ƒ
&#132; = „
&#133; = …
&#134; = †
&#135; = ‡
&#136; = ˆ
&#137; = ‰
&#138; = Š
&#139; = ‹
&#140; = Œ
&#142; = ž
&#145; = ‘
&#146; = ’
&#147; = “
&#148; = ”
&#149; = •
&#150; = –
&#151; = —
&#152; = ˜
&#153; = ™
&#154; = š
&#155; = ›
&#156; = œ
&#158; =
&#159; = Ÿ
&#160; =  
&#161; = ¡
&#162; = ¢
&#163; = £
&#164; = ¤
&#165; = ¥
&#166; = ¦
&#167; = §
&#168; = ¨
&#169; = ©
&#170; = ª
&#171; = «
&#172; = ¬
&#173; = ­
&#174; = ®
&#175; = ¯
&#176; = °
&#177; = ±
&#178; = ²
&#179; = ³
&#180; = ´
&#181; = µ
&#182; = ¶
&#183; = ·
&#184; = ¸
&#185; = ¹
&#186; = º
&#187; = »
&#188; = ¼
&#189; = ½
&#190; = ¾
&#191; = ¿
&#192; = À
&#193; = Á
&#194; = Â
&#195; = Ã
&#196; = Ä
&#197; = Å
&#198; = Æ
&#199; = Ç
&#200; = È
&#201; = É
&#202; = Ê
&#203; = Ë
&#204; = Ì
&#205; = Í
&#206; = Î
&#207; = Ï
&#208; = Ð
&#209; = Ñ
&#210; = Ò
&#211; = Ó
&#212; = Ô
&#213; = Õ
&#214; = Ö
&#215; = ×
&#216; = Ø
&#217; = Ù
&#218; = Ú
&#219; = Û
&#220; = Ü
&#221; = Ý
&#222; = Þ
&#223; = ß
&#224; = à
&#225; = á
&#226; = â
&#227; = ã
&#228; = ä
&#229; = å
&#230; = æ
&#231; = ç
&#232; = è
&#233; = é
&#234; = ê
&#235; = ë
&#236; = ì
&#237; = í
&#238; = î
&#239; = ï
&#240; = ð
&#241; = ñ
&#242; = ò
&#243; = ó
&#244; = ô
&#245; = õ
&#246; = ö
&#247; = ÷
&#248; = ø
&#249; = ù
&#250; = ú
&#251; = û
&#252; = ü
&#253; = ý
&#254; = þ
&#255; = ÿ
&#256; = Ā
&#257; = ā
&#258; = Ă
&#259; = ă
&#260; = Ą
&#261; = ą
&#262; = Ć
&#263; = ć
&#264; = Ĉ
&#265; = ĉ
&#266; = Ċ
&#267; = ċ
&#268; = Č
&#269; = č
&#270; = Ď
&#271; = ď
&#272; = Đ
&#273; = đ
&#274; = Ē
&#275; = ē
&#276; = Ĕ
&#277; = ĕ
&#278; = Ė
&#279; = ė
&#280; = Ę
&#281; = ę
&#282; = Ě
&#283; = ě
&#284; = Ĝ
&#285; = ĝ
&#286; = Ğ
&#287; = ğ
&#288; = Ġ
&#289; = ġ
&#290; = Ģ
&#291; = ģ
&#292; = Ĥ
&#293; = ĥ
&#294; = Ħ
&#295; = ħ
&#296; = Ĩ
&#297; = ĩ
&#298; = Ī
&#299; = ī
&#300; = Ĭ
&#301; = ĭ
&#302; = Į
&#303; = į
&#304; = İ
&#305; = ı
&#306; = IJ
&#307; = ij
&#308; = Ĵ
&#309; = ĵ
&#310; = Ķ
&#311; = ķ
&#312; = ĸ
&#313; = Ĺ
&#314; = ĺ
&#315; = Ļ
&#316; = ļ
&#317; = Ľ
&#318; = ľ
&#319; = Ŀ
&#320; = ŀ
&#321; = Ł
&#322; = ł
&#323; = Ń
&#324; = ń
&#325; = Ņ
&#326; = ņ
&#327; = Ň
&#328; = ň
&#329; = ʼn
&#330; = Ŋ
&#331; = ŋ
&#332; = Ō
&#333; = ō
&#334; = Ŏ
&#335; = ŏ
&#336; = Ő
&#337; = ő
&#338; = Œ
&#339; = œ
&#340; = Ŕ
&#341; = ŕ
&#342; = Ŗ
&#343; = ŗ
&#344; = Ř
&#345; = ř
&#346; = Ś
&#347; = ś
&#348; = Ŝ
&#349; = ŝ
&#350; = Ş
&#351; = ş
&#352; = Š
&#353; = š
&#354; = Ţ
&#355; = ţ
&#356; = Ť
&#357; = ť
&#358; = Ŧ
&#359; = ŧ
&#360; = Ũ
&#361; = ũ
&#362; = Ū
&#363; = ū
&#364; = Ŭ
&#365; = ŭ
&#366; = Ů
&#367; = ů
&#368; = Ű
&#369; = ű
&#370; = Ų
&#371; = ų
&#372; = Ŵ
&#373; = ŵ
&#374; = Ŷ
&#375; = ŷ
&#376; = Ÿ
&#377; = Ź
&#378; = ź
&#379; = Ż
&#380; = ż
&#381; = Ž
&#382; = ž
&#383; = ſ
&#384; = ƀ
&#385; = Ɓ
&#386; = Ƃ
&#387; = ƃ
&#388; = Ƅ
&#389; = ƅ
&#390; = Ɔ
&#391; = Ƈ
&#392; = ƈ
&#393; = Ɖ
&#394; = Ɗ
&#395; = Ƌ
&#396; = ƌ
&#397; = ƍ
&#398; = Ǝ
&#399; = Ə
&#400; = Ɛ
&#401; = Ƒ
&#402; = ƒ
&#403; = Ɠ
&#404; = Ɣ
&#405; = ƕ
&#406; = Ɩ
&#407; = Ɨ
&#408; = Ƙ
&#409; = ƙ
&#410; = ƚ
&#411; = ƛ
&#412; = Ɯ
&#413; = Ɲ
&#414; = ƞ
&#415; = Ɵ
&#416; = Ơ
&#417; = ơ
&#418; = Ƣ
&#419; = ƣ
&#420; = Ƥ
&#421; = ƥ
&#422; = Ʀ
&#423; = Ƨ
&#424; = ƨ
&#425; = Ʃ
&#426; = ƪ
&#427; = ƫ
&#428; = Ƭ
&#429; = ƭ
&#430; = Ʈ
&#431; = Ư
&#432; = ư
&#433; = Ʊ
&#434; = Ʋ
&#435; = Ƴ
&#436; = ƴ
&#437; = Ƶ
&#438; = ƶ
&#439; = Ʒ
&#440; = Ƹ
&#441; = ƹ
&#442; = ƺ
&#443; = ƻ
&#444; = Ƽ
&#445; = ƽ
&#446; = ƾ
&#447; = ƿ
&#448; = ǀ
&#449; = ǁ
&#450; = ǂ
&#451; = ǃ
&#452; = DŽ
&#453; = Dž
&#454; = dž
&#455; = LJ
&#456; = Lj
&#457; = lj
&#458; = NJ
&#459; = Nj
&#460; = nj
&#461; = Ǎ
&#462; = ǎ
&#463; = Ǐ
&#464; = ǐ
&#465; = Ǒ
&#466; = ǒ
&#467; = Ǔ
&#468; = ǔ
&#469; = Ǖ
&#470; = ǖ
&#471; = Ǘ
&#472; = ǘ
&#473; = Ǚ
&#474; = ǚ
&#475; = Ǜ
&#476; = ǜ
&#477; = ǝ
&#478; = Ǟ
&#479; = ǟ
&#480; = Ǡ
&#481; = ǡ
&#482; = Ǣ
&#483; = ǣ
&#484; = Ǥ
&#485; = ǥ
&#486; = Ǧ
&#487; = ǧ
&#488; = Ǩ
&#489; = ǩ
&#490; = Ǫ
&#491; = ǫ
&#492; = Ǭ
&#493; = ǭ
&#494; = Ǯ
&#495; = ǯ
&#496; = ǰ
&#497; = DZ
&#498; = Dz
&#499; = dz
&#500; = Ǵ
&#501; = ǵ
&#502; = Ƕ
&#503; = Ƿ
&#504; = Ǹ
&#505; = ǹ
&#506; = Ǻ
&#507; = ǻ
&#508; = Ǽ
&#509; = ǽ
&#510; = Ǿ
&#511; = ǿ
&#512; = Ȁ
&#513; = ȁ
&#514; = Ȃ
&#515; = ȃ
&#516; = Ȅ
&#517; = ȅ
&#518; = Ȇ
&#519; = ȇ
&#520; = Ȉ
&#521; = ȉ
&#522; = Ȋ
&#523; = ȋ
&#524; = Ȍ
&#525; = ȍ
&#526; = Ȏ
&#527; = ȏ
&#528; = Ȑ
&#529; = ȑ
&#530; = Ȓ
&#531; = ȓ
&#532; = Ȕ
&#533; = ȕ
&#534; = Ȗ
&#535; = ȗ
&#536; = Ș
&#537; = ș
&#538; = Ț
&#539; = ț
&#540; = Ȝ
&#541; = ȝ
&#542; = Ȟ
&#543; = ȟ
&#544; = Ƞ
&#545; = ȡ
&#546; = Ȣ
&#547; = ȣ
&#548; = Ȥ
&#549; = ȥ
&#550; = Ȧ
&#551; = ȧ
&#552; = Ȩ
&#553; = ȩ
&#554; = Ȫ
&#555; = ȫ
&#556; = Ȭ
&#557; = ȭ
&#558; = Ȯ
&#559; = ȯ
&#560; = Ȱ
&#561; = ȱ
&#562; = Ȳ
&#563; = ȳ
&#592; = ɐ
&#593; = ɑ
&#594; = ɒ
&#595; = ɓ
&#596; = ɔ
&#597; = ɕ
&#598; = ɖ
&#599; = ɗ
&#665; = ʙ
&#600; = ɘ
&#601; = ə
&#602; = ɚ
&#603; = ɛ
&#604; = ɜ
&#605; = ɝ
&#606; = ɞ
&#607; = ɟ
&#608; = ɠ
&#609; = ɡ
&#610; = ɢ
&#611; = ɣ
&#612; = ɤ
&#613; = ɥ
&#614; = ɦ
&#615; = ɧ
&#616; = ɨ
&#617; = ɩ
&#618; = ɪ
&#619; = ɫ
&#620; = ɬ
&#621; = ɭ
&#622; = ɮ
&#623; = ɯ
&#624; = ɰ
&#625; = ɱ
&#626; = ɲ
&#627; = ɳ
&#628; = ɴ
&#629; = ɵ
&#630; = ɶ
&#631; = ɷ
&#632; = ɸ
&#633; = ɹ
&#634; = ɺ
&#635; = ɻ
&#636; = ɼ
&#637; = ɽ
&#638; = ɾ
&#639; = ɿ
&#640; = ʀ
&#641; = ʁ
&#642; = ʂ
&#643; = ʃ
&#644; = ʄ
&#645; = ʅ
&#646; = ʆ
&#647; = ʇ
&#648; = ʈ
&#649; = ʉ
&#650; = ʊ
&#651; = ʋ
&#652; = ʌ
&#653; = ʍ
&#654; = ʎ
&#655; = ʏ
&#656; = ʐ
&#657; = ʑ
&#658; = ʒ
&#659; = ʓ
&#660; = ʔ
&#661; = ʕ
&#662; = ʖ
&#663; = ʗ
&#664; = ʘ
&#666; = ʚ
&#667; = ʛ
&#668; = ʜ
&#669; = ʝ
&#670; = ʞ
&#671; = ʟ
&#672; = ʠ
&#673; = ʡ
&#674; = ʢ
&#675; = ʣ
&#676; = ʤ
&#677; = ʥ
&#678; = ʦ
&#679; = ʧ
&#680; = ʨ
&#681; = ʩ
&#682; = ʪ
&#683; = ʫ
&#684; = ʬ
&#685; = ʭ
&#688; = ʰ
&#689; = ʱ
&#690; = ʲ
&#691; = ʳ
&#692; = ʴ
&#693; = ʵ
&#694; = ʶ
&#695; = ʷ
&#696; = ʸ
&#697; = ʹ
&#698; = ʺ
&#699; = ʻ
&#700; = ʼ
&#701; = ʽ
&#702; = ʾ
&#703; = ʿ
&#704; = ˀ
&#705; = ˁ
&#706; = ˂
&#707; = ˃
&#708; = ˄
&#709; = ˅
&#710; = ˆ
&#711; = ˇ
&#712; = ˈ
&#713; = ˉ
&#714; = ˊ
&#715; = ˋ
&#716; = ˌ
&#717; = ˍ
&#718; = ˎ
&#719; = ˏ
&#720; = ː
&#721; = ˑ
&#722; = ˒
&#723; = ˓
&#724; = ˔
&#725; = ˕
&#726; = ˖
&#727; = ˗
&#728; = ˘
&#729; = ˙
&#730; = ˚
&#731; = ˛
&#732; = ˜
&#733; = ˝
&#734; = ˞
&#735; = ˟
&#736; = ˠ
&#737; = ˡ
&#738; = ˢ
&#739; = ˣ
&#740; = ˤ
&#741; = ˥
&#742; = ˦
&#743; = ˧
&#744; = ˨
&#745; = ˩
&#768; = ̀
&#769; = ́
&#770; = ̂
&#771; = ̃
&#772; = ̄
&#773; = ̅
&#774; = ̆
&#775; = ̇
&#776; = ̈
&#777; = ̉
&#778; = ̊
&#779; = ̋
&#780; = ̌
&#781; = ̍
&#782; = ̎
&#783; = ̏
&#784; = ̐
&#785; = ̑
&#786; = ̒
&#787; = ̓
&#788; = ̔
&#789; = ̕
&#790; = ̖
&#791; = ̗
&#792; = ̘
&#793; = ̙
&#794; = ̚
&#795; = ̛
&#796; = ̜
&#797; = ̝
&#798; = ̞
&#799; = ̟
&#800; = ̠
&#801; = ̡
&#802; = ̢
&#803; = ̣
&#804; = ̤
&#805; = ̥
&#806; = ̦
&#807; = ̧
&#808; = ̨
&#809; = ̩
&#810; = ̪
&#811; = ̫
&#812; = ̬
&#813; = ̭
&#814; = ̮
&#815; = ̯
&#816; = ̰
&#817; = ̱
&#818; = ̲
&#819; = ̳
&#820; = ̴
&#821; = ̵
&#822; = ̶
&#823; = ̷
&#824; = ̸
&#825; = ̹
&#826; = ̺
&#827; = ̻
&#828; = ̼
&#829; = ̽
&#830; = ̾
&#831; = ̿
&#832; = ̀
&#833; = ́
&#834; = ͂
&#835; = ̓
&#836; = ̈́
&#837; = ͅ
&#838; = ͆
&#839; = ͇
&#840; = ͈
&#841; = ͉
&#842; = ͊
&#843; = ͋
&#844; = ͌
&#845; = ͍
&#846; = ͎
&#847; = ͏
&#864; = ͠
&#865; = ͡
&#866; = ͢
&#884; = ʹ
&#885; =͵
&#890; = ͺ
&#894; = ;
&#900; = ΄
&#901; = ΅
&#902; = Ά
&#903; = ·
&#904; = Έ
&#905; = Ή
&#906; = Ί
&#908; = Ό
&#910; = Ύ
&#911; = Ώ
&#912; = ΐ
&#913; = Α
&#914; = Β
&#915; = Γ
&#916; = Δ
&#917; = Ε
&#918; = Ζ
&#919; = Η
&#920; = Θ
&#921; = Ι
&#922; = Κ
&#923; = Λ
&#924; = Μ
&#925; = Ν
&#926; = Ξ
&#927; = Ο
&#928; = Π
&#929; = Ρ
&#931; = Σ
&#932; = Τ
&#933; = Υ
&#934; = Φ
&#935; = Χ
&#936; = Ψ
&#937; = Ω
&#938; = Ϊ
&#939; = Ϋ
&#940; = ά
&#941; = έ
&#942; = ή
&#943; = ί
&#944; = ΰ
&#945; = α
&#946; = β
&#947; = γ
&#948; = δ
&#949; = ε
&#950; = ζ
&#951; = η
&#952; = θ
&#953; = ι
&#954; = κ
&#955; = λ
&#956; = μ
&#957; = ν
&#958; = ξ
&#959; = ο
&#960; = π
&#961; = ρ
&#962; = ς
&#963; = σ
&#964; = τ
&#965; = υ
&#966; = φ
&#967; = χ
&#968; = ψ
&#969; = ω
&#970; = ϊ
&#971; = ϋ
&#972; = ό
&#973; = ύ
&#974; = ώ
&#976; = ϐ
&#977; = ϑ
&#978; = ϒ
&#979; = ϓ
&#980; = ϔ
&#981; = ϕ
&#982; = ϖ
&#983; = ϗ
&#984; = Ϙ
&#985; = ϙ
&#986; = Ϛ
&#987; = ϛ
&#988; = Ϝ
&#989; = ϝ
&#990; = Ϟ
&#991; = ϟ
&#992; = Ϡ
&#993; = ϡ
&#994; = Ϣ
&#995; = ϣ
&#996; = Ϥ
&#997; = ϥ
&#998; = Ϧ
&#999; = ϧ
&#1000; = Ϩ
&#1001; = ϩ
&#1002; = Ϫ
&#1003; = ϫ
&#1004; = Ϭ
&#1005; = ϭ
&#1006; = Ϯ
&#1007; = ϯ
&#1008; = ϰ
&#1009; = ϱ
&#1010; = ϲ
&#1011; = ϳ
&#1012; = ϴ
&#1013; = ϵ
&#1014; = ϶
&#1024; = Ѐ
&#1025; = Ё
&#1026; = Ђ
&#1027; = Ѓ
&#1028; = Є
&#1029; = Ѕ
&#1030; = І
&#1031; = Ї
&#1032; = Ј
&#1033; = Љ
&#1034; = Њ
&#1035; = Ћ
&#1036; = Ќ
&#1037; = Ѝ
&#1038; = Ў
&#1039; = Џ
&#1040; = А
&#1041; = Б
&#1042; = В
&#1043; = Г
&#1044; = Д
&#1045; = Е
&#1046; = Ж
&#1047; = З
&#1048; = И
&#1049; = Й
&#1050; = К
&#1051; = Л
&#1052; = М
&#1053; = Н
&#1054; = О
&#1055; = П
&#1056; = Р
&#1057; = С
&#1058; = Т
&#1059; = У
&#1060; = Ф
&#1061; = Х
&#1062; = Ц
&#1063; = Ч
&#1064; = Ш
&#1065; = Щ
&#1066; = Ъ
&#1067; = Ы
&#1068; = Ь
&#1069; = Э
&#1070; = Ю
&#1071; = Я
&#1072; = а
&#1073; = б
&#1074; = в
&#1075; = г
&#1076; = д
&#1077; = е
&#1078; = ж
&#1079; = з
&#1080; = и
&#1081; = й
&#1082; = к
&#1083; = л
&#1084; = м
&#1085; = н
&#1086; = о
&#1087; = п
&#1088; = р
&#1089; = с
&#1090; = т
&#1091; = у
&#1092; = ф
&#1093; = х
&#1094; = ц
&#1095; = ч
&#1096; = ш
&#1097; = щ
&#1098; = ъ
&#1099; = ы
&#1100; = ь
&#1101; = э
&#1102; = ю
&#1103; = я
&#1104; = ѐ
&#1105; = ё
&#1106; = ђ
&#1107; = ѓ
&#1108; = є
&#1109; = ѕ
&#1110; = і
&#1111; = ї
&#1112; = ј
&#1113; = љ
&#1114; = њ
&#1115; = ћ
&#1116; = ќ
&#1117; = ѝ
&#1118; = ў
&#1119; = џ
&#1120; = Ѡ
&#1121; = ѡ
&#1122; = Ѣ
&#1123; = ѣ
&#1124; = Ѥ
&#1125; = ѥ
&#1126; = Ѧ
&#1127; = ѧ
&#1128; = Ѩ
&#1129; = ѩ
&#1130; = Ѫ
&#1131; = ѫ
&#1132; = Ѭ
&#1133; = ѭ
&#1134; = Ѯ
&#1135; = ѯ
&#1136; = Ѱ
&#1137; = ѱ
&#1138; = Ѳ
&#1139; = ѳ
&#1140; = Ѵ
&#1141; = ѵ
&#1142; = Ѷ
&#1143; = ѷ
&#1144; = Ѹ
&#1145; = ѹ
&#1146; = Ѻ
&#1147; = ѻ
&#1148; = Ѽ
&#1149; = ѽ
&#1150; = Ѿ
&#1151; = ѿ
&#1152; = Ҁ
&#1153; = ҁ
&#1154; = ҂
&#1155; = ҃
&#1156; = ҄
&#1157; = ҅
&#1158; = ҆
&#1159; = ҇
&#1160; = ҈
&#1161; = ҉
&#1162; = Ҋ
&#1163; = ҋ
&#1164; = Ҍ
&#1165; = ҍ
&#1166; = Ҏ
&#1167; = ҏ
&#1168; = Ґ
&#1169; = ґ
&#1170; = Ғ
&#1171; = ғ
&#1172; = Ҕ
&#1173; = ҕ
&#1174; = Җ
&#1175; = җ
&#1176; = Ҙ
&#1177; = ҙ
&#1178; = Қ
&#1179; = қ
&#1180; = Ҝ
&#1181; = ҝ
&#1182; = Ҟ
&#1183; = ҟ
&#1184; = Ҡ
&#1185; = ҡ
&#1186; = Ң
&#1187; = ң
&#1188; = Ҥ
&#1189; = ҥ
&#1190; = Ҧ
&#1191; = ҧ
&#1192; = Ҩ
&#1193; = ҩ
&#1194; = Ҫ
&#1195; = ҫ
&#1196; = Ҭ
&#1197; = ҭ
&#1198; = Ү
&#1199; = ү
&#1200; = Ұ
&#1201; = ұ
&#1202; = Ҳ
&#1203; = ҳ
&#1204; = Ҵ
&#1205; = ҵ
&#1206; = Ҷ
&#1207; = ҷ
&#1208; = Ҹ
&#1209; = ҹ
&#1210; = Һ
&#1211; = һ
&#1212; = Ҽ
&#1213; = ҽ
&#1214; = Ҿ
&#1215; = ҿ
&#1216; = Ӏ
&#1217; = Ӂ
&#1218; = ӂ
&#1219; = Ӄ
&#1220; = ӄ
&#1221; = Ӆ
&#1222; = ӆ
&#1223; = Ӈ
&#1224; = ӈ
&#1225; = Ӊ
&#1226; = ӊ
&#1227; = Ӌ
&#1228; = ӌ
&#1229; = Ӎ
&#1230; = ӎ
&#1231; = ӏ
&#1232; = Ӑ
&#1233; = ӑ
&#1234; = Ӓ
&#1235; = ӓ
&#1236; = Ӕ
&#1237; = ӕ
&#1238; = Ӗ
&#1239; = ӗ
&#1240; = Ә
&#1241; = ә
&#1242; = Ӛ
&#1243; = ӛ
&#1244; = Ӝ
&#1245; = ӝ
&#1246; = Ӟ
&#1247; = ӟ
&#1248; = Ӡ
&#1249; = ӡ
&#1250; = Ӣ
&#1251; = ӣ
&#1252; = Ӥ
&#1253; = ӥ
&#1254; = Ӧ
&#1255; = ӧ
&#1256; = Ө
&#1257; = ө
&#1258; = Ӫ
&#1259; = ӫ
&#1260; = Ӭ
&#1261; = ӭ
&#1262; = Ӯ
&#1263; = ӯ
&#1264; = Ӱ
&#1265; = ӱ
&#1266; = Ӳ
&#1267; = ӳ
&#1268; = Ӵ
&#1269; = ӵ
&#1272; = Ӹ
&#1273; = ӹ
&#1280; = Ԁ
&#1281; = ԁ
&#1282; = Ԃ
&#1283; = ԃ
&#1284; = Ԅ
&#1285; = ԅ
&#1286; = Ԇ
&#1287; = ԇ
&#1288; = Ԉ
&#1289; = ԉ
&#1290; = Ԋ
&#1291; = ԋ
&#1292; = Ԍ
&#1293; = ԍ
&#1294; = Ԏ
&#1295; = ԏ
&#1329; = Ա
&#1330; = Բ
&#1331; = Գ
&#1332; = Դ
&#1333; = Ե
&#1334; = Զ
&#1335; = Է
&#1336; = Ը
&#1337; = Թ
&#1338; = Ժ
&#1339; = Ի
&#1340; = Լ
&#1341; = Խ
&#1342; = Ծ
&#1343; = Կ
&#1344; = Հ
&#1345; = Ձ
&#1346; = Ղ
&#1347; = Ճ
&#1348; = Մ
&#1349; = Յ
&#1350; = Ն
&#1351; = Շ
&#1352; = Ո
&#1353; = Չ
&#1354; = Պ
&#1355; = Ջ
&#1356; = Ռ
&#1357; = Ս
&#1358; = Վ
&#1359; = Տ
&#1360; = Ր
&#1361; = Ց
&#1362; = Ւ
&#1363; = Փ
&#1364; = Ք
&#1365; = Օ
&#1366; = Ֆ
&#1369; = ՙ
&#1370; = ՚
&#1371; = ՛
&#1372; = ՜
&#1373; = ՝
&#1374; = ՞
&#1375; = ՟
&#1377; = ա
&#1378; = բ
&#1379; = գ
&#1380; = դ
&#1381; = ե
&#1382; = զ
&#1383; = է
&#1384; = ը
&#1385; = թ
&#1386; = ժ
&#1387; = ի
&#1388; = լ
&#1389; = խ
&#1390; = ծ
&#1391; = կ
&#1392; = հ
&#1393; = ձ
&#1394; = ղ
&#1395; = ճ
&#1396; = մ
&#1397; = յ
&#1398; = ն
&#1399; = շ
&#1400; = ո
&#1401; = չ
&#1402; = պ
&#1403; = ջ
&#1404; = ռ
&#1405; = ս
&#1406; = վ
&#1407; = տ
&#1408; = ր
&#1409; = ց
&#1410; = ւ
&#1411; = փ
&#1412; = ք
&#1413; = օ
&#1414; = ֆ
&#1415; = և
&#1417; = ։
&#1418; = ֊
(rtl removed)

&#2305; = ँ
&#2306; = ं
&#2307; = ः
&#2309; = अ
&#2310; = आ
&#2311; = इ
&#2312; = ई
&#2313; = उ
&#2314; = ऊ
&#2315; = ऋ
&#2316; = ऌ
&#2317; = ऍ
&#2318; = ऎ
&#2319; = ए
&#2320; = ऐ
&#2321; = ऑ
&#2322; = ऒ
&#2323; = ओ
&#2324; = औ
&#2325; = क
&#2326; = ख
&#2327; = ग
&#2328; = घ
&#2329; = ङ
&#2330; = च
&#2331; = छ
&#2332; = ज
&#2333; = झ
&#2334; = ञ
&#2335; = ट
&#2336; = ठ
&#2337; = ड
&#2338; = ढ
&#2339; = ण
&#2340; = त
&#2341; = थ
&#2342; = द
&#2343; = ध
&#2344; = न
&#2345; = ऩ
&#2346; = प
&#2347; = फ
&#2348; = ब
&#2349; = भ
&#2350; = म
&#2351; = य
&#2352; = र
&#2353; = ऱ
&#2354; = ल
&#2355; = ळ
&#2356; = ऴ
&#2357; = व
&#2358; = श
&#2359; = ष
&#2360; = स
&#2361; = ह
&#2364; = ़
&#2365; = ऽ
&#2366; = ा
&#2367; = ि
&#2368; = ी
&#2369; = ु
&#2370; = ू
&#2371; = ृ
&#2372; = ॄ
&#2373; = ॅ
&#2374; = ॆ
&#2375; = े
&#2376; = ै
&#2377; = ॉ
&#2378; = ॊ
&#2379; = ो
&#2380; = ौ
&#2381; = ्
&#2384; = ॐ
&#2385; = ॑
&#2386; = ॒
&#2387; = ॓
&#2388; = ॔
&#2392; = क़
&#2393; = ख़
&#2394; = ग़
&#2395; = ज़
&#2396; = ड़
&#2397; = ढ़
&#2398; = फ़
&#2399; = य़

&#2400; = ॠ
&#2401; = ॡ
&#2402; = ॢ
&#2403; = ॣ
&#2404; = ।
&#2405; = ॥
&#2406; = ०
&#2407; = १
&#2408; = २
&#2409; = ३
&#2410; = ४
&#2411; = ५
&#2412; = ६
&#2413; = ७
&#2414; = ८
&#2415; = ९
&#2416; = ॰
&#2433; = ঁ
&#2434; = ং
&#2435; = ঃ
&#2437; = অ
&#2438; = আ
&#2439; = ই
&#2440; = ঈ
&#2441; = উ
&#2442; = ঊ
&#2443; = ঋ
&#2444; = ঌ
&#2447; = এ
&#2448; = ঐ
&#2451; = ও
&#2452; = ঔ
&#2453; = ক
&#2454; = খ
&#2455; = গ
&#2456; = ঘ
&#2457; = ঙ
&#2458; = চ
&#2459; = ছ
&#2460; = জ
&#2461; = ঝ
&#2462; = ঞ
&#2463; = ট
&#2464; = ঠ
&#2465; = ড
&#2466; = ঢ
&#2467; = ণ
&#2468; = ত
&#2469; = থ
&#2470; = দ
&#2471; = ধ
&#2472; = ন
&#2474; = প
&#2475; = ফ
&#2476; = ব
&#2477; = ভ
&#2478; = ম
&#2479; = য
&#2480; = র
&#2482; = ল
&#2486; = শ
&#2487; = ষ
&#2488; = স
&#2489; = হ
&#2492; = ়
&#2493; = ঽ
&#2494; = া
&#2495; = ি
&#2496; = ী
&#2497; = ু
&#2498; = ূ
&#2499; = ৃ
&#2500; = ৄ
&#2503; = ে
&#2504; = ৈ
&#2507; = ো
&#2508; = ৌ
&#2509; = ্
&#2519; = ৗ
&#2524; = ড়
&#2525; = ঢ়
&#2527; = য়
&#2528; = ৠ
&#2529; = ৡ
&#2530; = ৢ
&#2531; = ৣ
&#2534; = ০
&#2535; = ১
&#2536; = ২
&#2537; = ৩
&#2538; = ৪
&#2539; = ৫
&#2540; = ৬
&#2541; = ৭
&#2542; = ৮
&#2543; = ৯
&#2544; = ৰ
&#2545; = ৱ
&#2546; = ৲
&#2547; = ৳
&#2548; = ৴
&#2549; = ৵
&#2550; = ৶
&#2551; = ৷
&#2552; = ৸
&#2553; = ৹
&#2554; = ৺
&#2562; = ਂ
&#2565; = ਅ
&#2566; = ਆ
&#2567; = ਇ
&#2568; = ਈ
&#2569; = ਉ
&#2570; = ਊ
&#2575; = ਏ
&#2576; = ਐ
&#2579; = ਓ
&#2580; = ਔ
&#2581; = ਕ
&#2582; = ਖ
&#2583; = ਗ
&#2584; = ਘ
&#2585; = ਙ
&#2586; = ਚ
&#2587; = ਛ
&#2588; = ਜ
&#2589; = ਝ
&#2590; = ਞ
&#2591; = ਟ
&#2592; = ਠ
&#2593; = ਡ
&#2594; = ਢ
&#2595; = ਣ
&#2596; = ਤ
&#2597; = ਥ
&#2598; = ਦ
&#2599; = ਧ
&#2600; = ਨ
&#2602; = ਪ
&#2603; = ਫ
&#2604; = ਬ
&#2605; = ਭ
&#2606; = ਮ
&#2607; = ਯ
&#2608; = ਰ
&#2610; = ਲ
&#2611; = ਲ਼
&#2613; = ਵ
&#2614; = ਸ਼
&#2616; = ਸ
&#2617; = ਹ
&#2620; = ਼
&#2622; = ਾ
&#2623; = ਿ
&#2624; = ੀ
&#2625; = ੁ
&#2626; = ੂ
&#2631; = ੇ
&#2632; = ੈ
&#2635; = ੋ
&#2636; = ੌ
&#2637; = ੍
&#2649; = ਖ਼
&#2650; = ਗ਼
&#2651; = ਜ਼
&#2652; = ੜ
&#2653; = ੝
&#2654; = ਫ਼
&#2662; = ੦
&#2663; = ੧
&#2664; = ੨
&#2665; = ੩
&#2666; = ੪
&#2667; = ੫
&#2668; = ੬
&#2669; = ੭
&#2670; = ੮
&#2671; = ੯
&#2672; = ੰ
&#2673; = ੱ
&#2674; = ੲ
&#2675; = ੳ
&#2676; = ੴ
&#2689; = ઁ
&#2690; = ં
&#2691; = ઃ
&#2693; = અ
&#2694; = આ
&#2695; = ઇ
&#2696; = ઈ
&#2697; = ઉ
&#2698; = ઊ
&#2699; = ઋ
&#2701; = ઍ
&#2703; = એ
&#2704; = ઐ
&#2705; = ઑ
&#2707; = ઓ
&#2708; = ઔ
&#2709; = ક
&#2710; = ખ
&#2711; = ગ
&#2712; = ઘ
&#2713; = ઙ
&#2714; = ચ
&#2715; = છ
&#2716; = જ
&#2717; = ઝ
&#2718; = ઞ
&#2719; = ટ
&#2720; = ઠ
&#2721; = ડ
&#2722; = ઢ
&#2723; = ણ
&#2724; = ત
&#2725; = થ
&#2726; = દ
&#2727; = ધ
&#2728; = ન
&#2730; = પ
&#2731; = ફ
&#2732; = બ
&#2733; = ભ
&#2734; = મ
&#2735; = ય
&#2736; = ર
&#2738; = લ
&#2739; = ળ
&#2740; = ઴
&#2741; = વ
&#2742; = શ
&#2743; = ષ
&#2744; = સ
&#2745; = હ
&#2748; = ઼
&#2749; = ઽ
&#2750; = ા
&#2751; = િ
&#2752; = ી
&#2753; = ુ
&#2754; = ૂ
&#2755; = ૃ
&#2756; = ૄ
&#2757; = ૅ
&#2759; = ે
&#2760; = ૈ
&#2761; = ૉ
&#2762; = ૊
&#2763; = ો
&#2764; = ૌ
&#2765; = ્
&#2768; = ૐ
&#2784; = ૠ
&#2790; = ૦
&#2791; = ૧
&#2792; = ૨
&#2793; = ૩
&#2794; = ૪
&#2795; = ૫
&#2796; = ૬
&#2797; = ૭
&#2798; = ૮
&#2799; = ૯
&#2817; = ଁ
&#2818; = ଂ
&#2819; = ଃ
&#2821; = ଅ
&#2822; = ଆ
&#2823; = ଇ
&#2824; = ଈ
&#2825; = ଉ
&#2826; = ଊ
&#2827; = ଋ
&#2828; = ଌ
&#2831; = ଏ
&#2832; = ଐ
&#2835; = ଓ
&#2836; = ଔ
&#2837; = କ
&#2838; = ଖ
&#2839; = ଗ
&#2840; = ଘ
&#2841; = ଙ
&#2842; = ଚ
&#2843; = ଛ
&#2844; = ଜ
&#2845; = ଝ
&#2846; = ଞ
&#2847; = ଟ
&#2848; = ଠ
&#2849; = ଡ
&#2850; = ଢ
&#2851; = ଣ
&#2852; = ତ
&#2853; = ଥ
&#2854; = ଦ
&#2855; = ଧ
&#2856; = ନ
&#2858; = ପ
&#2859; = ଫ
&#2860; = ବ
&#2861; = ଭ
&#2862; = ମ
&#2863; = ଯ
&#2864; = ର
&#2866; = ଲ
&#2867; = ଳ
&#2870; = ଶ
&#2871; = ଷ
&#2872; = ସ
&#2873; = ହ
&#2876; = ଼
&#2877; = ଽ
&#2878; = ା
&#2879; = ି
&#2880; = ୀ
&#2881; = ୁ
&#2882; = ୂ
&#2883; = ୃ
&#2887; = େ
&#2888; = ୈ
&#2891; = ୋ
&#2892; = ୌ
&#2893; = ୍
&#2902; = ୖ
&#2903; = ୗ
&#2908; = ଡ଼
&#2909; = ଢ଼
&#2911; = ୟ
&#2912; = ୠ
&#2913; = ୡ
&#2918; = ୦
&#2919; = ୧
&#2920; = ୨
&#2921; = ୩
&#2922; = ୪
&#2923; = ୫
&#2924; = ୬
&#2925; = ୭
&#2926; = ୮
&#2927; = ୯
&#2928; = ୰
&#2946; = ஂ
&#2947; = ஃ
&#2949; = அ
&#2950; = ஆ
&#2951; = இ
&#2952; = ஈ
&#2953; = உ
&#2954; = ஊ
&#2958; = எ
&#2959; = ஏ
&#2960; = ஐ
&#2962; = ஒ
&#2963; = ஓ
&#2964; = ஔ
&#2965; = க
&#2969; = ங
&#2970; = ச
&#2972; = ஜ
&#2974; = ஞ
&#2975; = ட
&#2979; = ண
&#2980; = த
&#2984; = ந
&#2985; = ன
&#2986; = ப
&#2990; = ம
&#2991; = ய
&#2992; = ர
&#2993; = ற
&#2994; = ல
&#2995; = ள
&#2996; = ழ
&#2997; = வ
&#2999; = ஷ
&#3000; = ஸ
&#3001; = ஹ
&#3006; = ா
&#3007; = ி
&#3008; = ீ
&#3009; = ு
&#3010; = ூ
&#3014; = ெ
&#3015; = ே
&#3016; = ை
&#3018; = ொ
&#3019; = ோ
&#3020; = ௌ
&#3021; = ்
&#3031; = ௗ
&#3046; = ௦
&#3047; = ௧
&#3048; = ௨
&#3049; = ௩
&#3050; = ௪
&#3051; = ௫
&#3052; = ௬
&#3053; = ௭
&#3054; = ௮
&#3055; = ௯
&#3056; = ௰
&#3057; = ௱
&#3058; = ௲
&#3073; = ఁ
&#3074; = ం
&#3075; = ః
&#3077; = అ
&#3078; = ఆ
&#3079; = ఇ
&#3080; = ఈ
&#3081; = ఉ
&#3082; = ఊ
&#3083; = ఋ
&#3084; =ఌ
&#3086; = ఎ
&#3087; = ఏ
&#3088; = ఐ
&#3090; = ఒ
&#3091; = ఓ
&#3092; = ఔ
&#3093; = క
&#3094; = ఖ
&#3095; = గ
&#3096; = ఘ
&#3097; = ఙ
&#3098; = చ
&#3099; = ఛ
&#3100; = జ

&#3101; = ఝ
&#3102; = ఞ
&#3103; = ట
&#3104; = ఠ
&#3105; = డ
&#3106; = ఢ
&#3107; = ణ
&#3108; = త
&#3109; = థ
&#3110; = ద
&#3111; = ధ
&#3112; = న
&#3114; = ప
&#3115; = ఫ
&#3116; = బ
&#3117; = భ
&#3118; = మ
&#3119; = య
&#3120; = ర
&#3121; = ఱ
&#3122; = ల
&#3123; = ళ
&#3125; = వ
&#3126; = శ
&#3127; = ష
&#3128; = స
&#3129; = హ
&#3134; = ా
&#3135; = ి
&#3136; = ీ
&#3137; = ు
&#3138; = ూ
&#3139; = ృ
&#3140; = ౄ
&#3142; = ె
&#3143; = ే
&#3144; = ై
&#3145; = ౉
&#3146; = ొ
&#3147; = ో
&#3148; = ౌ
&#3149; = ్
&#3157; = ౕ
&#3158; = ౖ
&#3168; = ౠ
&#3169; = ౡ
&#3174; = ౦
&#3175; = ౧
&#3176; = ౨
&#3177; = ౩
&#3178; = ౪
&#3179; = ౫
&#3180; = ౬
&#3181; = ౭
&#3182; = ౮
&#3183; = ౯
&#3202; = ಂ
&#3203; = ಃ
&#3205; = ಅ
&#3206; = ಆ
&#3207; = ಇ
&#3208; = ಈ
&#3209; = ಉ
&#3210; = ಊ
&#3211; = ಋ
&#3212; = ಌ
&#3214; = ಎ
&#3215; = ಏ
&#3216; = ಐ
&#3218; = ಒ
&#3219; = ಓ
&#3220; = ಔ
&#3221; = ಕ
&#3222; = ಖ
&#3223; = ಗ
&#3224; = ಘ
&#3225; = ಙ
&#3226; = ಚ
&#3227; = ಛ
&#3228; = ಜ
&#3229; = ಝ
&#3230; = ಞ
&#3231; = ಟ
&#3232; = ಠ
&#3233; = ಡ
&#3234; = ಢ
&#3235; = ಣ
&#3236; = ತ
&#3237; = ಥ
&#3238; = ದ
&#3239; = ಧ
&#3240; = ನ
&#3242; = ಪ
&#3243; = ಫ
&#3244; = ಬ
&#3245; = ಭ
&#3246; = ಮ
&#3247; = ಯ
&#3248; = ರ
&#3249; = ಱ
&#3250; = ಲ
&#3251; = ಳ
&#3252; = ಴
&#3253; = ವ
&#3254; = ಶ
&#3255; = ಷ
&#3256; = ಸ
&#3257; = ಹ
&#3262; = ಾ
&#3263; = ಿ
&#3264; = ೀ
&#3265; = ು
&#3266; = ೂ
&#3267; = ೃ
&#3268; = ೄ
&#3270; = ೆ
&#3271; = ೇ
&#3272; = ೈ
&#3274; = ೊ
&#3275; = ೋ
&#3276; = ೌ
&#3277; = ್
&#3285; = ೕ
&#3286; = ೖ
&#3294; = ೞ
&#3296; = ೠ
&#3297; = ೡ
&#3302; = ೦
&#3303; = ೧
&#3304; = ೨
&#3305; = ೩
&#3306; = ೪
&#3307; = ೫
&#3308; = ೬
&#3309; = ೭
&#3310; = ೮
&#3311; = ೯
&#3330; = ം
&#3331; = ഃ
&#3333; = അ
&#3334; = ആ
&#3335; = ഇ
&#3336; = ഈ
&#3337; = ഉ
&#3338; = ഊ
&#3339; = ഋ
&#3340; = ഌ
&#3342; = എ
&#3343; = ഏ
&#3344; = ഐ
&#3346; = ഒ
&#3347; = ഓ
&#3348; = ഔ
&#3349; = ക
&#3350; = ഖ
&#3351; = ഗ
&#3352; = ഘ
&#3353; = ങ
&#3354; = ച
&#3355; = ഛ
&#3356; = ജ
&#3357; = ഝ
&#3358; = ഞ
&#3359; = ട
&#3360; = ഠ
&#3361; = ഡ
&#3362; = ഢ
&#3363; = ണ
&#3364; = ത
&#3365; = ഥ
&#3366; = ദ
&#3367; = ധ
&#3368; = ന
&#3370; = പ
&#3371; = ഫ
&#3372; = ബ
&#3373; = ഭ
&#3374; = മ
&#3375; = യ
&#3376; = ര
&#3377; = റ
&#3378; = ല
&#3379; = ള
&#3380; = ഴ
&#3381; = വ
&#3382; = ശ
&#3383; = ഷ
&#3384; = സ
&#3385; = ഹ
&#3390; = ാ
&#3391; = ി
&#3392; = ീ
&#3393; = ു
&#3394; = ൂ
&#3395; = ൃ
&#3398; = െ
&#3399; = േ
&#3400; = ൈ
&#3402; = ൊ
&#3403; = ോ
&#3404; = ൌ
&#3405; = ്
&#3424; = ൠ
&#3425; = ൡ
&#3426; = ൢ
&#3427; = ൣ
&#3428; = ൤
&#3429; = ൥
&#3430; = ൦
&#3431; = ൧
&#3432; = ൨
&#3433; = ൩
&#3434; = ൪
&#3435; = ൫
&#3436; = ൬
&#3437; = ൭
&#3438; = ൮
&#3439; = ൯
&#3585; = ก
&#3586; = ข
&#3587; = ฃ
&#3588; = ค
&#3589; = ฅ
&#3590; = ฆ
&#3591; = ง
&#3592; = จ
&#3593; = ฉ
&#3594; = ช
&#3595; = ซ
&#3596; = ฌ
&#3597; = ญ
&#3598; = ฎ
&#3599; = ฏ
&#3600; = ฐ
&#3601; = ฑ
&#3602; = ฒ
&#3603; = ณ
&#3604; = ด
&#3605; = ต
&#3606; = ถ
&#3607; = ท
&#3608; = ธ
&#3609; = น
&#3610; = บ
&#3611; = ป
&#3612; = ผ
&#3613; = ฝ
&#3614; = พ
&#3615; = ฟ
&#3616; = ภ
&#3617; = ม
&#3618; = ย
&#3619; = ร
&#3620; = ฤ
&#3621; = ล
&#3622; = ฦ
&#3623; = ว
&#3624; = ศ
&#3625; = ษ
&#3626; = ส
&#3627; = ห
&#3628; = ฬ
&#3629; = อ
&#3630; = ฮ
&#3631; = ฯ
&#3632; = ะ
&#3633; = ั
&#3634; = า
&#3635; = ำ
&#3636; = ิ
&#3637; = ี
&#3638; = ึ
&#3639; = ื
&#3640; = ุ
&#3641; = ู
&#3642; = ฺ
&#3647; = ฿
&#3648; = เ
&#3649; = แ
&#3650; = โ
&#3651; = ใ
&#3652; = ไ
&#3653; = ๅ
&#3654; = ๆ
&#3655; = ็
&#3656; = ่
&#3657; = ้
&#3658; = ๊
&#3659; = ๋
&#3660; = ์
&#3661; = ํ
&#3662; = ๎
&#3663; = ๏
&#3664; = ๐
&#3665; = ๑
&#3666; = ๒
&#3667; = ๓
&#3668; = ๔
&#3669; = ๕
&#3670; = ๖
&#3671; = ๗
&#3672; = ๘
&#3673; = ๙
&#3674; = ๚
&#3675; = ๛
&#3713; = ກ
&#3714; = ຂ
&#3716; = ຄ
&#3719; = ງ
&#3720; = ຈ
&#3722; =ຊ
&#3725; = ຍ
&#3732; = ດ
&#3733; = ຕ
&#3734; = ຖ
&#3735; = ທ
&#3737; = ນ
&#3738; = ບ
&#3739; = ປ
&#3740; = ຜ
&#3741; = ຝ
&#3742; = ພ
&#3743; = ຟ
&#3745; = ມ
&#3746; = ຢ
&#3747; = ຣ
&#3749; = ລ
&#3751; = ວ
&#3754; = ສ
&#3755; = ຫ
&#3757; = ອ
&#3758; = ຮ
&#3759; = ຯ
&#3760; = ະ
&#3761; = ັ
&#3762; = າ
&#3763; = ຳ
&#3764; = ິ
&#3765; = ີ
&#3766; = ຶ
&#3767; = ື
&#3768; = ຸ
&#3769; = ູ
&#3771; = ົ
&#3772; = ຼ
&#3773; = ຽ
&#3776; = ເ
&#3777; = ແ
&#3778; = ໂ
&#3779; = ໃ
&#3780; = ໄ
&#3782; = ໆ
&#3784; = ່
&#3785; = ້
&#3786; = ໊
&#3787; = ໋
&#3788; = ໌
&#3789; = ໍ
&#3792; = ໐
&#3793; = ໑
&#3794; = ໒
&#3795; = ໓
&#3796; = ໔
&#3797; = ໕
&#3798; = ໖
&#3799; = ໗
&#3800; = ໘
&#3801; = ໙
&#3804; = ໜ
&#3805; = ໝ
&#3840; = ༀ
&#3841; = ༁
&#3842; = ༂
&#3843; = ༃
&#3844; = ༄
&#3845; = ༅
&#3846; = ༆
&#3847; = ༇
&#3848; = ༈
&#3849; = ༉
&#3850; = ༊
&#3851; = ་
&#3852; = ༌
&#3853; = །
&#3854; = ༎
&#3855; = ༏
&#3856; = ༐
&#3857; = ༑
&#3858; = ༒
&#3859; = ༓
&#3860; = ༔
&#3861; = ༕
&#3862; = ༖
&#3863; = ༗
&#3864; = ༘
&#3865; = ༙
&#3866; = ༚
&#3867; = ༛
&#3868; = ༜
&#3869; = ༝
&#3870; = ༞
&#3871; = ༟
&#3872; = ༠
&#3873; = ༡
&#3874; = ༢
&#3875; = ༣
&#3876; = ༤
&#3877; = ༥
&#3878; = ༦
&#3879; = ༧
&#3880; = ༨
&#3881; = ༩
&#3882; = ༪
&#3883; = ༫
&#3884; = ༬
&#3885; = ༭
&#3886; = ༮
&#3887; = ༯
&#3888; = ༰
&#3889; = ༱
&#3890; = ༲
&#3891; = ༳
&#3892; = ༴
&#3893; = ༵
&#3894; = ༶
&#3895; = ༷
&#3896; = ༸
&#3897; = ༹
&#3898; = ༺
&#3899; = ༻
&#3900; = ༼
&#3901; = ༽
&#3902; = ༾
&#3903; = ༿
&#3904; = ཀ
&#3905; = ཁ
&#3906; = ག
&#3907; = གྷ
&#3908; = ང
&#3909; = ཅ
&#3910; = ཆ
&#3911; = ཇ
&#3912; = ཈
&#3913; = ཉ
&#3914; = ཊ
&#3915; = ཋ
&#3916; = ཌ
&#3917; = ཌྷ
&#3918; = ཎ
&#3919; = ཏ
&#3920; = ཐ
&#3921; = ད
&#3922; = དྷ
&#3923; = ན
&#3924; = པ
&#3925; = ཕ
&#3926; = བ
&#3927; = བྷ
&#3928; = མ
&#3929; = ཙ
&#3930; = ཚ
&#3931; = ཛ
&#3932; = ཛྷ
&#3933; = ཝ
&#3934; = ཞ
&#3935; = ཟ
&#3936; = འ
&#3937; = ཡ
&#3938; = ར
&#3939; = ལ
&#3940; = ཤ
&#3941; = ཥ
&#3942; = ས
&#3943; = ཧ
&#3944; = ཨ
&#3945; = ཀྵ
&#3953; = ཱ
&#3954; = ི
&#3955; = ཱི
&#3956; = ུ
&#3957; = ཱུ
&#3958; = ྲྀ
&#3959; = ཷ
&#3960; = ླྀ
&#3961; = ཹ
&#3962; = ེ
&#3963; = ཻ
&#3964; = ོ
&#3965; = ཽ
&#3966; = ཾ
&#3967; = ཿ
&#3968; = ྀ
&#3969; = ཱྀ
&#3970; = ྂ
&#3971; = ྃ
&#3972; = ྄
&#3973; = ྅
&#3974; = ྆
&#3975; = ྇
&#3976; = ྈ
&#3977; = ྉ
&#3978; = ྊ
&#3979; = ྋ
&#3984; = ྐ
&#3985; = ྑ
&#3986; = ྒ
&#3987; = ྒྷ
&#3988; = ྔ
&#3989; = ྕ
&#3991; = ྗ
&#3993; = ྙ
&#3994; = ྚ
&#3995; = ྛ
&#3996; = ྜ
&#3997; = ྜྷ
&#3998; = ྞ
&#3999; = ྟ
&#4000; = ྠ
&#4001; = ྡ
&#4002; = ྡྷ
&#4003; = ྣ
&#4004; = ྤ
&#4005; = ྥ
&#4006; = ྦ
&#4007; = ྦྷ
&#4008; = ྨ
&#4009; = ྩ
&#4010; = ྪ
&#4011; = ྫ
&#4012; = ྫྷ
&#4013; = ྭ
&#4017; = ྱ
&#4018; = ྲ
&#4019; = ླ
&#4020; = ྴ
&#4021; = ྵ
&#4022; = ྶ
&#4023; = ྷ
&#4025; = ྐྵ
&#4160; = ၀
&#4161; = ၁
&#4162; = ၂
&#4163; = ၃
&#4164; = ၄
&#4165; = ၅
&#4166; = ၆
&#4167; = ၇
&#4168; = ၈
&#4169; = ၉
&#4256; = Ⴀ
&#4257; = Ⴁ
&#4258; = Ⴂ
&#4259; = Ⴃ
&#4260; = Ⴄ
&#4261; = Ⴅ
&#4262; = Ⴆ
&#4263; = Ⴇ
&#4264; = Ⴈ
&#4265; = Ⴉ
&#4266; = Ⴊ
&#4267; = Ⴋ
&#4268; = Ⴌ
&#4269; = Ⴍ
&#4270; = Ⴎ
&#4271; = Ⴏ
&#4272; = Ⴐ
&#4273; = Ⴑ
&#4274; = Ⴒ
&#4275; = Ⴓ
&#4276; = Ⴔ
&#4277; = Ⴕ
&#4278; = Ⴖ
&#4279; = Ⴗ
&#4280; = Ⴘ
&#4281; = Ⴙ
&#4282; = Ⴚ
&#4283; = Ⴛ
&#4284; = Ⴜ
&#4285; = Ⴝ
&#4286; = Ⴞ
&#4287; = Ⴟ
&#4288; = Ⴠ
&#4289; = Ⴡ
&#4290; = Ⴢ
&#4291; = Ⴣ
&#4292; = Ⴤ
&#4293; = Ⴥ
&#4304; = ა
&#4305; = ბ
&#4306; = გ
&#4307; = დ
&#4308; = ე
&#4309; = ვ
&#4310; = ზ
&#4311; = თ
&#4312; = ი
&#4313; = კ
&#4314; = ლ
&#4315; = მ
&#4316; = ნ
&#4317; = ო
&#4318; = პ
&#4319; = ჟ
&#4320; = რ
&#4321; = ს
&#4322; = ტ
&#4323; = უ
&#4324; = ფ
&#4325; = ქ
&#4326; = ღ
&#4327; = ყ
&#4328; = შ
&#4329; = ჩ
&#4330; = ც
&#4331; = ძ
&#4332; = წ
&#4333; = ჭ
&#4334; = ხ
&#4335; = ჯ
&#4336; = ჰ
&#4337; = ჱ
&#4338; = ჲ
&#4339; = ჳ
&#4340; = ჴ
&#4341; = ჵ
&#4342; = ჶ
&#4347; = ჻
&#4352; = ᄀ
&#4353; = ᄁ
&#4354; = ᄂ
&#4355; = ᄃ
&#4356; = ᄄ
&#4357; = ᄅ
&#4358; = ᄆ
&#4359; = ᄇ
&#4360; = ᄈ
&#4361; = ᄉ
&#4362; = ᄊ
&#4363; = ᄋ
&#4364; = ᄌ
&#4365; = ᄍ
&#4366; = ᄎ
&#4367; = ᄏ
&#4368; = ᄐ
&#4369; = ᄑ
&#4370; = ᄒ
&#4371; = ᄓ
&#4372; = ᄔ
&#4373; = ᄕ
&#4374; = ᄖ
&#4375; = ᄗ
&#4376; = ᄘ
&#4377; = ᄙ
&#4378; = ᄚ
&#4379; = ᄛ
&#4380; = ᄜ
&#4381; = ᄝ
&#4382; = ᄞ
&#4383; = ᄟ
&#4384; = ᄠ
&#4385; = ᄡ
&#4386; = ᄢ
&#4387; = ᄣ
&#4388; = ᄤ
&#4389; = ᄥ
&#4390; = ᄦ
&#4391; = ᄧ
&#4392; = ᄨ
&#4393; = ᄩ
&#4394; = ᄪ
&#4395; = ᄫ
&#4396; = ᄬ
&#4397; = ᄭ
&#4398; = ᄮ
&#4399; = ᄯ
&#4400; = ᄰ
&#4401; = ᄱ
&#4402; = ᄲ
&#4403; = ᄳ
&#4404; = ᄴ
&#4405; = ᄵ
&#4406; = ᄶ
&#4407; = ᄷ
&#4408; = ᄸ
&#4409; = ᄹ
&#4410; = ᄺ
&#4411; = ᄻ
&#4412; = ᄼ
&#4413; = ᄽ
&#4414; = ᄾ
&#4415; = ᄿ
&#4416; = ᅀ
&#4417; = ᅁ
&#4418; = ᅂ
&#4419; = ᅃ
&#4420; = ᅄ
&#4421; = ᅅ
&#4422; = ᅆ
&#4423; = ᅇ
&#4424; = ᅈ
&#4425; = ᅉ
&#4426; = ᅊ
&#4427; = ᅋ
&#4428; = ᅌ
&#4429; = ᅍ
&#4430; = ᅎ
&#4431; = ᅏ
&#4432; = ᅐ
&#4433; = ᅑ
&#4434; = ᅒ
&#4435; = ᅓ
&#4436; = ᅔ
&#4437; = ᅕ
&#4438; = ᅖ
&#4439; = ᅗ
&#4440; = ᅘ
&#4441; = ᅙ
&#4447; = ᅟ
&#4448; = ᅠ
&#4449; = ᅡ
&#4450; = ᅢ
&#4451; = ᅣ
&#4452; = ᅤ
&#4453; = ᅥ
&#4454; = ᅦ
&#4455; = ᅧ
&#4456; = ᅨ
&#4457; = ᅩ
&#4458; = ᅪ
&#4459; = ᅫ
&#4460; = ᅬ
&#4461; = ᅭ
&#4462; = ᅮ
&#4463; = ᅯ
&#4464; = ᅰ
&#4465; = ᅱ
&#4466; = ᅲ
&#4467; = ᅳ
&#4468; = ᅴ
&#4469; = ᅵ
&#4470; = ᅶ
&#4471; = ᅷ
&#4472; = ᅸ
&#4473; = ᅹ
&#4474; = ᅺ
&#4475; = ᅻ
&#4476; = ᅼ
&#4477; = ᅽ
&#4478; = ᅾ
&#4479; = ᅿ
&#4480; = ᆀ
&#4481; = ᆁ
&#4482; = ᆂ
&#4483; = ᆃ
&#4484; = ᆄ
&#4485; = ᆅ
&#4486; = ᆆ
&#4487; = ᆇ
&#4488; = ᆈ
&#4489; = ᆉ
&#4490; = ᆊ
&#4491; = ᆋ
&#4492; = ᆌ
&#4493; = ᆍ
&#4494; = ᆎ
&#4495; = ᆏ
&#4496; = ᆐ
&#4497; = ᆑ
&#4498; = ᆒ
&#4499; = ᆓ
&#4500; = ᆔ
&#4501; = ᆕ
&#4502; = ᆖ
&#4503; = ᆗ
&#4504; = ᆘ
&#4505; = ᆙ
&#4506; = ᆚ
&#4507; = ᆛ
&#4508; = ᆜ
&#4509; = ᆝ
&#4510; = ᆞ
&#4511; = ᆟ
&#4512; = ᆠ
&#4513; = ᆡ
&#4514; = ᆢ
&#4520; = ᆨ
&#4521; = ᆩ
&#4522; = ᆪ
&#4523; = ᆫ
&#4524; = ᆬ
&#4525; = ᆭ
&#4526; = ᆮ
&#4527; = ᆯ
&#4528; = ᆰ
&#4529; = ᆱ
&#4530; = ᆲ
&#4531; = ᆳ
&#4532; = ᆴ
&#4533; = ᆵ
&#4534; = ᆶ
&#4535; = ᆷ
&#4536; = ᆸ
&#4537; = ᆹ
&#4538; = ᆺ
&#4539; = ᆻ
&#4540; = ᆼ
&#4541; = ᆽ
&#4542; = ᆾ
&#4543; = ᆿ
&#4544; = ᇀ
&#4545; = ᇁ
&#4546; = ᇂ
&#4547; = ᇃ
&#4548; = ᇄ
&#4549; = ᇅ
&#4550; = ᇆ
&#4551; = ᇇ
&#4552; = ᇈ
&#4553; = ᇉ
&#4554; = ᇊ
&#4555; = ᇋ
&#4556; = ᇌ
&#4557; = ᇍ
&#4558; = ᇎ
&#4559; = ᇏ
&#4560; = ᇐ
&#4561; = ᇑ
&#4562; = ᇒ
&#4563; = ᇓ
&#4564; = ᇔ
&#4565; = ᇕ
&#4566; = ᇖ
&#4567; = ᇗ
&#4568; = ᇘ
&#4569; = ᇙ
&#4570; = ᇚ
&#4571; = ᇛ
&#4572; = ᇜ
&#4573; = ᇝ
&#4574; = ᇞ
&#4575; = ᇟ
&#4576; = ᇠ
&#4577; = ᇡ
&#4578; = ᇢ
&#4579; = ᇣ
&#4580; = ᇤ
&#4581; = ᇥ
&#4582; = ᇦ
&#4583; = ᇧ
&#4584; = ᇨ
&#4585; = ᇩ
&#4586; = ᇪ
&#4587; = ᇫ
&#4588; = ᇬ
&#4589; = ᇭ
&#4590; = ᇮ
&#4591; = ᇯ
&#4592; = ᇰ
&#4593; = ᇱ
&#4594; = ᇲ
&#4595; = ᇳ
&#4596; = ᇴ
&#4597; = ᇵ
&#4598; = ᇶ
&#4599; = ᇷ
&#4600; = ᇸ
&#4601; = ᇹ
&#4969; = ፩
&#4970; = ፪
&#4971; = ፫
&#4972; = ፬
&#4973; = ፭
&#4974; = ፮
&#4975; = ፯
&#4976; = ፰
&#4977; = ፱
&#4978; = ፲
&#4979; = ፳
&#4980; = ፴
&#4981; = ፵
&#4982; = ፶
&#4983; = ፷
&#4984; = ፸
&#4985; = ፹
&#4986; = ፺
&#4987; = ፻
&#4988; = ፼
&#5870; = ᛮ
&#5871; = ᛯ
&#5872; = ᛰ


 
 

ISO 8601 date in PHP August 1, 2007

Filed under: PHP, Web Development — Estelle Weyl @ 2:37 pm

Converting ISO 8601 date string in PHP

JavaScript Date Object explained how to convert ISO 8601 dates in Javascript. Thanks to Ryan Kennedy, we have a function to convert ISO 8601 dates in PHP.

This is how you can call the function:

$theDateFormattedMyWay = date("F j, Y", parse_datetime($ISO8601_formate_date]));

For other possible formats, please visit: http://php.net/manual/en/function.date.php.

You need to then include the parse_datetime function in your code. Hopefully the next version of PHP will include this, or something similar

function parse_datetime($datetime) {
     $currentTime = time();
     $offset = date("Z", $currentTime);

     $matches = array();

     // Check to see if we're dealing with a UTC dateTime (ends in 'Z')
     // or if there's an offset specified (ends in '[+-]hh:mm’).
     if(preg_match("/^(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2})([+-])(\d{2}):(\d{2})$/",
          $datetime, $matches) === 1) {
     	// Offset specified.
     	$dateString = $matches[1];

     	// Calculate the custom offset.
     	$customOffset = $matches[3] * 60 * 60;
     	$customOffset += $matches[4] * 60;

     	// Invert the custom offset as necessary.
	if($matches[2] == "+") {
     		$customOffset = -1 * $customOffset;
     	}

     	// Add the custom offset to the UTC offset to get the offset
     	// from the local timezone.
     	$offset += $customOffset;
     }
     else if(preg_match("/^(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2})Z$/",
           $datetime, $matches) === 1) {
     	// Using the UTC timezone.
     	$dateString = $matches[1];
     }

     // Parse the date and time portion of the string.
     $datetimeArray = strptime($dateString, "%Y-%m-%dT%H:%M:%S%");

     // Generate the UNIX time. Note that this will be in the wrong timezone.
     $time = mktime($datetimeArray['tm_hour'],
     		$datetimeArray['tm_min'],
     		$datetimeArray['tm_sec'],
     		$datetimeArray['tm_mon'] + 1,
		$datetimeArray['tm_mday'] ,
     		$datetimeArray['tm_year'] + 1900);

      // Return the calculated UNIX time from above along with the offset
      // necessary to correct for the timezone specified.
      return $time + $offset;
}
 
 

JavaScript Date Object July 29, 2007

Filed under: JavaScript, PHP, Web Development — Estelle Weyl @ 11:18 am

Javascript: Things you should know

Note: This is part IV of a "Javascript: Things you should know" series. I assume readers have an understanding of the core language. This section goes over the creation of date objects. Most resources go over creating a current time date object. This goes over the rest. The previous entry was JavaScript Objects. The next entry list all the date object methods. Please let me know what you think and it there is anything I am missing. Enjoy.

Creating JavaScript Date Objects:

There are fours ways of instantiating a date object:

  1. Without parameters
    Returns the users current date based on client computer’s clock.

    new Date();

    Example:
    var currentTime = new Date();

  2. With a numeric parameter:
    Returns the date measured from midnight January 1, 1970 (+/- GMT diff) plus the time in milliseconds that was passed as the parameter

    new Date(milliseconds);

    Examples:
    var startTime = new Date(0); // Returns
    your time when GMT hit the new year.
    var millenium = new Date ((365*30 + 7)*24*60*60*1000); // returns the millenium at GMT, The +7 is for the leap days.

  3. With a string parameter:
    The string parameter must be a date correctly formatted in string format. The Date object only seems to accept 1 date string format, which is provided in the examples below. The flexibility is only in the day: the number may include a leading zero, but it is not required.

    new Date(dateString)

    Examples:
    var auntsBirthday = new Date("September 4, 1902") // She’s 105
    var modifiedTime = new Date("July 27, 2005 12:22:00") // format must be exact

  4. With an array of parameters:
    Pass the different date element parameters in the order above. If you don’t specify all the parameters, or a parameter is non-numeric, 0 is passed. If your value is numeric, but not a valid value (such as hours == 25) no error will be thrown, though it may be a logic error. The most common error is the month parameter: remember that the arrays start at index of 0, so January is 0 and December is 11.

    new Date(year, month, day, hours, minutes, seconds, milliseconds)

    var modifiedTime = new Date(2007,7,27)
    var modifiedTime = new Date(2007,7,27,13,22,0)

Here are a few examples and what gets returned (javascript must be enabled):

  • currentTime = new Date()
  • timeBasis = new Date(0)
  • lastYear= new Date(-365*24*60*60*1000)

  • var currentTime = new Date("November 4, 2008");

  • anniversary = new Date(2003,8,21)
  • exactTime = new Date(1969,0,3,16,4,12,500)

Note:

  • new Date(0) will not return midnight of January first unless your computer set to GMT.

Common JavaScript Date Object Errors

  • new date()
    //Error: Date is case sensitive
  • new Date("412")
    //
    Error: No data conversion
  • new Date("June 31, 2005 29:95:73 ")
    //Logic Error: Too many hours in your day, and there are only 30 days in June.
    Returns July 2, 2005; which is unlikely your intention.
  • new Date("July 27, 2005 12:22pm")
    // invalid date error - doesn’t understand PM
  • new Date("2007-7-27")
    //Invalid Date: - string in wrong format**
  • new Date(1969,12,3,16,4)
    //Returns January 3, 1970 instead of December 3, 1969. Logic Error: monthArray is 0 - 11.

Notes:

  • When passing the month as a number, remember that the array starts at 0. Optional values are 0-11. Javascript will not throw an error, but there will be a logic error.
  • The date string must be of the correct fomat. The minimum is "Month dd, yyyy", to "Month dd, yyyy hh:mm:ss". The Month doesn’t seem to be case sensitive in my tests, but I haven’t checked all browsers. Good coding practices dictate that it should be capitalized. .
  • JavaScript uses the date of midnight, January 1, 1970 UTC as a starting point for all of its calculations.

An Example of Converting a PHP/Unix date to a usable JavaScript date:

So my quandry was that the date I received was written in an unusable format: The date the server sent was similar to 2007-07-22T22:57:35Z - yyyy-mm-ddThh:mm:ssZ, which is the date in ISO 8601 format (see converting ISO 8601 dates in PHP for a completely different take on conversion). I had to convert an ISO 8601 date to a parameter I could use in the Date object constructor

My first thought was to replace the T and Z with spaces, 2007-07-22 22:57:35 , which looks correct, but isn’t.
As we learned above (see Date error example above), date strings much be in the "Month dd, yyyy" format. The yyyy-mm-dd format will not work.

var myStringDate = "2007-07-22T22:57:35Z";
var myStringDate = new Date(myStringDate.replace(/\D/g, " ")) //returns "invalid date".

My second thought was to split the string into parameters.

var myStringDate = "2007-07-22T22:57:35Z";
var myStringDate = myStringDate.replace(/\D/g, " ");
var dObj = myStringDate.split(" ");
          //array is (2007, 07, 22, 22, 57, 35)
var myDate = new Date(dObj[0], dObj[1], dObj[2],
           dObj[3], dObj[4], dObj[5]);

That works, but gives me the wrong date. We have a logic error. The month array starts at 0. month[07] is August, not July. The solution was to subtract 1 from the 2nd parameter

var myStringDate = "2007-07-22T22:57:35Z";
var myStringDate = myStringDate.replace(/\D/g, " ");
var dObj = myStringDate.split(" ");
var myDate = new Date(dObj[0], (dObj[1]-1), dObj[2], dObj[3], dObj[4], dObj[5]);
document.write("Making a date from a string: " + myDate);



Writing Pretty Dates

Javascript 1.2 gave us some prettier ways of writing out dates. Still, you might not find the format you need with the methods provided. Here are some arrays that you should feel free to cut and paste into your code.

dyOfWeek = new Array("Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat");
daysOfWeek = new Array("Sunday", "Monday", "Tuesday", "Wednesday",
             "Thursday", "Friday", "Saturday");
monOfYear = new Array("Jan.", "Feb.", "Mar.", "Apr.", "May", "Jun.",
             "Jul.", "Aug.", "Sep.", "Oct.", "Nov.", "Dec.");
monthsOfYear = new Array("January", "February", "March", "April", "May",
    "June", "July", "August", "September", "October", "November", "December"); 

toLocaleDateString() works for much of what I need. But, sometimes you need something a little different. You can either edit using regular expressions, or you can create a pretty date from scratch.

Here are some formats and how to create them. I will use the date we created, the methods described above and the 4 arrays posted here.

(myTime.getMonth() + 1) + "/" + myTime.getDate() + "/" + myTime.getFullYear()
var hours =  myTime.getHours();
var ampm = (hours > 11)? "PM" : "AM";
hours = hours%12;
hours = (hours == 0)? 12 : hours;
time = hours + ":" + myTime.getMinutes() + " " + ampm;
July 2007
monthsOfYear[myTime.getMonth()] + " " + myTime.getFullYear()

Formatting Javascript Dates:

Want to extend the Date object to be nicely formated? Gavin Kistner did the work for us. Extending the Date Object which creates the a custormFormat for the date object. To use this prototype, include the function in your javascript, and call it this way:

var prettyDate = myDate.customFormat('#DDDD#, #MMM# #D#, #YYYY#');
var prettyTime = myDate.customFormat('#h#:#mm##ampm#');

Here’s the code:

Date.prototype.customFormat=function(formatString){ 
    var YYYY,YY,MMMM,MMM,MM,M,DDDD,DDD,DD,D,hhh,hh,h,mm,m,ss,s,ampm,dMod,th;
    YY = ((YYYY=this.getFullYear())+"").substr(2,2);
    MM = (M=this.getMonth()+1)<10?('0'+M):M;
    MMM = (MMMM=["January","February","March","April","May","June","July","August","September","October","November","December"][M-1]).substr(0,3);
    DD = (D=this.getDate())<10?(’0′+D):D;
    DDD = (DDDD=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"][this.getDay()]).substr(0,3);
    th=(D>=10&&D<=20)?’th’:((dMod=D%10)==1)?’st’:(dMod==2)?’nd’:(dMod==3)?’rd’:'th’;
    formatString = formatString.replace("#YYYY#",YYYY).replace("#YY#",YY).replace("#MMMM#",MMMM).replace("#MMM#",MMM).replace("#MM#",MM).replace("#M#",M).replace("#DDDD#",DDDD).replace("#DDD#",DDD).replace("#DD#",DD).replace("#D#",D).replace("#th#",th);
     h=(hhh=this.getHours());
    if (h==0) h=24;
    if (h>12) h-=12;
    hh = h<10?(’0′+h):h;
    ampm=hhh<12?’am’:'pm’;
    mm=(m=this.getMinutes())<10?(’0′+m):m;
    ss=(s=this.getSeconds())<10?(’0′+s):s;
    return formatString.replace("#hhh#",hhh).replace("#hh#",hh).replace("#h#",h).replace("#mm#",mm).replace("#m#",m).replace("#ss#",ss).replace("#s#",s).replace("#ampm#",ampm);
	 } 
 
 

Website Optimization: YSlow Tutorial July 26, 2007

Filed under: Best Practices, Web Development, firebug — Estelle Weyl @ 6:09 pm

Introduction to YSlow: optimizing your actual and perceived download speed

Two days ago Yahoo! officially released their Firebug extionsion "YSlow". YSlow is a tool that coherently presents factors effecting actual and perceived download speed. Many of the features available thru YSlow are avaible thru the Firebug NET tab, and digging thru other Firebug panes. What makes YSlow such an effective tool is that it displays those features in a understandable and actionable way.

Installing Yahoo! YSlow

YSlow is a page analysis tool that helps you optimize your web pages for better perceived and actualy download speed. YSlow is an extension to Firebug which is a FireFox plug-in (Yes, it’s an extension to an extension). You must download and install Firebug: If you need instructions, I wrote a introduction to Firebug tutorial last month.

To install YSlow, download YSlow from the Mozilla website. Click on the "Install Now" button, then on "Install". You will need to restart Firefox for both the YSlow and the Firebug add-ons to work, so you might as well download and install both before restarting FireFox.

Turning YSlow on

While the YSlow icon will always be present in the right of the status bar, it is not actively running and analying all your page visits all of the time. To get YSlow to always be active, righ click on the word YSlow in the status and choose "Autorun" from the popup menu.

AutoRun: Having YSlow on all the time

You likely don’t want YSlow running all the time. The benefit of having YSlow on autorun is that you:

  1. Total download weight and time (to the right of the YSlow icon in the status bar),
  2. Faster access to YSlow features.

The downside is that having YSlow on all the time

  1. Faster perceived download time
  2. Uses RAM

My recommendation is to only have it on autorun if you are actively working on optimizing; and then turn it off the rest of the time.

Turning YSlow on Selectively

Unless you have selected autorun, you have to activate YSlow by opening up Firebug and clicking on the YSlow Tab, which brings you to a page instructing you how to activate YSlow by selecting which type of analysis you’re interested in. Select Performance, Stats or Component. Selecting from the Tools or Help menu will not analyze your page. For example, if you select JSLine from the Tools menu, you get results for the most recently analyzed page. The Tools drop down menu may actually be greyed out to start.

YSlow Screen Shot.

Using YSlow

YSlow Performance

YSlow gives you a grades for each of 13 areas of download speed plus an over grade with total score. You get graded on the number of HTTP requests made, using expires headers, gzipping files, having CSS at the top, javascript at the bottom, not using CSS expressions, minimizing the number of domains hit for page componenents, minifying javascripts, avoiding redirects, removing duplicate javascript functions, turning off eTags and having static files served from Content Distribution Networks (CDN). I will go over most of these in my blog post on improving perceived and actual download speed. Not included in the list is reducing the number of HTTP requests even further for a home page only by using inpage CSS and JavaScript.

More information: If you don’t get an A on any of the parameters, simply click on the arrow to the right of the parameter, and more information will appear. You can also click on the "expand all" link in the upper right which will expand the sections not earning an A with an explanation of what the failings were. No matter your grade, if you click on the name of the parameter, you will be redirected to the Yahoo Developer Network for details on what the parameter means and how it effects your perceived and/or actual download speed.

Changing Grades: If you don’t like the grading system, you can configure YSlow to weight things differently by altering the javascript file. Search for yslow.js on your computer. Mine was located at c:\documents and settings\estelle\Application Data\Mozilla\Firefox\Profiles\extensions\yslow@yahoo-inc.com\default\preferences\.

YSlow Stats Tab

The Stats tab lets gives provides you with 3 bits of information:

  • Page downloads when Cache is empty
    This includes the number of HTTP requests and file weight of all the HTML, JavaScript, CSS files and images, includeing images called from the CSS, downloaded to render the page. A few things to note about this value: if your page is set as the home page for someone, IE pretends the cache is empty and downloads everything, irrespective of expires headers. If you click on the "(est)" next to a cache parameter, YSlow provides you with an estimate as to how your speed can improve.
  • Page downloads when Cache is full
    This includes only the number of HTTP requests and file weight for the files that do not have a future expires date and are not cached. The total includes thell the HTML, JavaScript, CSS files and images not cached.
  • Cookies

YSlow Components Tab

The Components tab describes in more detail each of the files that make up the sum total in "Page downloads when Cache is empty" described above. For each HTML (or PHP, or whatever the main file is), CSS, JavaScript, CSS image, regular image, etc., YSlow grabs the header information and provides the following in human readable form:

  • File Type
  • File URL
  • Expires header date, if any, or today’s date if not explicitly set
  • Gzip status
  • Server response time
  • Un-g-zipped file size
  • E-Tag

If you want more information, clicking on the magnifying glass next to the URL displays the headers (this is also available thru Firebug’s NET tab). If you click on the actual URL, it will open up that URL — be it an HTML file, a CSS file, an Image — in a new browser window.

YSlow Tools Tab

The Tools tab provides "links" to 4 reports: JSLint, JS, CSS, Printable Version

  • JSLint:
    I am not 100% sure, but I think JSLint explains errors that would need to be rectified before passing your JavaScript file thru Crockford’s JSLint minification tool. For JSLint to work, you have to include components in your Javascript that would otherwise be optional in the loosely typed language, such as ending your lines with a semi-colon. The JSLint response warns you of these necessary edits..
  • JS:
    Prints to the browser all the JavaScript that is included in the currently analyzed page
  • CSS:
    Prints to the browser all the CSS that is included in the currently analyzed page. This is similar to the Firefox Developer Toolbar. I prefer the toolbar version since it has the functionality of allowing you to close out individual CSS sources.
  • Printable Version:
    While this may seem like just a printable version of the performance tab, this page is actually very useful. It delineates all the things you can do to score a 100% on the Performance section of YSlow. It basically explains the performance tab in detail — what you would see if you clicked on the "expand all" link in the performance tab.

Missing Features

Dynamic Downloads not captured:
YSlow isn’t perfect. It does not display properties of elements brought into the page dynamically such as multimedia, javascript rendered images, componenents rendered from XMLHTTPRequests, or any DOM changes. You can use Firebug’s NET tab to garner that data. It seems that YSlow takes a look at the page being analyzed, and does an XMLHTTPRequest to get download time information. Firebug, on the other hand, collects and stores the information for each request. For true web page weight, Firebug is more precise. For actual download time, Firebug is also more precise. For perceived download time, however, YSlow gives you a good estimate.

 
 

XHTML Deprecated Elements and Attributes July 24, 2007

Filed under: Web Development — Estelle Weyl @ 10:31 am

If you’re coding with a strict doctype, you definitely don’t want to use any deprecated attributes or elements. So, what are those deprecated elements and attributes that you shouldn’t use? See below:

Deprecated Elements

Name Description Alternative
applet Java applet
basefont base font size font-size: 100%;
center shorthand for DIV align=center text-align: center;
dir directory list
font local change to font font-family: arial; font-size: 0.8em;
isindex single line prompt
menu menu list
s strike-through text style text-decoration: line-through;
strike strike-through text text-decoration: line-through;
u underlined text style text-decoration: underline;

Deprecated Attributes

Attribute Deprecated in these elements CSS (or HTML) Alternative
align caption, img, input, object, legend, table, hr, div, h1, h2, h3, h4, h5, h6, p CSS attribute: text-align
alink, link, vlink body CSS selectors: a, a:link, a:visited, a:hover, a:active, a:visited:hover

CSS attribute: color:

background body CSS attribute: background-image:
bgcolor table, tr, td, th, body CSS attribute: background-color: or background:
border img, object CSS attribute: border:
clear br CSS attribute: clear: left | right | both | none
compact dl, ol, ul CSS attribute: line-height, min-height or height: with overflow: set.
height td, th CSS attribute: line-height for cell content; don’t use tables for layout
hspace img, object CSS attribute: padding
language script HTML attribute: type

HTML attribute value:
MIME type, ex. type=”text/javascript”

name img, a, applet, form, frame, iframe, map HTML attribute: id
noshade hr
nowrap td, th CSS attribute: white-space:
size hr CSS attribute: width: or margin:
start ol Anyone know? Please tell me.
target a Anyone know? Please tell me.
See http://krijnhoetmer.nl/stuff/html/strict-doctype-target/
text body CSS attribute: color
type li, ol, ul CSS attribute: list-style-type
value li Anyone know? Please tell me.
version html HTML Markup: use a DTD
vspace img, object CSS attribute: padding: or margin:
width hr, td, th, pre CSS attribute: width: