07.07.06

Ruby Tutorials for TextMate hackers, part 3

Posted in TextMate, ruby/rails at 4:04 pm by Haris

In the previous tutorial we saw how to load some basic libraries and interact with the user using those. That post was not so much about Ruby as it was about TextMate. In this post we return to talking about Ruby, in particular some of its methods for manipulating strings. Along the way, we’ll see how to use the txmt: scheme.

Moving About the Place

We’ll start by implementing an extremely simple and useless command, before we proceed to more specialized topics. This command will simply take us to the beginning of whatever document in current. In order to do that, we’ll use the txmt: scheme. The txmt scheme is similar to the http:, mailto: and file: schemes, with one key difference: TextMate is the one handling it. Right now this scheme supports exactly one operation: To tell TextMate to open a particular file and to optionally place the caret at a particular line and column. The following line would do that:

txmt://open?url=file://pathtofile&line=5&column=3

This will open the file prescribed by pathtofile, and place the caret at the line 5 and column 3. If the url part is omitted, then it operates on the current file. So in our case, we would need to trigger the scheme:

txmt://open?line=1&column=1

To see that this works, just click on this link, and you should be taken to the beginning of the file that you have currently open in TextMate.

Okay, now the question is how to trigger this. Here a shell command comes in handy. It is called open, and it just opens whatever it is being fed with whatever application is supposed to handle it. To see how this works, open Terminal.app and type the following command, followed by return:

open "txmt://open?line=1&column=1"

The quotes are not strictly speaking necessary here, but they don’t hurt, and they would come in handy if there where spaces somewhere inside them.

So we have a shell command that could do our bidding, but how do we use it from within Ruby in TextMate? Well this is what backticks can do for us. Create a new command with input nothing, output to discard and with text:

#!/usr/bin/env ruby
`open "txmt://open?line=1&column=1"`

The backticks tell Ruby: Run the command inside them as if it was in the shell. And so it does! Give it a try.

Remember when we said that all things in Ruby have a return value? The same applies here. The backticks return whatever the command would have output if you were to run it form a terminal. For instance, if you run in Ruby the following:

d = `date`

Then d will be a string containing something like: Fri Jul 7 18:20:57 CDT 2006.

Scan Me!

Now that we know how to tell TextMate to move the caret to a particular location in the current file, let’s try to create a slightly more clever command. This command does the following: It looks in the current line for the first occurence of something of the form [n], where n is an integer. It then proceeds to locate the first occurance of that [n] in the text, and to move the caret there. If it doesn’t find a [n] in the current line, it shows a tooltip explaining its failure.

Ok, let’s do this one step at a time. We’ll first make sure that we get to much the right thing from the current line. Let’s set the input to the command as “Selection or Line”, and the output to “Show as Tool Tip”. Before we see the correct code, we’ll see how to get some feedback from Ruby as to the values of various things. The way I like to do that is to use the function , pp which stands for “pretty-print”. To use it you need to load the file that it is in. So here is an example of using it to find out what the scan methods for string objects does:

#!/usr/bin/env ruby
require 'pp'
line = STDIN.read
matches = line.scan(/\[\d+\]/)
pp matches

Let’s review this command. First require 'pp' loads the stuff necessary to use the pp command. Then, STDIN.read reads the current line and stores it in the line variable. We then call the scan method on line. The scan method tells its string to scan itself for all appearances of its argument, and then create a list of all those and return that. The argument can be either a string to search for, or a regular expression. Here we are using a regular expression, looking for a bracket (\[) followed by one or more numbers (\d+), followed by a closing bracket (\]). Finally, we are pretty-printing the matches array.

Try to run this command with a cursor on various lines, with or without things like [234], [1] and so on, and see the output. You’ll see things like: [], ["[234]","[1]"] and so on. These are arrays, the first one being empty, the second one having two elements and so on. Just to get a better understanding, try replacing the regular expression with this one: /(\[)(\d+)(\])/.

So here is a command that looks at the first match if there is one:

#!/usr/bin/env ruby
matches = STDIN.read.scan(/\[\d+\]/)
unless matches.empty? then
  print matches[0]
else
  print "No matches found in current line"
end

There are two new things here. The one is matches.empty? which returns true if the matches array is empty and false otherwise. The other is the matches[0] method, which returns the first entry in the array. So the message you should see is either the second print statement if there was no match or the first match if there was one.

Taking the Global View

Remember our original goal. We wanted to first find the number in the current line, and then to locate where that number shows up for the first time in the text. In order to locate where the number shows up, we need to have access to the entire file. So change the input to “Entire Document”. Of course now we have to manually locate the line that the caret is on. Luckily TextMate makes that easier for us. The variable we want here is TM_LINE_NUMBER. Here is a command that would print out the current line, given as input the entire document:

#!/usr/bin/env ruby
text = STDIN.read
line_no = ENV['TM_LINE_NUMBER'].to_i
print text.split("\n")[line_no-1]

ENV['TM_LINE_NUMBER'].to_i looks at the value of the environment variable, and converts it to an integer (to_i), since it is originally a string. Then text.split("\n")[line_no-1] splits the text along newlines, and returns the line_no-1‘th element of the resulting array. The -1 is there because Ruby counts lines starting at 0, while TextMate counts the lines starting at 1.

Ok, now we are ready for the entire command. Here it is:

#!/usr/bin/env ruby
require ENV['TM_SUPPORT_PATH'] + '/lib/exit_codes.rb'
text = STDIN.read
line_no = ENV['TM_LINE_NUMBER'].to_i
line = text.split("\n")[line_no-1]
matches = line.scan(/\[\d+\]/)
TextMate.exit_show_tool_tip "No matches found!" if matches.empty?
location = text.index(matches[0])
text_before = text.slice(0..location)
lines = text_before.split("\n")
row = lines.length
column = lines.last.length
link = "txmt://open?line=#{row}&column=#{column}"
`open "#{link}"`

Set its input to the “Entire Document” and output to “Discard”. Let’s go through the new stuff. There are a couple of things we haven’t seen before. The first one is text.index(matches[0]). The index command accepts as an argument either a string or a regular expression, and it returns the index, standing from 0, where the first match occurs, or nil if there was no match. For instance "abc".index("b") will return 1. So in our case what this does is treat the entire document as one big string, and find the first place where our string (the one that we got from looking at /\[\d+\]/) matches.

The next line is text_before = text.slice(0..location). 0..location stands for the range of entries from the beginning to location, and slice tells it to copy part of text and return it. So text_before contains the text up to the point where the string we were looking for matched. We will use this information to locate the line and column number where we want to end up. We first split this text to get an array of all the lines involved. The lines.length call returns the number of lines, which is the row number we want. Then, lines.last returns the last element in the array. This is the actual text of the line we want to end up at, up to the point we want to be at. We call length on that string, to return us how many elements the string has. One thing you should know is that this will not count properly for general unicode characters. We can work around that, but that’s for another day. Finally, we create the link string, and call open on it.

Until next time

Well, that’s it for now. Here are some exercises to keep you going until next time:

  1. Create a command that asks the user to type in a word. If the word has less than five characters, then exit. Otherwise, find all locations in the file where the word appears, and show an HTML window with a list of txmt links to all these words.
  2. Create a command that finds all numbers in the current line and adds them up, showing the answer as a tool tip.
  3. Write a command that finds all words in the current and computes their number and the average of their lengths.
  4. Write a command that uses the command line tool ls to get a list of all files in the current directory, offer a pop-up for the user to pick one of them, and use txmt to open that file.
  5. Modify the command we created to just exit without calling open in the case where the new location is where we actually are.

Leave a Comment

macrobid more drug side effects buy neurontin fosamax lawsuits effects of fluoxetine order tamiflu buy meridia online effexor overdose minocycline hcl paxil overdose potatoes not prozac temazepam tablets adipex no rx side effects of lamisil drug elavil heroin chic metformin oral flomax erection butalbital apap impotence monopril flextra medicationflomax diazepam without a prescription generic aciphex meclizine drug what is flonase levaquin oral aldara side effects phentermine diet pill medroxyprogesterone acetate online pharmacy vaniqa fluconazole online macrobid oral fosamax generic propecia prices paxil side affects methamphetamine arrests fluconazole pregnancy naprosyn oral nexium more drug side effects cephalexin oxazepam drug information ramipril lawyer pantoprazole formulation aciphex rebate buy levitra antivert side effects ortho cyclen viagra no prescription generic for norvasc premarin alternatives buy remeron antibiotic penicillin altace side effects xanax for sale protonix side effects vicoprofen online allegra and aciphex interaction phentermine 375 mg drug aciphex fluconazole and dangerous nexium oral mescaline cactus shooting flexeril buy phendimetrazine online buying vicodin drug tamoxifen doxazosin buy vicodin what is seroquel buy proscar keppra to treat depression famvir dosage buy synthroid without prescription marion jones steroids serevent steroid prozac side effect ortho molecular products atenolol reviews no prescription needed adipex lavorazione hashish in marocco what is sertraline discount tenuate what is tricor vicoprofen without perscriptionvioxx generic propecia sertraline oral what is cephalexin keflex no prescription where to buy steroids buy oxycontin without a prescription tramadol hcl acetaminophen viagra price ditropan alternatives ambien withdrawl soma buy levitra price buy acyclovir drug crystal methamphetamine premarin generic oxycontin abuse buy lexapro online prescription soma triphasil tabs online meds fioricet fioricet oral generic plavix vioxx lawyer nexium alternative buy tamiflu online fulvicin price paroxetine suicidal pepcid buy buy levitra online tamiflu from canadatamoxifen seroquel oral levoxyl and weightloss celebrex 200mg cialis without prescription risedronate 35mg glyburide side effects actos diabetes sildenafil cheap generic valacyclovir online fioricet effects prozac weight gain lorcet without rx mircette birth control pills buy ambien without a prescription tenuate dospan watson generic zocor anabolic steroids buy what is metoprolol prilosec informationprinivil clonazepam overdose meridia order buy cyclessa buy fosamax methamphetamine recipe imitrex oral buy anabolic steroids protopic children mircette without a prescription from us pharmacy history of phencyclidine what is microzide used forminocycline xanax without a prescription online pharmacy fioricet buy xanax on line alternative to fulvicin cheap renova without a prescription temazepam 15 mg tobradex sales oxycodone addiction flexeril drug carisoprodol online pharmacy what is the price for prinivil xanax oral tamiflu medication antabuse online triphasil rohypnol drug alternative to metrogel buy ultracet without prescription what is macrobid used for vicodin cod altace ramipril antabuse side effects cialis comparison levitra elavil medicine vicodin high famvir pregnancy new dilantin didrex atlanta steroids and sports nardil online pharmacy best price viagra tadalafil coupon norvasc side effects ativan data synthroid more drug side effects buy didrex tadalafil online acetaminophen discovery of penicillin soma watson tylenol codeine plendil blood pressure medicine prednisone withdrawal synthroid oral macrobid doses sertraline hcl naprosyn side effects promethazine buy tazorac potency pravachol bontril aceon oxycodone side effects tamiflu buy drug valium phentermine cheap tamoxifen breast cancer compazine and side effects glyburide interaction zithromax pregnancy evista concerns cheap flonase hyzaar generic cyclobenzaprine effects nasacort aq nasal spray levothroid weight loss tadalafil overnightt finasteride cheap nifedipine xr buy rabeprazole buying sibutramine making mdma tadalafil price captopril side effects online pharmacy sibutramine buspar medicine valtrex side effects zovirax cost high testosterone meridia price lexapro dosage steroids side effects buy vicodin without a prescription online pharmacy no prescription proscar phentermine prescription online esgic genericesomeprazole meridia weight loss actos side effects oxycodone pills testosterone booster valtrex price generic prilosec lortab abuse buy adipex online order hydrocodone what is elocon dog pepcid ac or zantac ranitidine drug viagra cialis levitra propecia pharmacy phencyclidine picture generic sarafemselsun blue famvir vs valtrex snorting zoloft vaniqa medicine buy tenuate without a prescription generic vicoprofen phentermine prescription treating vicodin withdrawl cipro side effects in women ultracet online alternative celebrex generic xenical methylprednisolone tablets genarit norvasc prilosec 20mg vicodin pictures starting klonopin prilosec online ambien overnight delivery generic vicodin biaxin problem tadalafil 20mg steroids online is ultram a narcotic buy viagra alternative miacalcin more drug uses flomax caps side effectsflonase definition prozac vicodin buy online buy nasacort oxycontin addiction hyzaar medication buy ramipril on line without prescriptionranitidine biaxin nexium histex 10mg dilantin buy lorazepam keppra weight gain diclofenac buy xenical otc albuterol advair inhaler online pharmacy flonase fioricet tablets tricor generic mononitrate tylenol during pregnancy omeprazole oral buy detrol child taking lisinopril tylenol pregnancy ativan complication lortab cod cheap k-dur tamiflu relenza famvir oral paroxetine withdrawlpatanol nizoral hair loss buy fulvicin flovent inhaler nicotrol inhalers lortab side effects antabuse drug zyprexa withdrawal nordette levora tadalafil generic provigil more drug uses cheap generic viagra barry bonds steroids viagra samples buy hydrocodone online flexeril generic fluconazole overnight delivery buy diazepam without prescription buy evista propecia prescriptions antibiotic macrobid online pharmacy sildenafil generic lipitor ionamin pills prempro without a prescription buy valporicvaltrex order xanax online vaniqa buy what is rabeprazole sodium paxil stopping is naisads in motrin cefixime xenical no prescription toprol medication buy lorazepam online serevent discus viagra online uk premarin withdrawal aldara zocor generic tamiflu require prescription oxycontin side effects natural testosterone temovate buy ultravate drug omeprazole overdose lortab no prescription needed oxycodone pictures ibuprofen buyimitrex omeprazole generic ecstasy pills proscar propecia smoke flexeril premarin creme clomid buy veterinary fulvicin metrogel topical gel fioricet generic qualitest drug spironolactone amoxycillin evista side affectsevoxac adipex online prescription approved online tramadol pharmacy what is k dur tabletsk-dur order hydrocodone online bupropion cheap paxil hydrocodone picture dosage of pravachol trazodone and pregnancytretinoin prednisone dosage adderall metformin and weight loss proscar forum orlistat xenical serevent lawsuit order ultram order phentermine online sarafem 10mg temazepam cap prescription adderall xr increase effects of oxazepam vaniqa lowest price rabeprazole buy generic sildenafil cheapest sibutramine levitra and cialis and viagra free generic levitra morphine generation cheap valium gemfibrozil buyghb zoloft side effects nardil on line generic serevent tamsulosin hydrochloride evoxac more drug uses plavix medicine mdma for salemeclizine xenical without prescription serzone withdrawal side effects of clomid what is ic butalbital paroxetine 20 mg synthroid without a prescription amaryl diabetic medication hydrocodone cod what is toprol trimox picture valtrex cheap aricept side effects soma prescriptions diovan buy vicodin generic allegra prescription uses for temovate medicinetenuate lorazepam withdrawal clomid side effects famvir coupons rohypnol pictures zestril oral is ativan addictive seroquel abuse cheap zithromax online valium no prescription pictures of mescaline penicillin allergy online tramadol phentermine side effects dangers famvir medication pictures what is terazosin viagra generic lortab online isosorbide buy isosorbide mononitrate oral zithromax antibiotic norvasc overdose how does didrex work tamoxifen citrate free nicotrol inhalernifedipine pharmacy usa lipitorlisinopril nardil parnate premarin side effects testosterone gel nexium price k-dur transdermal patchkeflex alcohol and prozac avodart flomax lortab addiction tretinoin for genital warts how to make heroin adderall prices dovonex what is folic acid propecia reviews order norco online buy spironolactone no prescriptionsteroids buy preven buy xanax using paypal augmentin online pharmacy prempro trial cheapest phentermine prices what is pcp clonidine side effects cheap generic levitra onlinelevothroid clarinex compared to claritin rosiglitazone actions what is folic acid for buy soma online protonix more for patients prilosec coupons buy serzonesibutramine side effects when taking gemfibrozil effexor drug side effects stopping prozac vicodin sleepiness buy atorvastatin buy generic triphasil what is atenolol zithromax online aciphex costs buy ketamine online propecia testimonials buy injectable anabolic steroids xanax 2mg order tamiflu without prescription hydrocodone buy relafen drug kenalog shots wellbutrin withdrawal symptoms history of steroids buying valium online pravachol drug interactions buy fioricet w codeine side effects flomax sumatriptan from mexico cardura fabric esomeprazole magnesium uses of penicillin renova buy clonazepam fedex renova without prescription promethazine pill lotrel low pulse rate tadalafil cialis from india lortab without prescription side effects of diazepam buy adderall pills cyanocobalamin buy ultram withdrawal tamsulosin hcl propoxyphene apap serevent inhaler what does oxycodone look like sarafem canada flexeril online soma medication didrex side effects zyban buy provigil 200mg tab generic dovonex what is nexium buy valtrex alprazolam xr what is finasteride generic nasonex metformin dosage lasix without a prescriptionlescol diflucan adderall withdrawal generic premarin no prescription generic valtrex buy cheap generic nordette transderm pioglitazone hydrochloride accupril buy reactions to amoxycillin medication nexium protopic and vitiligo monopril side effects skelaxin side effect hydrocodone lortab generic zoloft proscar and pregnancy purchase xanax online order xenical seroquel buy fluconazole side effects about sertraline discount phentermine overnight fedex wellbutrin withdrawal proscar without prescription roxicet pill fosamax buyfulvicin valtrex girl oxazepam abuse carisoprodol online soma generic sibutramine adipex without prescription methylphenidate side effects ultram drug manufacturer of prinivil buy triamterene online glucophage and weight loss zovirax more drug uses vicodin withdrawlsvicoprofen relafen medication metrogel vaginal celebrex celecoxib phendimetrazine side effects adderall buy alprazolam online fedex mircette more drug side effects nasacort nasal spray order famvir ortho tri-cyclen side effects of keppra buy sibutramine meridia litigations minocycline without prescription generic xanax avandia drug alesse side effects cheap vermox online trazodone hcl tadalafil cod valium on line buy ketamine trazodone and clonazepam buy prinivilproctocort buspirone abuse accolate buy detrol and relief discovery penicillin tylenol with codeine canadaultracet xanax generic propoxyphene abuse lortab information buy zanaflex online buy depakote without a prescription antivert drug purchase phentermine online generic avapro lipitor muscle problems neurontin gabapentin miralax for children purchase fioricet online buy ultracet online no prescription patanol canada keflex oral celexa online pharmacy xanax no prescription clomid and pregnancy oxycontin for sale alternative viagra trazodone dosage buy tenuate dospan bontril no script kenalog lotion buy benicar avapro interactions buy macrobid without prescription metrogel side effects valium dosage what is flextra seroquel and alcohol what is levaquin generic for evista medicines what is famvir cardura buy generic ultram overdose roxicet erection viagra ibuprofen side effects what is nifedipine celecoxib alternative phencyclidine drugs low dose naltrexone prilosec nexium toprol information nifedipine cream order zithromax online what is supraxsymmetrel lorcet no prescription cyclobenzaprine 10mg side effects of lotrel prozac more drug uses side effects of ultram cipro no prescription purchase meridiamescaline yasmin buy no prescription ionamin lanoxin side effects sildenafil 100mg nasonex no rx what is trazodone valium online generic for altace overnight xanax online pharmacy tramadol propranolol hydrochloride cheap ultram online cheapest viagra online prescription tamiflu lotrisone more drug uses lipitor side effect lotensin dosage facts on ecstasy xanax xr estradiol levels cheap nasonex cyanocobalamin levoxyl and weight loss online prescription for adipex buy levaquin what is sibutramine zyban information buy tramadol side effects of propranolol purchase vicodin online phendimetrazine pills evista more drug interactions fioricet and pregnancy valtrex during pregnancy fioricet medication meridia side effects withdrawal symptoms of prednisone buy ambien buy naprosyn xanax valium buy proctocort alcon patanol nizoral pills toprol medicine valtrex and pregnancy nexium side effect cozaar cough vicodin addiction flomax tamsulosin canada order soma online mescaline dosage and effectsmetformin online pharmacy ceftin drug metoprololmetrogel what is plavix clopidogrel buy what is ritalin xanax abuse buy generic allegra fexofenadine cheap zithromaxzocor morphine sulphate didrex no prescription needed adipex review who discovered ionamin neurontin lawsuit ceftin side effects heroin overdose side effects of naprosyn adipex without rx zocor side affects ultram prescription gemfibrozil more drug uses adipex alternatives what is soma order phendimetrazine buy viagra on line promethazine codeine buspirone hydrochloride soma bicycles horse steroids pantoprazole label carton zanaflex dosage didrex drug discount zocorzoloft roxicet oral cialis levitra sale viagra side effects of ramipril ultram pain medication metformin more drug side effects side effects of miacalcin generic levoxyl purchase soma online elocon ointment adipex side effects brain purchase sildenafil citrate buy amoxil vioxx news norvasc side effect pravastatin side effects actonel buy ranitidine buyrelafen buy furosemide without a prescription miacalcin cause pancreatitis medication butalbital how to make mdma buy phentermine without prescription prevacid pregnancy prednisone tablets verapamil side effects serzone claims fluoxetine and pregnancy where to buy tramadol osteonecrosis and fosamax enalapril side effects buy zovirax without prescription how to use steroids lorazepam dosage prozac nation what is microzide fluconazole and natural medicine lamisil forums buy retin a online viagra for women what is azmacort tetracycline online lexapro more drug interactionslipitor buy generic sertraline buy wellbutrin premarin no prescription loratadine overdoselorazepam cheapest propecia discount xanax what is thiamine mononitratemonopril pantoprazole side effects what is zovirax bontril online pharmacy lexapro and weight gain medrol dosepack advair diprolene generic ramipril oral serzone increased energy premarin vaginal cream what is tobradextoprol tadalafil tablets skelaxin drug renova without a perscription what is risperdal patanol opht cozaar side effects buspirone hcl dangers of steroids nasonex nasal spray description triphasil acyclovir valacycovir on line phentermine tadalafil comprar retin a melanexmeridia what is estradiol plendil incontinence soma pharmacy buy sildenafil citrate cyclobenzaprine flexeril what is protonix steroids pictures cheap nexium tylenol biaxin reaction ritalin adhd nexium without prescriptionnicotine nordette and no prescription and thailand evista generic valium vicodin oral nexium pill phentermine pill imitrex coupons cheap celebrex online chemical name for suprax buy tussionex without prescription norco bike norco wolverine what is glyburide ritalin alternatives fluoxetine 20mg flonase nasal spray child paxil buy meridia on line buy zestrilziac risperdal overdoseritalin lotrisone lotion skelaxin medication purchase finasteride canadafioricet skelaxin dosage thiamine mononitrate formula tramadol on line side effects of flomax acyclovir aura soma furosemide prescription oxycodone overdose prozac information ketamine effects what is methylphenidatemethylprednisolone aciphex rabeprazole paxil lawsuit what is restoril buy prozac flexeril more drug side effects order tramadol online metrogel vaginal cream snorting zanaflex alabama psilocybin mexican steroids sertraline hydrochloride child overdose lisinopril what is oxycontin purchase tetracycline without prescriptiontiazac coreg tamsulosin hcl lanoxin digoxin thiamin mononitrate fioricet line purchase viagra online phentermine adipex temovate cream snorting flexeril propranolol side effects medicine fluconazole purchase acyclovir online tiazac diltiazem buy ambien overnight rabeprazole drug depression provigil tenuate tablet lexapro and pregnancy bontril diet pills buy eunlose lipitor interaction tadalafil cialis viagra prices increase testosterone buy hydrocodone cod generic tobradex history of anabolic steroids effects of prozac tenuate discount phendimetrazine 35mg flextra pregnancy lortab description smoking klonopin hydrochlorothiazide and pregnancy ultram cash on delivery buying vicodin online yellow xanax bars birth control nordette generic lamisil cheap soma glipizide side effects drug altace retin a wrinkles symmetrel abusesynalar phendimetrazine online paxil pregnancy transderm buy xenical side effects loratadine buy buy adderall without a prescription buy cheap fioricet ghb drug adderall online plavix news lexapro withdrawal symptoms symmetrel buy effexor side effects propranolol anxiety cozaar 50mg serevent law proscar side effects order sibutramine sumatriptan succinat information on tramadol tamiflu no prescription needed cream verapamil prilosec side affects what are steroids children motrin buy generic valium online cheap zyban fosamax warning zocor more drug side effects synalar nasal buy ziaczithromax terazosin drug buy tamiflu mexico rabeprazole sodium ultracet with aspirin triphasil without prescription lipitor prescription side effects valtrex online purchase steroids make ghb furosemide water pillsgemfibrozil esomeprazole magnesium in mexico mircette online cialis levitra vardenafil kidney infection macrobid zyban no prescription active ingredients in adipex fioricet prescription hives motrin allergy paxil quitting medrol side effects clonazepam cod medrol for dogs compazine drug tretinoin mexico athletes and steroids cheapest meridia xenical diet pill nizoral shampoo fosamax patent expiration what is norvasc vermox buy levaquin tablet phencyclidine impurities serevent buyseroquel propoxyphene darvocet order fioricet online buy ativan with overnight delivery effects of lipitor free singulair medicine nexium prescription hydrocodone side effects buy acyclovir hyzaar buy what is triamterene diclofenac 75mg soma online augmentin side effects buy zovirax buspar paxil ionamin phentermine macrobid pregnancy wellbutrin no prescription ultram online pharmacy intravenous pantoprazole guidelines buy mdma acyclovir dosage drug test vicodin atrovent nortriptyline for chronic pain avandia dosage pravachol side effects order vermox online protonix more drug interactions flonase during pregnancy aldactone withdrawal lorazepam alcohol withdrawal generic tamsulosin phenergan vomiting neurontin addiction buy generic propecia picture of valacyclovir levitra 20mg zovirax pills prednisone without a prescription actonel patient reviews minocycline hydrochloride synthroid lawsuittadalafil vicodin drug test protopic side effects biaxin breastfeeding terazosin oral diazepam overnight norco online valporic diltiazem buy norvasc problems diethylpropion 25mg kenalog in orabase diovan generic cialis lawyer columbus levaquin 500mg buy patanol buy flonase online premarin without a prescription lamisil cream buy relenza sumycin buy oxycodone buyoxycontin tramadol abuse adderall and pregnancy orlistat over the counter buy generic viagra temazepam more drug side effects nortriptyline side effects premarin buy online uk kenalog cream generic nexium xanax ambien hydrocodone buy bupropion side effects of tramadol lotrel generic pictures of hydrocodone flumadine prescribing information actonel generic pure mdma marijuana pics lasix oral side effects of sertraline norco bigfoot buy zithromax without prescription lipidos orlistat preven ca capsules buy orlistat furosemide buy side effects of flonase coreg 25mg buy amaryl prozac buy online levitra versus cialis no prescription lorazepam prevacid generic ethinyl estradiol what is spironolactone buy premarin online best price pioglitazone estradiol cream durg flomax viagra for woman information what is propoxyphene meclizine tablets what is premarin suprax cefixime isosorbide side effectspotassium k dur online avandia side effect ambien online without prescription vicodin effects order levitra buy roxicet no prescription needed flextra ds medication cialis tadalafil buy tamsulosin paxil side effects info on miacalcinmicrozide india generic tadalafil evista and breast cancer adipex tenuate paroxetine withdrawal symptoms hydrocodone bitartrate tobradex lawsuit actonel jaw bone buy xalatan on line pharmacy fioricet with codeine folic acid symptoms viagra sales skelaxin generic ultracet pain pill renova cream hydrocodone and pregnancyhyzaar discount xenical alprazolam tablets miacalcin side effects zestril without prescription description of lorazepam ultram oral morphine effects buy alphagan trazodone for sleep sildenafil citrate soft tabs sumatriptan mexico imitrex prilosec online coupon premarin estradiol alternatives to viagra baby motrin famvir 500mg terbinafine and pregnancy adipex no prescription ibuprofen and pregnancy spironolactone cream psilocybin spores acetaminophen overdose flomax medicine levoxyl more drug uses buy finasteride online relenza online alprazolam zoloft carisoprodol no prescription vicodin withdrawal symptoms drug side effects norvasc ketamine overdose buy renova without a prescription snorting clonazepam lanoxin buy tadalafil soft tabs phenergan side effects levitra with lotrel side effects of butalbital what is propranolol cyclobenzaprine used for miacalcin nasal spray side effects anabolic steroids extracting propoxyphene what is hydrocodone hydrocodone overnight furosemide medication didrex pharmacy online side effects of glyburide xanax prescription online atenolol 50mg alprazolam dogs fosamax lawsuit methylphenidate abuse side effects of naproxen buy mescaline nexium ingredient buy generic vicodin how to make mescaline phendimetrazine without prescription vicodin and pregnancy celebrex and dosage cyclobenzaprine side effects what is symmetrel organizacion eventos actos ultravate ointment lorcet plus zyprexa overdose elocon cream premarin buy online side effects of actos aciphex rebates what is provigil ultram online fioricet ingredients cheap tramadol melanex creme noviderm ativan addition anger and keppra withdrawal from sarafem buy phendimetrazine cheap buy transderm scope klonopin high weight loss while on lexapro snorting celexa steroids and baseball vaniqa discount snorting cyclobenzaprine ramipril in mexico fioricet with codine wellbutrin abuse what is flovent how keppra works zyrtec allergy medicine finasteride side effects fosamax drug buy captopril cheapest india viagra discount online vicodin withdrawl marijuana plants cialis comparison levitra viagra alendronate tabs nexium prilosec biaxin generic viagra discount retail propranolol hcl what is diazepam synthroid tabs buy sertraline effects of phencyclidine levoxyl generic doxazosin mesylate meclizine 25 mg adipex online eunlose order phendimetrazine online furosemide diet clarinex vs claritin sumatriptan diabetes pcp effects buy paroxetine glyburide oral tramadol without prescription drugs oxycodone serzone lawsuits what is zyloprim phendimetrazine prescription generic oxycontin phentermine pills buy xanax overnight buy fioricet suprax antibiotic tadalafil cheaptamiflu where can i buy amphetamine tamsulosin hydrochloride and viagra best price for didrex amaryl purchase buy vicodin on line diltiazem hcl what is skelaxin lamisil side effects albuterol side effects buy hydrocodone where seroquel lawsuit lotensin without prescription snorting adderall effects skelaxin drug information plavix side effects detrol side effects what is propoxyphene with apappropranolol marijuana pipes ritalin abuse buspar serzone side efforts generic ritalin nicotrol buy acetaminophen an