Punjabi – 1. Gurmukhi – 3. Consonants

The first three Gurmukhi letters (ੳ, ਅ, ੲ) are merely vowel holders, of which you've learnt all the forms in the previous lesson.

Rows 2-6 are arranged by tongue position, and the letters therein by manner of pronunciation as follows: 1. Unvoiced and unaspirated. 2. Unvoiced and aspirated. 3. Voiced and unaspirated. 4. Voiced and aspirated. 5. Nasalised. The fourth one is pronounced as the first one with the following vowel getting a low tone when occuring as an initial, otherwise it is pronounced as the third one with the preceding vowel getting a high tone. ਹ (haahaa) is only "ha" as an initial, and elsewhere, it gives the preceding vowel a high tone.

Gurmukhi has two consonants (ਹ and ਰ) that have subscript versions. When written below the script, they mute the previous vowel. On the computer, you type ੍ (ਹਲਂਤ) (hala~ta) before these.

ੱ (ਅੱਧਕ) (addhaka) geminates the following consonant.

Row 1:
ੳ (ਊੜਾ)vowel holder (uur.aa)
ਅ (ਐੜਾ)vowel holder (aer.aa)
ੲ (ਈੜੀ)vowel holder (iir.ii)
ਸ (ਸੱਸਾ)sa (sassaa)
ਹ (ਹਾਹਾ)ha (haahaa)

Row 2 (velars):
ਕ (ਕੱਕਾ)ka (kakkaa)
ਖ (ਖੱਖਾ)kha (khakkhaa)
ਗ (ਗੱਗਾ)ga (gaggaa)
ਘ (ਘੱਗਾ)gha (ghaggaa)
ਙ (ਙੰਙਾ)nga (nga~nngaa)

Row 3 (palatals):
ਚ (ਚੱਚਾ)ca (caccaa)
ਛ (ਛੱਛਾ)cha (chacchaa)
ਜ (ਜੱਜਾ)ja (jajjaa)
ਝ (ਝੱਜਾ)jha (jhajjaa)
ਞ (ਞੰਞਾ)nya (nya~nnyaa)

Row 4 (retroflexes):
ਟ (ਟੈਂਕਾ)t.a (t.ae~kaa)
ਠ (ਠੱਠਾ)t.ha (t.hatt.haa)
ਡ (ਡੱਡਾ)d.a (d.add.aa)
ਢ (ਢੱਡਾ)d.h (d.hadd.aa)
ਣ (ਣਾਣਾ)n.a (n.ann.aa)

Row 5 (dentals):
ਤ (ਤੱਤਾ)ta (t̪attaa)
ਥ (ਥੱਥਾ)tha (thatthaa)
ਦ (ਦੱਦਾ)da (daddaa)
ਧ (ਧੱਦਾ)dha (dhaddaa)
ਨ (ਨੱਨਾ)na (nannaa)

Row 6 (bilabials):
ਪ (ਪੱਪਾ)pa (pappaa)
ਫ (ਫੱਫਾ)pha (phapphaa)
ਬ (ਬੱਬਾ)ba (babbaa)
ਭ (ਭੱਬਾ)bha (bhabbaa)
ਮ (ਮੱਮਾ)ma (mammaa)

Row 7:
ਯ (ਯੱਯਾ)ya (yayyaa)
ਰ (ਰਾਰਾ)ra (raaraa)
ਲ (ਲੱਲਾ)la (lallaa)
ਵ (ਵੱਵਾ)va (vavvaa)
ੜ (ੜਾੜਾ)r.a (r.aar.aa)

Row 8 (foreign sounds):
ਸ਼ (ਸੱਸੇ ਪੈਰ ਬਿੰਦੀ)sha (sassee paera bi~dii)
ਖ਼ (ਖੱਖੇ ਪੈਰ ਬਿੰਦੀ)k.ha (khakkhee paera bi~dii)
ਗ਼ (ਗੱਗੇ ਪੈਰ ਬਿੰਦੀ)g.a (gaggee paera bi~dii)
ਜ਼ (ਜੱਜੇ ਪੈਰ ਬਿੰਦੀ)za (jajjee paera bi~dii)
ਫ਼ (ਫੱਫੇ ਪੈਰ ਬਿੰਦੀ)fa (phapphee paera bi~dii)
ਲ਼ (ਲੱਲੇ ਪੈਰ ਬਿੰਦੀ)l.a (lallee paera bi~dii)

Punjabi – 1. Gurmukhi – 2. Vowels

Gurmukhi has five pairs of two vowels. These pairs look and sound similar. Furthermore, each vowel has two forms. The dependent form attaches to a consonant, and it looks much like a diacritic. A consonant has a default unwritten vowel of "a", although it's not pronounced at the end of a word, so "a" has no dependent form. The independent form is used at the start of a word or after another vowel.

ਂ (ਬਿੰਦੀ) (bi~dii) and ੰ (ਟਿੱਪੀ) (t.ippii) are two diacritics, which both mark nasalisation. The latter is used whenever the space is unobtruded enough for it to be used - namely, the first, third, fifth, and sixth dependent vowels; and the first and third independent vowels.

Here are the dependent forms:
◌ (ਮੁਕਤਾ)a (mukataa)
ਾ (ਕੰਨਾ)aa (ka~naa)
ਿ (ਸਿਹਾਰੀ)i (sihaarii)
ੀ (ਬਿਹਾਰੀ)ii (bihaarii)
ੁ (ਔਂਕੜ)u (au~kar.a)
ੂ (ਦੁਲੈਂਕੜ)uu (dulae~kar.a)
ੇ (ਲਾਂਵ)ee (laa~va)
ੈ (ਦੁਲਾਵਾਂ)ae (dulaavaa~)
ੋ (ਹੋੜਾ)oo (hoor.aa)
ੌ (ਕਨੌੜਾ)au (kanaur.aa)

Here are the independent forms:
ਅ (ਮੁਕਤਾ)a (mukataa)
ਆ (ਕੰਨਾ)aa (ka~naa)
ਇ (ਸਿਹਾਰੀ)i (sihaarii)
ਈ (ਬਿਹਾਰੀ)ii (bihaarii)
ਉ (ਔਂਕੜ)u (au~kar.a)
ਊ (ਦੁਲੈਂਕੜ)uu (dulae~kar.a)
ਏ (ਲਾਂਵ)ee (laa~va)
ਐ (ਦੁਲਾਵਾਂ)ae (dulaavaa~)
ਓ (ਹੋੜਾ)oo (hoor.aa)
ਔ (ਕਨੌੜਾ)au (kanaur.aa)

Punjabi – 1. Gurmukhi – 1. Introduction

Gurmukhi is an abugida, where a consonant-vowel pair is written using the character for that consonant and optionally a vowel modifier. Here I have compiled the romanisation notes, which, if you follow, you will be on your way to pronouncing Punjabi perfectly, although there are a few things we will cover later.

  • "h" is pronounced in a slightly turbulent way.
  • A "h" marks a preceding consonant as aspirated, as "th" in "Thailand".
  • "c" is pronounced as "ch", for romanisation convenience.
  • "ny" is pronounced with your tongue fully against your palate.
  • A "." marks a preceding consonant as retroflex, i.e. pronounced with your tongue curled up. In two exceptions, it represents the Gurmukhi foreign-sound marker, namely, "k.h", which is pronounced as "ch" in "loch", and "g.", which is the "g" version of the former.
  • The two "r" sounds are flaps, and the one without a dot can optionally be trilled.
  • "v" is between "v" and "w".
  • A duplicate letter indicates gemination, as the difference between "unaimed" and "unnamed".
  • "a" is "a" as in "about".
  • "aa" is "a" as in "car".
  • "i" is "i" as in "it".
  • "ii" is "i" as in "litre".
  • "u" is "u" as in "put".
  • "uu" is "oo" as in "boot".
  • "ee" is "e" as in "sell" but elongated.
  • "ae" is "a" as in "cat" but elongated.
  • "oo" is "o" as in "not" but elongated.
  • "au" is "aw" as in "dawn".
  • "~" marks the preceding vowel as nasalised.
  • "'" separates consecutive consonants or consecutive vowels.
Punjabi keyboard
To install the Punjabi keyboard on Windows, go to the language settings and add the Punjabi keyboard, and on Linux, run "sudo apt-get install ibus-m17n". The Punjabi keyboard will take a short while to learn. View this chart here. Note how the nasals are all at the bottom, the rows of consonants are in fact columns, the vowels are all on the top left, and how "ਕ" conveniently coincides with "k".

CJKV Wiktionary Entry Generator

As a Wiktionarian with over 15,000 edits, let me give you a bit of advice: Never create a Wiktionary entry without a generator! Luckily for yall, I've made one over a few days. It supports the CJKV languages, and generates nouns (which you can replace with another headword template if necessary). You only need to enter the parameters you need. Changelog: 2017: Wrote this tool in JavaScript.
  • "=" delimits etymologies.
  • "_" is a variable that holds the previous-etymology value of a parameter.
  • ";" delimits alternative headwords (i.e. alternative spellings) and additional categories.
  • For hiragana, ";" precedes sound-changed hiragana, ":" precedes historical hiragana, and "|" separates readings.
  • Pitch accent can be between 0-9 and can be followed by references (d = Daijirin, n = NHK).
  • For etymology, enter one of the following: 1. "ltc" for Middle Chinese. 2. The components for a compound etymology, where ";" precedes transcription, ":" precedes translation, and "|" separates components. 3. "cする" for the conjunctive form of a verb.
Pitch accent:

Other stuff:
Use the following wikicode on English entries in the Citations namespace:

Unofficial vBulletin Conversation Backup


This isn't available for demonstration. The source code follows.
Feel free to use this - goshawngo@hotmail.com
This can backup a conversation.
Some notes:
+As a quick alternative to this script, if you're part of a conversation, you can get the full list of VMs by typing some VM for the conversation and then clicking "Go Advanced" - all the VMs will be on the page. Or, if you're viewing a conversation, you can add "&pp=50" to the url to increase VMs to 50 per page (maximum).
+I haven't tested this script on deleted VMs, they may cause the script to chuck an error.
+The data is stored as a multidimensional array in $data_array - if you're just simply backing up, then I recommend to just JSON_encode (it's better than serialize) it and put it in a file.
This is where the vbulletin forum is, for example, 'http://forums.sega.com/' (don't forget the trailing slash).
This is the timezone for reading the formatted timestamps (which have a timezone difference) and converting them into UNIX timestamps (which don't). See http://us1.php.net/manual/en/timezones.php
'converse' is to backup a conversation between two people,
'member' is to backup all vms on one person's page.
>u AND u2
When using converse, specify the two users you want the conversation from.
When using member, specify the user you want all of the vms from (vms sent to that user, that is).
PLEASE NOTE! You cannot user a normal username, you need a user NUMBER.

header('Content-Type: text/plain');

exit('Expecting parameter forum');

$_GET['timezone'] = 'Australia/Sydney';

if($_GET['mode'] == 'converse' || !$_GET['mode']){
if(!$_GET['u'])exit('Expecting parameter u');
if(!$_GET['u2'])exit('Expecting parameter u2');
$formattedurl = $_GET['forum'].'converse.php?pp=50&u='.$_GET['u'].'&u2='.$_GET['u2'];

if($_GET['mode'] == 'member'){
if(!$_GET['u'])exit('Expecting parameter u');
$formattedurl = $_GET['forum'].'member.php?'.$_GET['u'];


function getElementById($area, $id){
$xpath = new DOMXPath($area);
return $xpath->query("//*[@id='$id']")->item(0);

function getElementsByClassName($area, $ClassName) {
$Elements = $area->getElementsByTagName("*");
for($i=0;$i<$Elements->length;$i++){if(in_array($ClassName, explode(' ', $Elements->item($i)->attributes->getNamedItem('class')->nodeValue)))$Matched[]=$Elements->item($i);}
return $Matched;

function innerHTML($el) {
$doc = new DOMDocument();
$doc->appendChild($doc->importNode($el, TRUE));
$html = trim($doc->saveHTML());
$tag = $el->nodeName;
return preg_replace('@^<' . $tag . '[^>]*>|$@', '', $html);


$doc = new DOMDocument();
$htm = file_get_contents($formattedurl);

if(stripos($htm, 'vBulletin Message')!==false) exit ('Permissions error');



$classes = getElementsByClassName($doc,'first_last');
$classes = $classes[0]->firstChild;
$regexp = preg_match('/page=(?:[0-9]*)/', $classes->getAttribute('href'), $maxpages);
$maxpages = substr($maxpages[0],5);



$doc = new DOMDocument();
$htm = file_get_contents($formattedurl.'&page='.$n);

if(stripos($htm, 'vBulletin Message')!==false) exit ('Permissions error');


$curpage = getElementById($doc, 'message_list')->getElementsByTagName('li');

foreach($curpage as $message){

$textnode = $message->getElementsByTagName('blockquote')->item(0);
$text = trim(innerHTML($textnode));

$usernode = getElementsByClassName($message, 'username');
$username = innerHTML($usernode[0]);
$regexp = preg_match('/member\.php\?(?:[0-9]*)/', $usernode[0]->getAttribute('href'), $userid);
$userid = substr($userid[0],11);

date_default_timezone_set($_GET['timezone']); //Set the proper timezone of the timestamps being read
$datetimenode = getElementsByClassName($message, 'postdate');
$datetime = trim(innerHTML($datetimenode[0]));
$datetime = str_replace('','',str_replace('','',$datetime));
$datetime = str_replace('Today',date("m-d-y"),$datetime);
$datetime = str_replace('Yesterday',date("m-d-y",time()-86400),$datetime);
$datetime = str_replace('-','/',$datetime); //This is so strtotime reads it properly as a MONTH/DAY/YEAR
$timestamp = strtotime($datetime);

$vmnumber = substr($message->getAttribute('id'),9);

$data_array[] = array('vmnumber' => $vmnumber, 'username' => $username, 'userid' => $userid, 'text' => $text, 'timestamp' => $timestamp);




Type Writer

I realize that this creates overly complex and dirty coding where there would be simpler options available instead (setInterval and array iteration), but it was just a hastily hashed up tool. Changelog: 8th June 2017: Simplified UI. Removed stupid obfuscation from source code. Redirected output from console log to textarea. 2012: Wrote this tool in JavaScript.
Text: Element ID (useless): Start delay (1000 = one second): Delay per step (1000 = one second): Characters per step (0 = words):


Text Overlay

Text overlay tool
Welcome to the text overlay tool, no, this is not just another strikethrough tool with so limited freedom, this is an anything tool!

In the text field enter your text.
In the code field enter a number from the code chart given below. Hint: 54 is strikethrough.
You may then choose to prepend a space or/and append a space to your text with the checkboxes if you want, this is used to slightly alter the overlay affect to overlay the entire text (These are checked by default).
There is an optional field where you can enter a custom character, voiding any input in the code number field.
Finally, hit overlay and take your text! 😀
Here is the chart (Note: Some symbols will display as boxes if you don't have the necessary fonts):
0: ̀Èx̀àm̀p̀l̀è
1: ́Éx́áḿṕĺé
2: ̂Êx̂âm̂p̂l̂ê
3: ̃Ẽx̃ãm̃p̃l̃ẽ
4: ̄Ēx̄ām̄p̄l̄ē
5: ̅E̅x̅a̅m̅p̅l̅e̅
6: ̆Ĕx̆ăm̆p̆l̆ĕ
7: ̇Ėẋȧṁṗl̇ė
8: ̈Ëẍäm̈p̈l̈ë
9: ̉Ẻx̉ảm̉p̉l̉ẻ
10: ̊E̊x̊åm̊p̊l̊e̊
11: ̋E̋x̋a̋m̋p̋l̋e̋
12: ̌Ěx̌ǎm̌p̌ľě
13: ̍E̍x̍a̍m̍p̍l̍e̍
14: ̎E̎x̎a̎m̎p̎l̎e̎
15: ̏Ȅx̏ȁm̏p̏l̏ȅ
16: ̐E̐x̐a̐m̐p̐l̐e̐
17: ̑Ȇx̑ȃm̑p̑l̑ȇ
18: ̒E̒x̒a̒m̒p̒l̒e̒
19: ̓E̓x̓a̓m̓p̓l̓e̓
20: ̔E̔x̔a̔m̔p̔l̔e̔
21: ̕E̕x̕a̕m̕p̕l̕e̕
22: ̖E̖x̖a̖m̖p̖l̖e̖
23: ̗E̗x̗a̗m̗p̗l̗e̗
24: ̘E̘x̘a̘m̘p̘l̘e̘
25: ̙E̙x̙a̙m̙p̙l̙e̙
26: ̚E̚x̚a̚m̚p̚l̚e̚
27: ̛E̛x̛a̛m̛p̛l̛e̛
28: ̜E̜x̜a̜m̜p̜l̜e̜
29: ̝E̝x̝a̝m̝p̝l̝e̝
30: ̞E̞x̞a̞m̞p̞l̞e̞
31: ̟E̟x̟a̟m̟p̟l̟e̟
32: ̠E̠x̠a̠m̠p̠l̠e̠
33: ̡E̡x̡a̡m̡p̡l̡e̡
34: ̢E̢x̢a̢m̢p̢l̢e̢
35: ̣Ẹx̣ạṃp̣ḷẹ
36: ̤E̤x̤a̤m̤p̤l̤e̤
37: ̥E̥x̥ḁm̥p̥l̥e̥
38: ̦E̦x̦a̦m̦p̦l̦e̦
39: ̧Ȩx̧a̧m̧p̧ļȩ
40: ̨Ęx̨ąm̨p̨l̨ę
41: ̩E̩x̩a̩m̩p̩l̩e̩
42: ̪E̪x̪a̪m̪p̪l̪e̪
43: ̫E̫x̫a̫m̫p̫l̫e̫
44: ̬E̬x̬a̬m̬p̬l̬e̬
45: ̭Ḙx̭a̭m̭p̭ḽḙ
46: ̮E̮x̮a̮m̮p̮l̮e̮
47: ̯E̯x̯a̯m̯p̯l̯e̯
48: ̰Ḛx̰a̰m̰p̰l̰ḛ
49: ̱E̱x̱a̱m̱p̱ḻe̱
50: ̲E̲x̲a̲m̲p̲l̲e̲
51: ̳E̳x̳a̳m̳p̳l̳e̳
52: ̴E̴x̴a̴m̴p̴l̴e̴
53: ̵E̵x̵a̵m̵p̵l̵e̵
54: ̶E̶x̶a̶m̶p̶l̶e̶
55: ̷E̷x̷a̷m̷p̷l̷e̷
56: ̸E̸x̸a̸m̸p̸l̸e̸
57: ̹E̹x̹a̹m̹p̹l̹e̹
58: ̺E̺x̺a̺m̺p̺l̺e̺
59: ̻E̻x̻a̻m̻p̻l̻e̻
60: ̼E̼x̼a̼m̼p̼l̼e̼
61: ̽E̽x̽a̽m̽p̽l̽e̽
62: ̾E̾x̾a̾m̾p̾l̾e̾
63: ̿E̿x̿a̿m̿p̿l̿e̿
64: ̀Èx̀àm̀p̀l̀è
65: ́Éx́áḿṕĺé
66: ͂E͂x͂a͂m͂p͂l͂e͂
67: ̓E̓x̓a̓m̓p̓l̓e̓
68: ̈́Ë́ẍ́ä́m̈́p̈́l̈́ë́
69: ͅEͅxͅaͅmͅpͅlͅeͅ
70: ͆E͆x͆a͆m͆p͆l͆e͆
71: ͇E͇x͇a͇m͇p͇l͇e͇
72: ͈E͈x͈a͈m͈p͈l͈e͈
73: ͉E͉x͉a͉m͉p͉l͉e͉
74: ͊E͊x͊a͊m͊p͊l͊e͊
75: ͋E͋x͋a͋m͋p͋l͋e͋
76: ͌E͌x͌a͌m͌p͌l͌e͌
77: ͍E͍x͍a͍m͍p͍l͍e͍
78: ͎E͎x͎a͎m͎p͎l͎e͎
79: ͏E͏x͏a͏m͏p͏l͏e͏
80: ͐E͐x͐a͐m͐p͐l͐e͐
81: ͑E͑x͑a͑m͑p͑l͑e͑
82: ͒E͒x͒a͒m͒p͒l͒e͒
83: ͓E͓x͓a͓m͓p͓l͓e͓
84: ͔E͔x͔a͔m͔p͔l͔e͔
85: ͕E͕x͕a͕m͕p͕l͕e͕
86: ͖E͖x͖a͖m͖p͖l͖e͖
87: ͗E͗x͗a͗m͗p͗l͗e͗
88: ͘E͘x͘a͘m͘p͘l͘e͘
89: ͙E͙x͙a͙m͙p͙l͙e͙
90: ͚E͚x͚a͚m͚p͚l͚e͚
91: ͛E͛x͛a͛m͛p͛l͛e͛
92: ͜E͜x͜a͜m͜p͜l͜e͜
93: ͝E͝x͝a͝m͝p͝l͝e͝
94: ͞E͞x͞a͞m͞p͞l͞e͞
95: ͟E͟x͟a͟m͟p͟l͟e͟
96: ͠E͠x͠a͠m͠p͠l͠e͠
97: ͡E͡x͡a͡m͡p͡l͡e͡
98: ͢E͢x͢a͢m͢p͢l͢e͢
99: ͣEͣxͣaͣmͣpͣlͣeͣ
100: ͤEͤxͤaͤmͤpͤlͤeͤ
101: ͥEͥxͥaͥmͥpͥlͥeͥ
102: ͦEͦxͦaͦmͦpͦlͦeͦ
103: ͧEͧxͧaͧmͧpͧlͧeͧ
104: ͨEͨxͨaͨmͨpͨlͨeͨ
105: ͩEͩxͩaͩmͩpͩlͩeͩ
106: ͪEͪxͪaͪmͪpͪlͪeͪ
107: ͫEͫxͫaͫmͫpͫlͫeͫ
108: ͬEͬxͬaͬmͬpͬlͬeͬ
109: ͭEͭxͭaͭmͭpͭlͭeͭ
110: ͮEͮxͮaͮmͮpͮlͮeͮ
111: ͯEͯxͯaͯmͯpͯlͯeͯ
112: ᷀E᷀x᷀a᷀m᷀p᷀l᷀e᷀
113: ᷁E᷁x᷁a᷁m᷁p᷁l᷁e᷁
114: ᷂E᷂x᷂a᷂m᷂p᷂l᷂e᷂
115: ᷃E᷃x᷃a᷃m᷃p᷃l᷃e᷃
116: ᷄E᷄x᷄a᷄m᷄p᷄l᷄e᷄
117: ᷅E᷅x᷅a᷅m᷅p᷅l᷅e᷅
118: ᷆E᷆x᷆a᷆m᷆p᷆l᷆e᷆
119: ᷇E᷇x᷇a᷇m᷇p᷇l᷇e᷇
120: ᷈E᷈x᷈a᷈m᷈p᷈l᷈e᷈
121: ᷉E᷉x᷉a᷉m᷉p᷉l᷉e᷉
122: ᷊E᷊x᷊a᷊m᷊p᷊l᷊e᷊
123: ᷋E᷋x᷋a᷋m᷋p᷋l᷋e᷋
124: ᷌E᷌x᷌a᷌m᷌p᷌l᷌e᷌
125: ᷍E᷍x᷍a᷍m᷍p᷍l᷍e᷍
126: ᷎E᷎x᷎a᷎m᷎p᷎l᷎e᷎
127: ᷏E᷏x᷏a᷏m᷏p᷏l᷏e᷏
128: ᷐E᷐x᷐a᷐m᷐p᷐l᷐e᷐
129: ᷑E᷑x᷑a᷑m᷑p᷑l᷑e᷑
130: ᷒E᷒x᷒a᷒m᷒p᷒l᷒e᷒
131: ᷓEᷓxᷓaᷓmᷓpᷓlᷓeᷓ
132: ᷔEᷔxᷔaᷔmᷔpᷔlᷔeᷔ
133: ᷕEᷕxᷕaᷕmᷕpᷕlᷕeᷕ
134: ᷖEᷖxᷖaᷖmᷖpᷖlᷖeᷖ
135: ᷗEᷗxᷗaᷗmᷗpᷗlᷗeᷗ
136: ᷘEᷘxᷘaᷘmᷘpᷘlᷘeᷘ
137: ᷙEᷙxᷙaᷙmᷙpᷙlᷙeᷙ
138: ᷚEᷚxᷚaᷚmᷚpᷚlᷚeᷚ
139: ᷛEᷛxᷛaᷛmᷛpᷛlᷛeᷛ
140: ᷜEᷜxᷜaᷜmᷜpᷜlᷜeᷜ
141: ᷝEᷝxᷝaᷝmᷝpᷝlᷝeᷝ
142: ᷞEᷞxᷞaᷞmᷞpᷞlᷞeᷞ
143: ᷟEᷟxᷟaᷟmᷟpᷟlᷟeᷟ
144: ᷠEᷠxᷠaᷠmᷠpᷠlᷠeᷠ
145: ᷡEᷡxᷡaᷡmᷡpᷡlᷡeᷡ
146: ᷢEᷢxᷢaᷢmᷢpᷢlᷢeᷢ
147: ᷣEᷣxᷣaᷣmᷣpᷣlᷣeᷣ
148: ᷤEᷤxᷤaᷤmᷤpᷤlᷤeᷤ
149: ᷥEᷥxᷥaᷥmᷥpᷥlᷥeᷥ
150: ᷦEᷦxᷦaᷦmᷦpᷦlᷦeᷦ
151: ᷼E᷼x᷼a᷼m᷼p᷼l᷼e᷼
152: ᷽E᷽x᷽a᷽m᷽p᷽l᷽e᷽
153: ᷾E᷾x᷾a᷾m᷾p᷾l᷾e᷾
154: ᷿E᷿x᷿a᷿m᷿p᷿l᷿e᷿
155: ⃐E⃐x⃐a⃐m⃐p⃐l⃐e⃐
156: ⃑E⃑x⃑a⃑m⃑p⃑l⃑e⃑
157: ⃒E⃒x⃒a⃒m⃒p⃒l⃒e⃒
158: ⃓E⃓x⃓a⃓m⃓p⃓l⃓e⃓
159: ⃔E⃔x⃔a⃔m⃔p⃔l⃔e⃔
160: ⃕E⃕x⃕a⃕m⃕p⃕l⃕e⃕
161: ⃖E⃖x⃖a⃖m⃖p⃖l⃖e⃖
162: ⃗E⃗x⃗a⃗m⃗p⃗l⃗e⃗
163: ⃘E⃘x⃘a⃘m⃘p⃘l⃘e⃘
164: ⃙E⃙x⃙a⃙m⃙p⃙l⃙e⃙
165: ⃚E⃚x⃚a⃚m⃚p⃚l⃚e⃚
166: ⃛E⃛x⃛a⃛m⃛p⃛l⃛e⃛
167: ⃜E⃜x⃜a⃜m⃜p⃜l⃜e⃜
168: ⃝E⃝x⃝a⃝m⃝p⃝l⃝e⃝
169: ⃞E⃞x⃞a⃞m⃞p⃞l⃞e⃞
170: ⃟E⃟x⃟a⃟m⃟p⃟l⃟e⃟
171: ⃠E⃠x⃠a⃠m⃠p⃠l⃠e⃠
172: ⃡E⃡x⃡a⃡m⃡p⃡l⃡e⃡
173: ⃢E⃢x⃢a⃢m⃢p⃢l⃢e⃢
174: ⃣E⃣x⃣a⃣m⃣p⃣l⃣e⃣
175: ⃤E⃤x⃤a⃤m⃤p⃤l⃤e⃤
176: ⃥E⃥x⃥a⃥m⃥p⃥l⃥e⃥
177: ⃦E⃦x⃦a⃦m⃦p⃦l⃦e⃦
178: ⃧E⃧x⃧a⃧m⃧p⃧l⃧e⃧
179: ⃨E⃨x⃨a⃨m⃨p⃨l⃨e⃨
180: ⃩E⃩x⃩a⃩m⃩p⃩l⃩e⃩
181: ⃪E⃪x⃪a⃪m⃪p⃪l⃪e⃪
182: ⃫E⃫x⃫a⃫m⃫p⃫l⃫e⃫
183: ⃬E⃬x⃬a⃬m⃬p⃬l⃬e⃬
184: ⃭E⃭x⃭a⃭m⃭p⃭l⃭e⃭
185: ⃮E⃮x⃮a⃮m⃮p⃮l⃮e⃮
186: ⃯E⃯x⃯a⃯m⃯p⃯l⃯e⃯
187: ⃰E⃰x⃰a⃰m⃰p⃰l⃰e⃰
188: ︠E︠x︠a︠m︠p︠l︠e︠
189: ︡E︡x︡a︡m︡p︡l︡e︡
190: ︢E︢x︢a︢m︢p︢l︢e︢
191: ︣E︣x︣a︣m︣p︣l︣e︣
192: ︤E︤x︤a︤m︤p︤l︤e︤
193: ︥E︥x︥a︥m︥p︥l︥e︥
194: ︦E︦x︦a︦m︦p︦l︦e︦

See Wikipedia for a more in-depth explanaton.

Recent Changes
29th May 2017: Converted to JavaScript.
2012: Wrote this tool in PHP.

SVG Test

This is a test for representing unencoded Han characters using the SVG specification. Ruby characters have been added. This is not intended seriously, but rather, just for fun.
きつね こん こんこえす。

Size Shifter

Minimum size 1: Maximum size 1: Shift size: Shift method: Font: Color: B I U Sub Sup

Miscellaneous options: Remove size=1 Remove size=2 Remove size=3 Remove size=4 Remove size=5 Remove size=6 Remove size=7 New line to <br>


Welcome to the size shifter tool, this is a unique tool designed for shifting the size of text in a vast variety of ways resulting in neat effects.

To start off, what this tool pretty much does is change the size of each character in text, play around with it for a bit and see what you can do! First enter your text in the text box provided, then below there are the "Minimum" and "Maximum" fields, let's assume you are using the increase mode, the text size will start at "Minimum" and increase, then stop just before "Maximum", and then repeat that until the end of the text (NOTE: Your minimum size cannot equal or be greater than your maximum size (how do you count UP from 4 to 1 ;)), otherwise the values will be interpreted as their default.). If you really want, you can even change the shift size (step) from the default "1". There are more shift modes available too:
Increase: means the size increments from "Minimum size" to "Maximum size" (e.g. 2,3,4 where "Minimum size" is 2 and "Maximum size" is 5)
Decrease: means the size decrements from "Maximum size" to "Minimum size" (e.g. 5,4,3 where "Minimum size" is 2 and "Maximum size" is 5)
Increase/Decrease max inclusive: Does exactly the same except the ending size is included (e.g. in the first example using this mode would result in 2,3,4,5)

You can add multiple shift modes to form your own customized size shifting loop, as an example using Increase in first shift mode and then Decrease in a second shift mode (to add more shift modes just click "Add Action", likewise remove it with "Remove Action") will create a mountain effect. Try out different types of combos for different effects, you are given 50 available actions in one of your customized size shift loops, and you can ask me if you'd like to increase the limit.

You also have the options of affecting an action with font (OS-dependent), colour (http://www.colorpicker.com), bold, italics, underline, subscript, or superscript. The miscellaneous options allow you to remove size tags of a certain number, this is useful as a shortcut for selectively omitting the effects of size shifting (note that you can also do this with the default increase, which is not max inclusive) or for cleaning up the markup of the default text size (2 for BBCode, 3 for HTML). You can use the newline to
option in the case you need it for your HTM, this doesn't affect BBCode.

Here is an explanation of the buttons that this tool uses:
  • Add action: Adds an action. You can have up to 50.
  • Remove action: Removes an action.
  • Reset form: Resets the form.
  • Save: One-click save. Whenever you add an action, your state will automatically be saved, the tool relies on this to preserve your settings when you add. For this reason, I recommend using the custom save feature, where your save will not be overwritten by this..
  • Restore: One-click restore.
  • Custom save: Save with a custom name.
  • Custom restore: Restore a custom save by name.
  • Custom backup: Backup a custom save by name as text.
  • Custom delete: Delete a custom save by name.
  • Custom savelist: View the list of custom saves.
  • Backup saves as text: Backup all saves as text.
  • Load saves from text: Restore a backup from either "Custom backup" or "Backup saves as text". Here are some example presets (copy the text after the space after the colon after the name until the comma or fullstop): 1to7withitalics: min2:3;fieldcount:4;mode4:1;max2:5;min3:3;i2:true;max4:2;max1:2;mode3:1;max3:5;i4:true;, wavy: sup6:true;inc4:1;fieldcount:7;max5:4;max2:3;mode4:1;sup5:true;inc3:1;mode2:1;max4:3;mode7:1;max1:3;max6:4;max7:3;mode6:1;max3:3;, noparse: min2:1;col1:111111;fieldcount:2;min1:1;mode1:2;mode2:3;.
  • Clear all saves: Deletes all savedata with confirmation beforehand.
  • Hard reset!: Combination of "Reset form" and "Clear all saves", with confirmation beforehand.
  • Size shift!: Submits the form! 😀
+9th June 2017: Bugfix (fixed the backup saves as text loop to ignore irrelevant entries in localStorage, restoring its functionality). Bugfix (prevented an empty item from being created in localStorage when loading saves from text due to how str.split() works).
+8th June 2017: Simplified UI. Renamed remove() function to removeAction(), fixing a conflict in modern browsers which have a ChildNode.remove() function which was removing the button itself, lol.
+31st May 2017: Ported to JavaScript. Here is the PHP version:
+Numerous improvements: Hard reset button added, various useful miscellaneous options added (size omittance and newline to <br>).
+Added function: You can now reset the form with the "reset" button.
+Bugfix and features: A bug with different types of newlines has been fixed, and you can now backup just one save if you want to which is useful as a way of "bookmarking" your favourite patterns, or sharing patterns you think others might like.
+Changes and additions: The method used to view custom saves no longer clunks up your savedata and a much more suitable method for storing custom saves has been introduced. This also allows for the new "custom delete" function which can delete just one custom save if you want to
+Minor tweaks: You can now view the list of custom saves you have, and a confirmation is needed whenever you want to clear all save data.
+Further Improvements: You can now backup your savedata as text locally should you need to. This can come in handy when you have a lot of saves to manage, or even if you want to share your cool patterns with others.
+Improved feature: On top of the 1-click save/restore, you can now have multiple saves at the same time with custom names, an option to delete all saves has also been added.
+Multiple additions: Bold, italic, underline, subscript, superscript, and color fields have been added, as well as a cleaning mechanism to reduce some of the clunk in the output.
+New feature: Fonts are now added as an optional parameter allowing you countless more possibilities and crazy combos!
+Small Tweak: The save system now only saves where it is necessary meaning when a value in the form is the default value it won't save, this should lighten the load on the size of the save stored and improve performance immensely. Don't worry, everything still works just like it used to 🙂
+Features and upgrades: There is now a "save state" system which can save your current settings in the tool to your browser ready to be restored later, various bugs involving values resetting when adding or removing have now been fixed completely and a little panel has been designed for your administration of the tool.
+New feature: You can now adjust the increments (on a per-action basis too!), before you were forced with an one increment always.
+MAJOR REDESIGN: You are no longer required to choose from preset combinations, the tool is now completely dynamic and you are in complete control of what goes on!
+2012: Wrote this tool in PHP.

PHP Date Constants

Here are all the PHP date constants, so you can simply format your timestamp in various ways.
DATE_ATOM => 2017-06-24T22:16:03+00:00
DATE_COOKIE => Saturday, 24-Jun-2017 22:16:03 UTC
DATE_ISO8601 => 2017-06-24T22:16:03+0000
DATE_RFC822 => Sat, 24 Jun 17 22:16:03 +0000
DATE_RFC850 => Saturday, 24-Jun-17 22:16:03 UTC
DATE_RFC1036 => Sat, 24 Jun 17 22:16:03 +0000
DATE_RFC1123 => Sat, 24 Jun 2017 22:16:03 +0000
DATE_RFC2822 => Sat, 24 Jun 2017 22:16:03 +0000
DATE_RFC3339 => 2017-06-24T22:16:03+00:00
DATE_RSS => Sat, 24 Jun 2017 22:16:03 +0000
DATE_W3C => 2017-06-24T22:16:03+00:00