Initial commit.
Hakyll site, generates bib from bibtex.
This commit is contained in:
		
						commit
						405604d03e
					
				
							
								
								
									
										82
									
								
								HakyllBibTex.hs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										82
									
								
								HakyllBibTex.hs
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,82 @@
 | 
			
		||||
-- JH: From hakyll-bibtex by jaspervdj, using the Pandoc parser.
 | 
			
		||||
--------------------------------------------------------------------------------
 | 
			
		||||
{-# LANGUAGE DeriveDataTypeable         #-}
 | 
			
		||||
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
 | 
			
		||||
module HakyllBibTex
 | 
			
		||||
    ( BibEntry (..)
 | 
			
		||||
    , bibEntryContext
 | 
			
		||||
    , BibFile (..)
 | 
			
		||||
    , bibFileEntryNames
 | 
			
		||||
    , parseBibFile
 | 
			
		||||
    , lookupBibEntry
 | 
			
		||||
    ) where
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
--------------------------------------------------------------------------------
 | 
			
		||||
import           Control.Applicative
 | 
			
		||||
import           Data.Binary              (Binary (..))
 | 
			
		||||
import           Data.Typeable            (Typeable)
 | 
			
		||||
import           Hakyll
 | 
			
		||||
import qualified Text.CSL.Input.Bibtex    as B
 | 
			
		||||
import qualified Text.Pandoc              as Pandoc
 | 
			
		||||
import qualified Text.Parsec              as Parsec
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
--------------------------------------------------------------------------------
 | 
			
		||||
newtype BibEntry = BibEntry B.Item
 | 
			
		||||
    deriving (Typeable)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
--------------------------------------------------------------------------------
 | 
			
		||||
instance Binary BibEntry where
 | 
			
		||||
    put (BibEntry t) = do
 | 
			
		||||
        put $ B.entryType t
 | 
			
		||||
        put $ B.identifier t
 | 
			
		||||
        put $ B.fields t
 | 
			
		||||
 | 
			
		||||
    get = BibEntry <$> (B.Item <$> get <*> get <*> get)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
--------------------------------------------------------------------------------
 | 
			
		||||
bibEntryContext :: Context BibEntry
 | 
			
		||||
bibEntryContext = Context $ \key _ item ->
 | 
			
		||||
    let BibEntry t = itemBody item
 | 
			
		||||
    in case key of
 | 
			
		||||
        "identifier" -> return $ StringField $ B.identifier t
 | 
			
		||||
        _            -> case lookup key (B.fields t) of
 | 
			
		||||
            Nothing  -> empty
 | 
			
		||||
            Just val -> return $ StringField $ latexToHtml val
 | 
			
		||||
  where
 | 
			
		||||
    -- Renders latex to HTML, but don't wrap everything in a <p>...
 | 
			
		||||
    latexToHtml tex =
 | 
			
		||||
        let p = case Pandoc.readLaTeX Pandoc.def tex of
 | 
			
		||||
                    Pandoc.Pandoc meta [Pandoc.Para para] ->
 | 
			
		||||
                        Pandoc.Pandoc meta [Pandoc.Plain para]
 | 
			
		||||
                    x                                     -> x
 | 
			
		||||
        in Pandoc.writeHtmlString Pandoc.def p
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
--------------------------------------------------------------------------------
 | 
			
		||||
newtype BibFile = BibFile [BibEntry]
 | 
			
		||||
    deriving (Binary, Typeable)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
--------------------------------------------------------------------------------
 | 
			
		||||
bibFileEntryNames :: BibFile -> [String]
 | 
			
		||||
bibFileEntryNames (BibFile es) = [B.identifier t | BibEntry t <- es]
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
--------------------------------------------------------------------------------
 | 
			
		||||
parseBibFile :: String -> BibFile
 | 
			
		||||
parseBibFile string = case Parsec.runParser (B.bibEntries <* Parsec.eof)
 | 
			
		||||
                           [] "<bib file>" string of
 | 
			
		||||
    Left err -> error $ show err
 | 
			
		||||
    Right xs -> BibFile $ map BibEntry (B.resolveCrossRefs True xs)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
--------------------------------------------------------------------------------
 | 
			
		||||
lookupBibEntry :: String -> BibFile -> BibEntry
 | 
			
		||||
lookupBibEntry name (BibFile es) =
 | 
			
		||||
    case [BibEntry t | BibEntry t <- es, B.identifier t == name] of
 | 
			
		||||
        []      -> error $ name ++ " not found in BibFile"
 | 
			
		||||
        (x : _) -> x
 | 
			
		||||
							
								
								
									
										324
									
								
								Text/CSL/Input/Bibtex.hs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										324
									
								
								Text/CSL/Input/Bibtex.hs
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,324 @@
 | 
			
		||||
{-# OPTIONS_GHC -fno-warn-unused-do-bind #-}
 | 
			
		||||
-----------------------------------------------------------------------------
 | 
			
		||||
-- |
 | 
			
		||||
-- Module      :  Text.CSL.Input.Bibtex
 | 
			
		||||
-- Copyright   :  (c) John MacFarlane
 | 
			
		||||
-- License     :  BSD-style (see LICENSE)
 | 
			
		||||
--
 | 
			
		||||
-- Maintainer  :  John MacFarlane <fiddlosopher@gmail.com>
 | 
			
		||||
-- Stability   :  unstable-- Portability :  unportable
 | 
			
		||||
--
 | 
			
		||||
-- Modified    :  JH: Use just the bibtex parser
 | 
			
		||||
-----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
module Text.CSL.Input.Bibtex
 | 
			
		||||
    (
 | 
			
		||||
      bibEntries
 | 
			
		||||
    , resolveCrossRefs
 | 
			
		||||
    , Item(..)
 | 
			
		||||
    )
 | 
			
		||||
    where
 | 
			
		||||
 | 
			
		||||
import Text.Parsec hiding (optional, (<|>), many, State)
 | 
			
		||||
import Control.Applicative
 | 
			
		||||
import Text.Pandoc
 | 
			
		||||
import Data.List.Split (splitOn, splitWhen, wordsBy)
 | 
			
		||||
import Data.List (intercalate)
 | 
			
		||||
import Data.Maybe
 | 
			
		||||
import Data.Char (toLower, isUpper, toUpper, isDigit, isAlphaNum)
 | 
			
		||||
import Control.Monad
 | 
			
		||||
import Control.Monad.RWS
 | 
			
		||||
import System.Environment (getEnvironment)
 | 
			
		||||
import Text.CSL.Style (Formatted(..), Locale(..), CslTerm(..), Agent(..))
 | 
			
		||||
import qualified Text.Pandoc.Walk as Walk
 | 
			
		||||
import qualified Text.Pandoc.UTF8 as UTF8
 | 
			
		||||
 | 
			
		||||
data Item = Item{ identifier :: String
 | 
			
		||||
                , entryType  :: String
 | 
			
		||||
                , fields     :: [(String, String)]
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
type BibParser = Parsec [Char] [(String, String)]
 | 
			
		||||
 | 
			
		||||
bibEntries :: BibParser [Item]
 | 
			
		||||
bibEntries = many (try (skipMany nonEntry >> bibItem)) <* skipMany nonEntry
 | 
			
		||||
  where nonEntry = bibSkip <|> bibComment <|> bibPreamble <|> bibString
 | 
			
		||||
 | 
			
		||||
bibSkip :: BibParser ()
 | 
			
		||||
bibSkip = skipMany1 (satisfy (/='@'))
 | 
			
		||||
 | 
			
		||||
bibComment :: BibParser ()
 | 
			
		||||
bibComment = try $ do
 | 
			
		||||
  char '@'
 | 
			
		||||
  cistring "comment"
 | 
			
		||||
  skipMany (satisfy (/='\n'))
 | 
			
		||||
 | 
			
		||||
bibPreamble :: BibParser ()
 | 
			
		||||
bibPreamble = try $ do
 | 
			
		||||
  char '@'
 | 
			
		||||
  cistring "preamble"
 | 
			
		||||
  spaces
 | 
			
		||||
  void inBraces
 | 
			
		||||
  return ()
 | 
			
		||||
 | 
			
		||||
bibString :: BibParser ()
 | 
			
		||||
bibString = try $ do
 | 
			
		||||
  char '@'
 | 
			
		||||
  cistring "string"
 | 
			
		||||
  spaces
 | 
			
		||||
  char '{'
 | 
			
		||||
  spaces
 | 
			
		||||
  f <- entField
 | 
			
		||||
  spaces
 | 
			
		||||
  char '}'
 | 
			
		||||
  updateState $ (f:)
 | 
			
		||||
  return ()
 | 
			
		||||
 | 
			
		||||
inBraces :: BibParser String
 | 
			
		||||
inBraces = try $ do
 | 
			
		||||
  char '{'
 | 
			
		||||
  res <- manyTill
 | 
			
		||||
         (  many1 (noneOf "{}\\")
 | 
			
		||||
        <|> (char '\\' >> (  (char '{' >> return "\\{")
 | 
			
		||||
                         <|> (char '}' >> return "\\}")
 | 
			
		||||
                         <|> return "\\"))
 | 
			
		||||
        <|> (braced <$> inBraces)
 | 
			
		||||
         ) (char '}')
 | 
			
		||||
  return $ concat res
 | 
			
		||||
 | 
			
		||||
braced :: String -> String
 | 
			
		||||
braced s = "{" ++ s ++ "}"
 | 
			
		||||
 | 
			
		||||
inQuotes :: BibParser String
 | 
			
		||||
inQuotes = do
 | 
			
		||||
  char '"'
 | 
			
		||||
  concat <$> manyTill (  many1 (noneOf "\"\\{")
 | 
			
		||||
                     <|> (char '\\' >> (\c -> ['\\',c]) <$> anyChar)
 | 
			
		||||
                     <|> braced <$> inBraces
 | 
			
		||||
                      ) (char '"')
 | 
			
		||||
 | 
			
		||||
fieldName :: BibParser String
 | 
			
		||||
fieldName = (map toLower) <$> many1 (letter <|> digit <|> oneOf "-_")
 | 
			
		||||
 | 
			
		||||
isBibtexKeyChar :: Char -> Bool
 | 
			
		||||
isBibtexKeyChar c = isAlphaNum c || c `elem` ".:;?!`'()/*@_+=-[]*"
 | 
			
		||||
 | 
			
		||||
bibItem :: BibParser Item
 | 
			
		||||
bibItem = do
 | 
			
		||||
  char '@'
 | 
			
		||||
  enttype <- map toLower <$> many1 letter
 | 
			
		||||
  spaces
 | 
			
		||||
  char '{'
 | 
			
		||||
  spaces
 | 
			
		||||
  entid <- many (satisfy isBibtexKeyChar)
 | 
			
		||||
  spaces
 | 
			
		||||
  char ','
 | 
			
		||||
  spaces
 | 
			
		||||
  entfields <- entField `sepEndBy` (char ',')
 | 
			
		||||
  spaces
 | 
			
		||||
  char '}'
 | 
			
		||||
  return $ Item entid enttype entfields
 | 
			
		||||
 | 
			
		||||
entField :: BibParser (String, String)
 | 
			
		||||
entField = try $ do
 | 
			
		||||
  spaces
 | 
			
		||||
  k <- fieldName
 | 
			
		||||
  spaces
 | 
			
		||||
  char '='
 | 
			
		||||
  spaces
 | 
			
		||||
  vs <- (expandString <|> inQuotes <|> inBraces <|> rawWord) `sepBy`
 | 
			
		||||
            (try $ spaces >> char '#' >> spaces)
 | 
			
		||||
  spaces
 | 
			
		||||
  return (k, concat vs)
 | 
			
		||||
 | 
			
		||||
rawWord :: BibParser String
 | 
			
		||||
rawWord = many1 alphaNum
 | 
			
		||||
 | 
			
		||||
expandString :: BibParser String
 | 
			
		||||
expandString = do
 | 
			
		||||
  k <- fieldName
 | 
			
		||||
  strs <- getState
 | 
			
		||||
  case lookup k strs of
 | 
			
		||||
       Just v  -> return v
 | 
			
		||||
       Nothing -> return k -- return raw key if not found
 | 
			
		||||
 | 
			
		||||
cistring :: String -> BibParser String
 | 
			
		||||
cistring [] = return []
 | 
			
		||||
cistring (c:cs) = do
 | 
			
		||||
  x <- (char (toLower c) <|> char (toUpper c))
 | 
			
		||||
  xs <- cistring cs
 | 
			
		||||
  return (x:xs)
 | 
			
		||||
 | 
			
		||||
resolveCrossRefs :: Bool -> [Item] -> [Item]
 | 
			
		||||
resolveCrossRefs isBibtex entries =
 | 
			
		||||
  map (resolveCrossRef isBibtex entries) entries
 | 
			
		||||
 | 
			
		||||
splitKeys :: String -> [String]
 | 
			
		||||
splitKeys = wordsBy (\c -> c == ' ' || c == ',')
 | 
			
		||||
 | 
			
		||||
getXrefFields :: Bool -> Item -> [Item] -> String -> [(String, String)]
 | 
			
		||||
getXrefFields isBibtex baseEntry entries keys = do
 | 
			
		||||
  let keys' = splitKeys keys
 | 
			
		||||
  xrefEntry <- [e | e <- entries, identifier e `elem` keys']
 | 
			
		||||
  (k, v) <- fields xrefEntry
 | 
			
		||||
  if k == "crossref" || k == "xdata"
 | 
			
		||||
     then do
 | 
			
		||||
       xs <- mapM (getXrefFields isBibtex baseEntry entries)
 | 
			
		||||
                   (splitKeys v)
 | 
			
		||||
       (x, y) <- xs
 | 
			
		||||
       guard $ isNothing $ lookup x $ fields xrefEntry
 | 
			
		||||
       return (x, y)
 | 
			
		||||
     else do
 | 
			
		||||
       k' <- if isBibtex
 | 
			
		||||
                then return k
 | 
			
		||||
                else transformKey (entryType xrefEntry) (entryType baseEntry) k
 | 
			
		||||
       guard $ isNothing $ lookup k' $ fields baseEntry
 | 
			
		||||
       return (k',v)
 | 
			
		||||
 | 
			
		||||
resolveCrossRef :: Bool -> [Item] -> Item -> Item
 | 
			
		||||
resolveCrossRef isBibtex entries entry = foldl go entry (fields entry)
 | 
			
		||||
  where go entry' (key, val) =
 | 
			
		||||
          if key == "crossref" || key == "xdata"
 | 
			
		||||
          then entry'{ fields = fields entry' ++
 | 
			
		||||
                                    getXrefFields isBibtex entry entries val }
 | 
			
		||||
          else entry'
 | 
			
		||||
 | 
			
		||||
-- transformKey source target key
 | 
			
		||||
-- derived from Appendix C of bibtex manual
 | 
			
		||||
transformKey :: String -> String -> String -> [String]
 | 
			
		||||
transformKey _ _ "ids"            = []
 | 
			
		||||
transformKey _ _ "crossref"       = []
 | 
			
		||||
transformKey _ _ "xref"           = []
 | 
			
		||||
transformKey _ _ "entryset"       = []
 | 
			
		||||
transformKey _ _ "entrysubtype"   = []
 | 
			
		||||
transformKey _ _ "execute"        = []
 | 
			
		||||
transformKey _ _ "label"          = []
 | 
			
		||||
transformKey _ _ "options"        = []
 | 
			
		||||
transformKey _ _ "presort"        = []
 | 
			
		||||
transformKey _ _ "related"        = []
 | 
			
		||||
transformKey _ _ "relatedoptions" = []
 | 
			
		||||
transformKey _ _ "relatedstring"  = []
 | 
			
		||||
transformKey _ _ "relatedtype"    = []
 | 
			
		||||
transformKey _ _ "shorthand"      = []
 | 
			
		||||
transformKey _ _ "shorthandintro" = []
 | 
			
		||||
transformKey _ _ "sortkey"        = []
 | 
			
		||||
transformKey x y "author"
 | 
			
		||||
  | x `elem` ["mvbook", "book"] &&
 | 
			
		||||
    y `elem` ["inbook", "bookinbook", "suppbook"] = ["bookauthor", "author"]
 | 
			
		||||
-- note: this next clause is not in the biblatex manual, but it makes
 | 
			
		||||
-- sense in the context of CSL conversion:
 | 
			
		||||
transformKey x y "author"
 | 
			
		||||
  | x == "mvbook" && y == "book" = ["bookauthor", "author"]
 | 
			
		||||
transformKey "mvbook" y z
 | 
			
		||||
  | y `elem` ["book", "inbook", "bookinbook", "suppbook"] = standardTrans z
 | 
			
		||||
transformKey x y z
 | 
			
		||||
  | x `elem` ["mvcollection", "mvreference"] &&
 | 
			
		||||
    y `elem` ["collection", "reference", "incollection", "inreference",
 | 
			
		||||
               "suppcollection"] = standardTrans z
 | 
			
		||||
transformKey "mvproceedings" y z
 | 
			
		||||
  | y `elem` ["proceedings", "inproceedings"] = standardTrans z
 | 
			
		||||
transformKey "book" y z
 | 
			
		||||
  | y `elem` ["inbook", "bookinbook", "suppbook"] = bookTrans z
 | 
			
		||||
transformKey x y z
 | 
			
		||||
  | x `elem` ["collection", "reference"] &&
 | 
			
		||||
    y `elem` ["incollection", "inreference", "suppcollection"] = bookTrans z
 | 
			
		||||
transformKey "proceedings" "inproceedings" z = bookTrans z
 | 
			
		||||
transformKey "periodical" y z
 | 
			
		||||
  | y `elem` ["article", "suppperiodical"] =
 | 
			
		||||
  case z of
 | 
			
		||||
       "title"          -> ["journaltitle"]
 | 
			
		||||
       "subtitle"       -> ["journalsubtitle"]
 | 
			
		||||
       "shorttitle"     -> []
 | 
			
		||||
       "sorttitle"      -> []
 | 
			
		||||
       "indextitle"     -> []
 | 
			
		||||
       "indexsorttitle" -> []
 | 
			
		||||
       _                -> [z]
 | 
			
		||||
transformKey _ _ x                = [x]
 | 
			
		||||
 | 
			
		||||
standardTrans :: String -> [String]
 | 
			
		||||
standardTrans z =
 | 
			
		||||
  case z of
 | 
			
		||||
       "title"          -> ["maintitle"]
 | 
			
		||||
       "subtitle"       -> ["mainsubtitle"]
 | 
			
		||||
       "titleaddon"     -> ["maintitleaddon"]
 | 
			
		||||
       "shorttitle"     -> []
 | 
			
		||||
       "sorttitle"      -> []
 | 
			
		||||
       "indextitle"     -> []
 | 
			
		||||
       "indexsorttitle" -> []
 | 
			
		||||
       _                -> [z]
 | 
			
		||||
 | 
			
		||||
bookTrans :: String -> [String]
 | 
			
		||||
bookTrans z =
 | 
			
		||||
  case z of
 | 
			
		||||
       "title"          -> ["booktitle"]
 | 
			
		||||
       "subtitle"       -> ["booksubtitle"]
 | 
			
		||||
       "titleaddon"     -> ["booktitleaddon"]
 | 
			
		||||
       "shorttitle"     -> []
 | 
			
		||||
       "sorttitle"      -> []
 | 
			
		||||
       "indextitle"     -> []
 | 
			
		||||
       "indexsorttitle" -> []
 | 
			
		||||
       _                -> [z]
 | 
			
		||||
 | 
			
		||||
data Lang = Lang String String  -- e.g. "en" "US"
 | 
			
		||||
 | 
			
		||||
langToLocale :: Lang -> String
 | 
			
		||||
langToLocale (Lang x y) = x ++ ('-':y)
 | 
			
		||||
 | 
			
		||||
resolveKey :: Lang -> Formatted -> Formatted
 | 
			
		||||
resolveKey lang (Formatted ils) = Formatted (Walk.walk go ils)
 | 
			
		||||
  where go (Str s) = Str $ resolveKey' lang s
 | 
			
		||||
        go x       = x
 | 
			
		||||
 | 
			
		||||
resolveKey' :: Lang -> String -> String
 | 
			
		||||
resolveKey' (Lang "en" "US") k =
 | 
			
		||||
  case map toLower k of
 | 
			
		||||
       "inpreparation" -> "in preparation"
 | 
			
		||||
       "submitted"     -> "submitted"
 | 
			
		||||
       "forthcoming"   -> "forthcoming"
 | 
			
		||||
       "inpress"       -> "in press"
 | 
			
		||||
       "prepublished"  -> "pre-published"
 | 
			
		||||
       "mathesis"      -> "Master’s thesis"
 | 
			
		||||
       "phdthesis"     -> "PhD thesis"
 | 
			
		||||
       "candthesis"    -> "Candidate thesis"
 | 
			
		||||
       "techreport"    -> "technical report"
 | 
			
		||||
       "resreport"     -> "research report"
 | 
			
		||||
       "software"      -> "computer software"
 | 
			
		||||
       "datacd"        -> "data CD"
 | 
			
		||||
       "audiocd"       -> "audio CD"
 | 
			
		||||
       "patent"        -> "patent"
 | 
			
		||||
       "patentde"      -> "German patent"
 | 
			
		||||
       "patenteu"      -> "European patent"
 | 
			
		||||
       "patentfr"      -> "French patent"
 | 
			
		||||
       "patentuk"      -> "British patent"
 | 
			
		||||
       "patentus"      -> "U.S. patent"
 | 
			
		||||
       "patreq"        -> "patent request"
 | 
			
		||||
       "patreqde"      -> "German patent request"
 | 
			
		||||
       "patreqeu"      -> "European patent request"
 | 
			
		||||
       "patreqfr"      -> "French patent request"
 | 
			
		||||
       "patrequk"      -> "British patent request"
 | 
			
		||||
       "patrequs"      -> "U.S. patent request"
 | 
			
		||||
       "countryde"     -> "Germany"
 | 
			
		||||
       "countryeu"     -> "European Union"
 | 
			
		||||
       "countryep"     -> "European Union"
 | 
			
		||||
       "countryfr"     -> "France"
 | 
			
		||||
       "countryuk"     -> "United Kingdom"
 | 
			
		||||
       "countryus"     -> "United States of America"
 | 
			
		||||
       "newseries"     -> "new series"
 | 
			
		||||
       "oldseries"     -> "old series"
 | 
			
		||||
       _               -> k
 | 
			
		||||
resolveKey' _ k = resolveKey' (Lang "en" "US") k
 | 
			
		||||
 | 
			
		||||
parseMonth :: String -> String
 | 
			
		||||
parseMonth "jan" = "1"
 | 
			
		||||
parseMonth "feb" = "2"
 | 
			
		||||
parseMonth "mar" = "3"
 | 
			
		||||
parseMonth "apr" = "4"
 | 
			
		||||
parseMonth "may" = "5"
 | 
			
		||||
parseMonth "jun" = "6"
 | 
			
		||||
parseMonth "jul" = "7"
 | 
			
		||||
parseMonth "aug" = "8"
 | 
			
		||||
parseMonth "sep" = "9"
 | 
			
		||||
parseMonth "oct" = "10"
 | 
			
		||||
parseMonth "nov" = "11"
 | 
			
		||||
parseMonth "dec" = "12"
 | 
			
		||||
parseMonth x     = x
 | 
			
		||||
							
								
								
									
										613
									
								
								bibs/header.bib
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										613
									
								
								bibs/header.bib
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,613 @@
 | 
			
		||||
%% To do:
 | 
			
		||||
%% insert first names wherever possible
 | 
			
		||||
%% regularize POPL spellings
 | 
			
		||||
%% get rid of ACM Press when it appears with POPL
 | 
			
		||||
%%    - find volume numbers of LNCS, etc.
 | 
			
		||||
%%    - fix up "to appear"
 | 
			
		||||
%%    - find journal versions of conference papers
 | 
			
		||||
%%    - find published versions of TRs
 | 
			
		||||
%%    - find spellings of first names
 | 
			
		||||
%%    - nuke crossreferences
 | 
			
		||||
 | 
			
		||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 | 
			
		||||
%%                                                                       %%
 | 
			
		||||
%%              My Bibliography (from bcp.bib)                           %%
 | 
			
		||||
%%                                                                       %%
 | 
			
		||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 | 
			
		||||
 | 
			
		||||
% Conventions:
 | 
			
		||||
%    * Common conferences (POPL, ICFP, etc.) are defined in strings, for
 | 
			
		||||
%      uniformity.  These strings include...
 | 
			
		||||
%         *not* "proceedings of the" or whatever (waste of ink, since
 | 
			
		||||
%            'symposium' or whatever is included)
 | 
			
		||||
%         the sponsoring organization (which means that it's not
 | 
			
		||||
%            necessary to list "ACM Press" as the publisher)
 | 
			
		||||
%         "international symposium" or whatever
 | 
			
		||||
%         *not* "twentieth" or whatever
 | 
			
		||||
%         the conference name spelled out in full
 | 
			
		||||
%         its common acronym, if any
 | 
			
		||||
%         the location of that year's meeting, if I know it
 | 
			
		||||
 | 
			
		||||
% Some special fields:
 | 
			
		||||
%     checked     Set to "yes" or a date if the citation has been
 | 
			
		||||
%                 checked against a physical copy of the document
 | 
			
		||||
%     fullauthor  Present in some cases where the author's name appears in
 | 
			
		||||
%                 abbreviated form on the actual document, but where
 | 
			
		||||
%                 I happened to know their full name.  The portion of
 | 
			
		||||
%                 the name that does not appear on the document is
 | 
			
		||||
%                 placed in square brackets, following standard
 | 
			
		||||
%                 practice in some publishing houses.
 | 
			
		||||
%     fulleditor  Similar.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 | 
			
		||||
%%%                       String Definitions                         %%%
 | 
			
		||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 | 
			
		||||
 | 
			
		||||
% Publishing houses
 | 
			
		||||
% %%%%%%%%%%%%%%%%%
 | 
			
		||||
@STRING{ap       = "Academic Press" }
 | 
			
		||||
@STRING{springer = {Springer-Verlag} }
 | 
			
		||||
@STRING{elsevier = "Elsevier" }
 | 
			
		||||
@STRING{entcs    = "Electronic Notes in Theoretical Computer Science" }
 | 
			
		||||
@STRING{lncs     = "Lecture Notes in Computer Science" }
 | 
			
		||||
@STRING{lnm      = "Lecture Notes in Mathematics" }
 | 
			
		||||
@STRING{gtm      = "Graduate Texts in Mathematics" }
 | 
			
		||||
@STRING{lfcs     = "Laboratory for Foundations of Computer Science,
 | 
			
		||||
                    University of Edinburgh" }
 | 
			
		||||
@STRING{mp       = "MIT Press" }
 | 
			
		||||
@STRING{mitpress = mp }
 | 
			
		||||
%
 | 
			
		||||
% Journals and magazines
 | 
			
		||||
% %%%%%%%%%%%%%%%%%%%%%%
 | 
			
		||||
@STRING{toplas   = "ACM Transactions on Programming Languages and Systems" }
 | 
			
		||||
@STRING{jlp      = {Journal of Logic Programming} }
 | 
			
		||||
@STRING{acmpress = "ACM Press" }
 | 
			
		||||
@STRING{cacm     = "Communications of the {ACM}" }
 | 
			
		||||
@STRING{jacm     = "Journal of the {ACM}" }
 | 
			
		||||
@STRING{tcs      = "Theoretical Computer Science" }
 | 
			
		||||
@STRING{jsl      = "Journal of Symbolic Logic" }
 | 
			
		||||
@STRING{bsl      = "Bulletin of Symbolic Logic" }
 | 
			
		||||
@STRING{jcss     = "Journal of Computer and System Sciences"}
 | 
			
		||||
@STRING{siamjc   = "SIAM Journal on Computing" }
 | 
			
		||||
@STRING{mscs     = "Mathematical Structures in Computer Science" }
 | 
			
		||||
@STRING{proc     = "Proceedings of the" }
 | 
			
		||||
@STRING{ic       = "Information and Computation" }
 | 
			
		||||
@STRING{iandcomp = {Information and Computation} }
 | 
			
		||||
@STRING{jfp      = "Journal of Functional Programming" }
 | 
			
		||||
@STRING{cup      = "Cambridge University Press" }
 | 
			
		||||
@STRING{mcgh     = "McGraw-Hill" }
 | 
			
		||||
@STRING{nh       = "North Holland" }
 | 
			
		||||
@STRING{sv       = "Springer-Verlag" }
 | 
			
		||||
@STRING{aw       = "Addison-Wesley" }
 | 
			
		||||
@STRING{ph       = "Prentice Hall" }
 | 
			
		||||
@STRING{tose     = "IEEE Transactions on Software Engineering" }
 | 
			
		||||
%@STRING{taoop   = "C[arl] A. Gunter and J[ohn] C. Mitchell, editors, {\em
 | 
			
		||||
%                  Theoretical Aspects of Object-Oriented Programming:
 | 
			
		||||
%                  Types, Semantics, and Language Design}, MIT Press, 1994" }
 | 
			
		||||
@STRING{taoop    = "C. A. Gunter and J. C. Mitchell, editors, {\em
 | 
			
		||||
                   Theoretical Aspects of Object-Oriented Programming:
 | 
			
		||||
                   Types, Semantics, and Language Design}, MIT Press, 1994" }
 | 
			
		||||
@STRING{tissec   = "ACM Transactions on Information and System Security"}
 | 
			
		||||
@STRING{sigecom  = "ACM {SIG}ecom {E}xchanges"}
 | 
			
		||||
@STRING{jet      = "Journal of Economic Theory"}
 | 
			
		||||
@STRING{geb      = "Games and Economic Behavior"}
 | 
			
		||||
@STRING{jufks    = "{I}nternational {J}ournal of {U}ncertainty, {F}uzziness and
 | 
			
		||||
  {K}nowledge-{B}ased {S}ystems"}
 | 
			
		||||
@STRING{toc      = "Theory of Computing"}
 | 
			
		||||
@STRING{jmlr     = "Journal of Machine Learning Research"}
 | 
			
		||||
@STRING{jpc      = "Journal of Privacy and Confidentiality"}
 | 
			
		||||
@STRING{mor      = "Mathematics of Operations Research"}
 | 
			
		||||
%
 | 
			
		||||
% Misc
 | 
			
		||||
% %%%%
 | 
			
		||||
@STRING{yes = "Yes" }
 | 
			
		||||
@STRING{no  = "No" }
 | 
			
		||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 | 
			
		||||
%                             Conferences                                %
 | 
			
		||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 | 
			
		||||
 | 
			
		||||
@STRING{pods        = "{ACM} {SIGACT--SIGMOD--SIGART} {S}ymposium on
 | 
			
		||||
                      {P}rinciples of {D}atabase {S}ystems (PODS)"}
 | 
			
		||||
 | 
			
		||||
@STRING{pods03      = pods # ", San Diego, California"}
 | 
			
		||||
@STRING{pods05      = pods # ", Baltimore, Maryland"}
 | 
			
		||||
@STRING{pods06      = pods # ", Chicago, Illinois" }
 | 
			
		||||
@STRING{pods07      = pods # ", Beijing, China" }
 | 
			
		||||
@STRING{pods10      = pods # ", Indianapolis, Indiana" }
 | 
			
		||||
 | 
			
		||||
@STRING{popl        = "{ACM} {SIGPLAN--SIGACT} {S}ymposium on {P}rinciples of
 | 
			
		||||
                      {P}rogramming {L}anguages ({POPL})" }
 | 
			
		||||
@STRING{poplpre92   = "{ACM} {S}ymposium on {P}rinciples of {P}rogramming
 | 
			
		||||
                      {L}anguages ({POPL})" }
 | 
			
		||||
 | 
			
		||||
@STRING{popl73      = poplpre92 # ", Boston, Massachusetts" }
 | 
			
		||||
@STRING{popl75      = poplpre92 # ", Palo Alto, California" }
 | 
			
		||||
@STRING{popl76      = poplpre92 # ", {A}tlanta, {G}eorgia" }
 | 
			
		||||
@STRING{popl77      = poplpre92 # ", Los Angeles, California" }
 | 
			
		||||
@STRING{popl78      = poplpre92 # ", Tucson, Arizona" }
 | 
			
		||||
@STRING{popl79      = poplpre92 # ", San Antonio, Texas" }
 | 
			
		||||
@STRING{popl80      = poplpre92 # ", Las Vegas, Nevada" }
 | 
			
		||||
@STRING{popl81      = poplpre92 # ", Williamsburg, Virginia" }
 | 
			
		||||
@STRING{popl82      = poplpre92 # ", Albuquerque, New Mexico" }
 | 
			
		||||
@STRING{popl83      = poplpre92 # ", Austin, Texas" }
 | 
			
		||||
@STRING{popl84      = poplpre92 # ", Salt Lake City, Utah" }
 | 
			
		||||
@STRING{popl85      = poplpre92 # ", New Orleans, Louisiana" }
 | 
			
		||||
@STRING{popl86      = poplpre92 # ", St.\ Petersburg Beach, Florida" }
 | 
			
		||||
@STRING{popl87      = poplpre92 # ", Munich, Germany" }
 | 
			
		||||
@STRING{popl88      = poplpre92 # ", San Diego, California" }
 | 
			
		||||
@STRING{popl89      = poplpre92 # ", Austin, Texas" }
 | 
			
		||||
@STRING{popl90      = poplpre92 # ", {S}an {F}rancisco, {C}alifornia" }
 | 
			
		||||
@STRING{popl91      = poplpre92 # ", Orlando, Florida" }
 | 
			
		||||
@STRING{popl92      = popl # ", Albuquerque, New Mexico" }
 | 
			
		||||
@STRING{popl93      = popl # ", Charleston, South Carolina" }
 | 
			
		||||
@STRING{popl94      = popl # ", {P}ortland, {O}regon" }
 | 
			
		||||
@STRING{popl95      = popl # ", San Francisco, California" }
 | 
			
		||||
@STRING{popl96      = popl # ", St.~Petersburg Beach, Florida" }
 | 
			
		||||
@STRING{popl97      = popl # ", Paris, France" }
 | 
			
		||||
@STRING{popl98      = popl # ", San Diego, California" }
 | 
			
		||||
@STRING{popl99      = popl # ", San Antonio, Texas" }
 | 
			
		||||
@STRING{popl00      = popl # ", Boston, Massachusetts" }
 | 
			
		||||
@STRING{popl01      = popl # ", London, England" }
 | 
			
		||||
@STRING{popl02      = popl # ", Portland, Oregon" }
 | 
			
		||||
@STRING{popl03      = popl # ", New Orleans, Louisiana" }
 | 
			
		||||
@STRING{popl04      = popl # ", Venice, Italy" }
 | 
			
		||||
@STRING{popl05      = popl # ", Long Beach, California" }
 | 
			
		||||
@STRING{popl08      = popl # ", San Francisco, California" }
 | 
			
		||||
@STRING{popl09      = popl # ", Savannah, Georgia" }
 | 
			
		||||
@STRING{popl10      = popl # ", Madrid, Spain" }
 | 
			
		||||
@STRING{popl11      = popl # ", Austin, Texas" }
 | 
			
		||||
@STRING{popl12      = popl # ", Philadelphia, Pennsylvania" }
 | 
			
		||||
@STRING{popl13      = popl # ", Rome, Italy" }
 | 
			
		||||
@STRING{popl14      = popl # ", San Diego, California" }
 | 
			
		||||
@STRING{popl15      = popl # ", Mumbai, India" }
 | 
			
		||||
% ----
 | 
			
		||||
@STRING{icfp        = "{ACM} {SIGPLAN} {I}nternational {C}onference on
 | 
			
		||||
                      {F}unctional {P}rogramming ({ICFP})" }
 | 
			
		||||
@STRING{icfp14      = icfp # ", Gothenburg, Sweden" }
 | 
			
		||||
@STRING{icfp13      = icfp # ", Boston, Massachusetts" }
 | 
			
		||||
@STRING{icfp11      = icfp # ", Tokyo, Japan" }
 | 
			
		||||
@STRING{icfp10      = icfp # ", Baltimore, Maryland" }
 | 
			
		||||
@STRING{icfp08      = icfp # ", Victoria, British Colombia" }
 | 
			
		||||
@STRING{icfp05      = icfp # ", Tallinn, Estonia" }
 | 
			
		||||
@STRING{icfp04      = icfp # ", Snowbird, Utah" }
 | 
			
		||||
@STRING{icfp03      = icfp # ", Uppsala, Sweden" }
 | 
			
		||||
@STRING{icfp02      = icfp # ", Pittsburgh, Pennsylvania" }
 | 
			
		||||
@STRING{icfp01      = icfp # ", Firenze, Italy" }
 | 
			
		||||
@STRING{icfp00      = icfp # ", Montr{\'e}al, Qu{\'e}bec" }
 | 
			
		||||
@STRING{icfp99      = icfp # ", Paris, France" }
 | 
			
		||||
@STRING{icfp98      = icfp # ", Baltimore, Maryland" }
 | 
			
		||||
@STRING{icfp97      = icfp # ", Amsterdam, The Netherlands" }
 | 
			
		||||
@STRING{icfp96      = icfp # ", Philadelphia, Pennsylvania" }
 | 
			
		||||
% ----
 | 
			
		||||
@STRING{oopsla      = "{ACM} {SIGPLAN} {C}onference on {O}bject {O}riented
 | 
			
		||||
                      {P}rogramming: {S}ystems, {L}anguages, and {A}pplications ({OOPSLA})" }
 | 
			
		||||
@STRING{oopslapre96 = "{C}onference on {O}bject {O}riented {P}rogramming:
 | 
			
		||||
                      {S}ystems, {L}anguages, and {A}pplications ({OOPSLA})" }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@STRING{dbpl        = {Database Programming Languages (DBPL)}}
 | 
			
		||||
@STRING{dbpl05      = dbpl}
 | 
			
		||||
 | 
			
		||||
@STRING{disc        = {International Symposium on Distributed Computing (DISC)}}
 | 
			
		||||
@STRING{disc06      = disc}
 | 
			
		||||
 | 
			
		||||
@STRING{ecoop       = {European Conference on Object-Oriented Programming (ECOOP)} }
 | 
			
		||||
@STRING{ecoop92     = ecoop}
 | 
			
		||||
@STRING{ecoop95     = ecoop}
 | 
			
		||||
@STRING{ecoop98     = ecoop}
 | 
			
		||||
@STRING{ecoop06     = ecoop # ", Nantes, France"}
 | 
			
		||||
 | 
			
		||||
@STRING{oopsla86    = oopslapre96 # ", Portland, Oregon" }
 | 
			
		||||
@STRING{oopsla89    = oopslapre96 # ", New Orleans, Louisiana"}
 | 
			
		||||
@STRING{oopsla90    = oopslapre96 # "/" # ecoop # ", Ottawa, Ontario" }
 | 
			
		||||
@STRING{oopsla98    = oopsla # ", Vancouver, British Columbia" }
 | 
			
		||||
@STRING{oopsla03    = oopsla # ", Anaheim, California" }
 | 
			
		||||
% ----
 | 
			
		||||
@STRING{lics        = "{IEEE} {S}ymposium on {L}ogic in {C}omputer {S}cience ({LICS})" }
 | 
			
		||||
@STRING{lics86      = lics # ", Cambridge, Massachusetts" }
 | 
			
		||||
@STRING{lics87      = lics # ", Ithaca, New York" }
 | 
			
		||||
@STRING{lics88      = lics # ", Edinburgh, Scotland" }
 | 
			
		||||
@STRING{lics89      = lics # ", Asilomar, California" }
 | 
			
		||||
@STRING{lics90      = lics # ", Philadelphia, Pennsylvania" }
 | 
			
		||||
@STRING{lics91      = lics # ", Amsterdam, The Netherlands" }
 | 
			
		||||
@STRING{lics92      = lics # ", Santa Cruz, California" }
 | 
			
		||||
@STRING{lics93      = lics # ", Montr{\'e}al, Qu{\'e}bec" }
 | 
			
		||||
@STRING{lics94      = lics # ", Paris, France" }
 | 
			
		||||
@STRING{lics95      = lics # ", San Diego, California" }
 | 
			
		||||
@STRING{lics96      = lics # ", New Brunswick, New Jersey" }
 | 
			
		||||
@STRING{lics97      = lics # ", Warsaw, Poland" }
 | 
			
		||||
@STRING{lics98      = lics # ", Indianapolis, Indiana" }
 | 
			
		||||
@STRING{lics99      = lics # ", Trento, Italy" }
 | 
			
		||||
@STRING{lics00      = lics # ", Santa Barbara, California" }
 | 
			
		||||
@STRING{lics01      = lics # ", Boston, Massachusetts" }
 | 
			
		||||
@STRING{lics02      = lics # ", Copenhagen, Denmark" }
 | 
			
		||||
@STRING{lics03      = lics # ", Ottawa, Ontario" }
 | 
			
		||||
@STRING{lics11      = lics # ", Toronto, Ontario" }
 | 
			
		||||
% ----
 | 
			
		||||
@STRING{pldi        = "{ACM SIGPLAN Conference on Programming Language Design
 | 
			
		||||
                      and Implementation (PLDI)}" }
 | 
			
		||||
@STRING{pldi88      = pldi # ", {A}tlanta, {G}eorgia" }
 | 
			
		||||
@STRING{pldi89      = pldi # ", Portland, Oregon" }
 | 
			
		||||
@STRING{pldi90      = pldi # ", White Plains, New York" }
 | 
			
		||||
@STRING{pldi91      = pldi # ", Toronto, Ontario" }
 | 
			
		||||
@STRING{pldi92      = pldi # ", San Francisco, California" }
 | 
			
		||||
@STRING{pldi93      = pldi # ", Albuquerque, New Mexico" }
 | 
			
		||||
@STRING{pldi94      = pldi # ", Orlando, Florida" }
 | 
			
		||||
@STRING{pldi95      = pldi # ", La Jolla, California" }
 | 
			
		||||
@STRING{pldi96      = pldi # ", Philadephia, Pennsylvania" }
 | 
			
		||||
@STRING{pldi97      = pldi # ", Las Vegas, Nevada" }
 | 
			
		||||
@STRING{pldi98      = pldi # ", Montr{\'e}al, Qu{\'e}bec" }
 | 
			
		||||
@STRING{pldi99      = pldi # ", {A}tlanta, {G}eorgia" }
 | 
			
		||||
@STRING{pldi00      = pldi # ", Vancouver, British Columbia" }
 | 
			
		||||
@STRING{pldi01      = pldi # ", Snowbird, Utah" }
 | 
			
		||||
@STRING{pldi02      = pldi # ", Berlin, Germany" }
 | 
			
		||||
@STRING{pldi03      = pldi # ", San Diego, California" }
 | 
			
		||||
@STRING{pldi08      = pldi # ", Tucson, Arizona" }
 | 
			
		||||
% ----
 | 
			
		||||
@STRING{lfp         = "ACM Symposium on Lisp and Functional Programming (LFP)" }
 | 
			
		||||
@STRING{lfp80       = lfp # ", Stanford, California" }
 | 
			
		||||
@STRING{lfp84       = lfp # ", Austin, Texas" }
 | 
			
		||||
@STRING{lfp86       = lfp # ", Cambridge, Massachusetts" }
 | 
			
		||||
@STRING{lfp88       = lfp # ", Snowbird, Utah" }
 | 
			
		||||
@STRING{lfp90       = lfp }
 | 
			
		||||
@STRING{lfp92       = lfp # ", San Francisco, California"}
 | 
			
		||||
@STRING{lfp94       = lfp # ", Orlando, Florida" }
 | 
			
		||||
 | 
			
		||||
% ----
 | 
			
		||||
@STRING{fpca        = "ACM Symposium on Functional Programming Languages and
 | 
			
		||||
                      Computer Architecture (FPCA)" }
 | 
			
		||||
@STRING{fpca87      = fpca # ", Portland, Oregon" }
 | 
			
		||||
@STRING{fpca89      = fpca # ", London, England" }
 | 
			
		||||
@STRING{fpca93      = fpca # ", Copenhagen, Denmark"}
 | 
			
		||||
@STRING{fpca95      = fpca # ", San Diego, California" }
 | 
			
		||||
 | 
			
		||||
% ----
 | 
			
		||||
@STRING{ec          = "{ACM} {SIGecom} {C}onference on {E}conomics and
 | 
			
		||||
                      {C}omputation (EC)" }
 | 
			
		||||
@STRING{ec13        = ec # ", Philadelphia, Pennsylvania"}
 | 
			
		||||
@STRING{ec14        = ec # ", Palo Alto, California"}
 | 
			
		||||
 | 
			
		||||
% ----
 | 
			
		||||
@STRING{ics         = "{S}ymposium on {I}nnovations in {C}ompuer {S}cience"}
 | 
			
		||||
@STRING{itcs        = "{ACM} {SIGACT} {I}nnovations in {T}heoretical {C}omputer
 | 
			
		||||
                      {S}cience (ITCS)"}
 | 
			
		||||
@STRING{itcs10      = ics # ", Beijing, China"}
 | 
			
		||||
@STRING{itcs12      = itcs # ", Cambridge, Massachusetts"}
 | 
			
		||||
@STRING{itcs13      = itcs # ", Berkeley, California"}
 | 
			
		||||
@STRING{itcs14      = itcs # ", Princeton, New Jersey"}
 | 
			
		||||
 | 
			
		||||
% ----
 | 
			
		||||
@STRING{stoc        = "{ACM} {SIGACT} {S}ymposium on {T}heory of {C}omputing (STOC)"}
 | 
			
		||||
@STRING{stoc87      = stoc # ", New York, New York"}
 | 
			
		||||
@STRING{stoc89      = stoc # ", Seattle, Washington"}
 | 
			
		||||
@STRING{stoc99      = stoc # ", Atlanta, Georgia"}
 | 
			
		||||
@STRING{stoc04      = stoc # ", Chicago, Illinois"}
 | 
			
		||||
@STRING{stoc05      = stoc # ", Baltimore, Maryland"}
 | 
			
		||||
@STRING{stoc06      = stoc # ", Seattle, Washington"}
 | 
			
		||||
@STRING{stoc07      = stoc # ", San Diego, California"}
 | 
			
		||||
@STRING{stoc08      = stoc # ", Victoria, British Colombia"}
 | 
			
		||||
@STRING{stoc09      = stoc # ", Bethesda, Maryland"}
 | 
			
		||||
@STRING{stoc10      = stoc # ", Cambridge, Massachusetts"}
 | 
			
		||||
@STRING{stoc11      = stoc # ", San Jose, California"}
 | 
			
		||||
@STRING{stoc12      = stoc # ", New York, New York"}
 | 
			
		||||
@STRING{stoc13      = stoc # ", Palo Alto, California"}
 | 
			
		||||
@STRING{stoc14      = stoc # ", New York, New York"}
 | 
			
		||||
 | 
			
		||||
% ----
 | 
			
		||||
@STRING{focs        = "{IEEE} {S}ymposium on {F}oundations of {C}omputer {S}cience (FOCS)"}
 | 
			
		||||
@STRING{focs82      = focs # ", Chicago, Illinois"}
 | 
			
		||||
@STRING{focs07      = focs # ", Providence, Rhode Island"}
 | 
			
		||||
@STRING{focs09      = focs # ", Atlanta, Georgia"}
 | 
			
		||||
@STRING{focs10      = focs # ", Las Vegas, Nevada"}
 | 
			
		||||
@STRING{focs12      = focs # ", New Brunswick, New Jersey"}
 | 
			
		||||
@STRING{focs13      = focs # ", Berkeley, California"}
 | 
			
		||||
@STRING{focs14      = focs # ", Philadelphia, Pennsylvania"}
 | 
			
		||||
 | 
			
		||||
% ----
 | 
			
		||||
@STRING{socg        = "{SIGACT} -- {SIGGRAPH} {S}ymposium on {C}omputational
 | 
			
		||||
  {G}eometry (SOCG)"}
 | 
			
		||||
@STRING{socg14      = socg # ", Kyoto, Japan"}
 | 
			
		||||
 | 
			
		||||
% ----
 | 
			
		||||
@STRING{soda        = "{ACM--SIAM} {S}ymposium on {D}iscrete {A}lgorithms (SODA)"}
 | 
			
		||||
@STRING{soda10      = soda # ", Austin, Texas"}
 | 
			
		||||
@STRING{soda12      = soda # ", Kyoto, Japan"}
 | 
			
		||||
@STRING{soda14      = soda # ", Portland, Oregon"}
 | 
			
		||||
 | 
			
		||||
% ----
 | 
			
		||||
@STRING{tcc         = "{IACR} {T}heory of {C}ryptography {C}onference (TCC)"}
 | 
			
		||||
@STRING{tcc06       = tcc # ", New York, New York"}
 | 
			
		||||
@STRING{tcc11       = tcc # ", Providence, Rhode Island"}
 | 
			
		||||
@STRING{tcc12       = tcc # ", Taormina, Italy"}
 | 
			
		||||
 | 
			
		||||
% ----
 | 
			
		||||
@STRING{kdd         = "{ACM} {SIGKDD} {C}onference on {K}nowledge {D}iscovery
 | 
			
		||||
  and {D}ata {M}ining (KDD)"}
 | 
			
		||||
@STRING{kdd02       = kdd # ", Edmonton, Alberta"}
 | 
			
		||||
@STRING{kdd08       = kdd # ", Las Vegas, Nevada"}
 | 
			
		||||
@STRING{kdd09       = kdd # ", Paris, France"}
 | 
			
		||||
@STRING{kdd10       = kdd # ", Washington, DC"}
 | 
			
		||||
 | 
			
		||||
% ----
 | 
			
		||||
@STRING{nips        = "{C}onference on {N}eural {I}nformation {P}rocessing
 | 
			
		||||
  {S}ystems (NIPS)"}
 | 
			
		||||
@STRING{nips08      = nips # ", Vancouver, British Colombia" }
 | 
			
		||||
@STRING{nips12      = nips # ", Lake Tahoe, California" }
 | 
			
		||||
@STRING{nips13      = nips # ", Lake Tahoe, California" }
 | 
			
		||||
 | 
			
		||||
% ----
 | 
			
		||||
@STRING{icml        = "{I}nternational {C}onference on {M}achine {L}earning (ICML)" }
 | 
			
		||||
@STRING{icml03      = icml # ", Washington, DC" }
 | 
			
		||||
@STRING{icml14      = icml # ", Beijing, China" }
 | 
			
		||||
 | 
			
		||||
% ----
 | 
			
		||||
@STRING{sp          = "{IEEE} {S}ymposium on {S}ecurity and {P}rivacy (S\&P)"}
 | 
			
		||||
@STRING{sp08        = sp # ", Oakland, California"}
 | 
			
		||||
@STRING{sp09        = sp # ", Oakland, California"}
 | 
			
		||||
@STRING{sp14        = sp # ", Oakland, California"}
 | 
			
		||||
 | 
			
		||||
@STRING{oakland     = sp}
 | 
			
		||||
 | 
			
		||||
% ----
 | 
			
		||||
@STRING{icde        = "{IEEE} {I}nternational {C}onference on {D}ata
 | 
			
		||||
  {E}ngineering (ICDE)"}
 | 
			
		||||
@STRING{icde06      = icde # ", Atlanta, Georgia" }
 | 
			
		||||
@STRING{icde07      = icde # ", Istanbul, Turkey" }
 | 
			
		||||
@STRING{icde13      = icde # ", Brisbane, Australia" }
 | 
			
		||||
 | 
			
		||||
% ----
 | 
			
		||||
@STRING{vldb        = "{I}nternational {C}onference on {V}ery {L}arge {D}ata
 | 
			
		||||
  {B}ases (VLDB)"}
 | 
			
		||||
@STRING{vldb12      = vldb # ", Istanbul, Turkey"}
 | 
			
		||||
 | 
			
		||||
% ----
 | 
			
		||||
@STRING{icc         = "{IEEE} {I}nternational {C}onference on {C}ommunications
 | 
			
		||||
  (ICC)"}
 | 
			
		||||
@STRING{icc11       = icc # ", Kyoto, Japan"}
 | 
			
		||||
 | 
			
		||||
% ----
 | 
			
		||||
@STRING{sigmod      = "{ACM} {SIGMOD} {I}nternational {C}onference on
 | 
			
		||||
  {M}anagement of {D}ata (SIGMOD)"}
 | 
			
		||||
@STRING{sigmod09    = sigmod # ", Providence, Rhode Island"}
 | 
			
		||||
@STRING{sigmod10    = sigmod # ", Indianapolis, Indiana"}
 | 
			
		||||
@STRING{sigmod14    = sigmod # ", Snowbird, Utah"}
 | 
			
		||||
 | 
			
		||||
% ----
 | 
			
		||||
@STRING{tamc        = "Theory and Applications of Models of Computation
 | 
			
		||||
  ({TAMC})" }
 | 
			
		||||
@STRING{tamc08      = tamc # ", Xi'an, China" }
 | 
			
		||||
 | 
			
		||||
% ----
 | 
			
		||||
@STRING{nsdi        = "{USENIX} {S}ymposium on {N}etworked {S}ystems {D}esign
 | 
			
		||||
  and {I}mplementation (NDSI)"}
 | 
			
		||||
@STRING{nsdi10      = nsdi # ", San Jose, California"}
 | 
			
		||||
@STRING{nsdi12      = nsdi # ", San Jose, California"}
 | 
			
		||||
 | 
			
		||||
% ----
 | 
			
		||||
@STRING{eucrypt     = "{IACR} {I}nternational {C}onference on the {T}heory and
 | 
			
		||||
  {A}pplications of {C}ryptographic {T}echniques (EUROCRYPT)"}
 | 
			
		||||
@STRING{eucrypt06   = eucrypt # ", Saint Petersburg, Russia"}
 | 
			
		||||
@STRING{eucrypt13   = eucrypt # ", Athens, Greece"}
 | 
			
		||||
 | 
			
		||||
% ----
 | 
			
		||||
@STRING{vmcai    = "{I}nternational {C}onference on {V}erification, {M}odel
 | 
			
		||||
                    {C}hecking, and {A}bstract {I}nterpretation ({VMCAI})" }
 | 
			
		||||
@STRING{vmcai07  = vmcai # ", Nice, France" }
 | 
			
		||||
@STRING{vmcai13  = vmcai # ", Rome, Italy" }
 | 
			
		||||
 | 
			
		||||
% ----
 | 
			
		||||
@STRING{csf      = "{IEEE} {C}omputer {S}ecurity {F}oundations {S}ymposium" }
 | 
			
		||||
@STRING{csf08    = csf # ", Pittsburgh, Pennsylvania" }
 | 
			
		||||
@STRING{csf13    = csf # ", New Orleans, Louisiana" }
 | 
			
		||||
@STRING{csf14    = csf # ", Vienna, Austria" }
 | 
			
		||||
 | 
			
		||||
% ----
 | 
			
		||||
@STRING{pepmpre12 = "{S}ymposium on {P}artial {E}valuation and
 | 
			
		||||
                    {S}emantics-{B}ased {P}rogram {M}anipulation ({PEPM})" }
 | 
			
		||||
@STRING{pepm91    = pepmpre12 # ", New Haven, Connecticut" }
 | 
			
		||||
 | 
			
		||||
% ----
 | 
			
		||||
% workshops with informal proceedings only
 | 
			
		||||
% ----
 | 
			
		||||
@STRING{informal =  "{, informal proceedings}"}
 | 
			
		||||
@STRING{fool     =  {International Workshop on Foundations of Object-Oriented
 | 
			
		||||
                    Languages (FOOL)} # informal }
 | 
			
		||||
@STRING{haskellw =  {ACM Haskell Workshop} # informal }
 | 
			
		||||
@STRING{mlw      =  {ACM SIGPLAN Workshop on ML} # informal } 
 | 
			
		||||
@STRING{space    =  {Workshop on Semantics, Program Analysis and Computing
 | 
			
		||||
                    Environments for Memory Management (SPACE)} # informal }
 | 
			
		||||
@STRING{tpa      =  {Workshop on Types for Program Analysis (TPA)} # informal }
 | 
			
		||||
@STRING{fopara   =  {International Workshop on Foundational and Practical
 | 
			
		||||
                    Aspects of Resource Analysis (FOPARA)} # informal}
 | 
			
		||||
 | 
			
		||||
% ----
 | 
			
		||||
% meetings with proceedings:
 | 
			
		||||
% ---
 | 
			
		||||
@STRING{aplas     = {Asian Symposium on Programming Languages and Systems (APLAS)} }
 | 
			
		||||
@STRING{asplos    = {International Conference on Architectural Support for
 | 
			
		||||
                    Programming Langauages and Operating Systems (ASPLOS)} }
 | 
			
		||||
@STRING{cav       = {International Conference on Computer Aided Verification (CAV)} }
 | 
			
		||||
@STRING{ceemas    = {International Central and Eastern European Conference on
 | 
			
		||||
                    Multi-Agent Systems} }
 | 
			
		||||
@STRING{colt      = {{C}onference on {C}omputational {L}earning {T}heory
 | 
			
		||||
                    ({CoLT})}}
 | 
			
		||||
@STRING{concur    = {International Conference on Concurrency Theory (CONCUR)} }
 | 
			
		||||
@STRING{csl       = {International Workshop on Computer Science Logic (CSL)} }
 | 
			
		||||
@STRING{csfw      = {IEEE Computer Security Foundations Workshop (CSFW) } }
 | 
			
		||||
@STRING{ecoop     = {European Conference on Object-Oriented Programming (ECOOP)} }
 | 
			
		||||
@STRING{esop      = {European Symposium on Programming (ESOP)} }
 | 
			
		||||
@STRING{fesca     = {International Workshop on Formal Engineering approaches to
 | 
			
		||||
                    Software Components and Architectures (FESCA)} }
 | 
			
		||||
@STRING{flops     = {International Symposium on Functional and Logic Programming
 | 
			
		||||
                    (FLOPS)} }
 | 
			
		||||
@STRING{fmco      = {International Symposia on Formal Methods for Components and
 | 
			
		||||
                    Objects (FMCO)} }
 | 
			
		||||
@STRING{fsttcs    = {Foundations of Software Technology and Theoretical Computer
 | 
			
		||||
                    Science (FSTTCS)} }
 | 
			
		||||
@STRING{hoots     = {Workshop on Higher Order Operational Techniques in
 | 
			
		||||
                    Semantics (HOOTS)} }
 | 
			
		||||
@STRING{icalp     = {International Colloquium on Automata, Languages and
 | 
			
		||||
                    Programming (ICALP)} }
 | 
			
		||||
@STRING{icse      = {International Conference on Software Engineering (ICSE)} }
 | 
			
		||||
@STRING{lfcompsci = {International Symposium on Logical Foundations of Computer
 | 
			
		||||
                    Science (LFCS)} }
 | 
			
		||||
@STRING{mfps      = {Workshop on the Mathematical Foundations of Programming
 | 
			
		||||
                    Semantics (MFPS)} }
 | 
			
		||||
@STRING{osdi      = {USENIX Symposium on Operating Systems Design and
 | 
			
		||||
                    Implementation (OSDI)} }
 | 
			
		||||
@STRING{paste     = {ACM SIGPLAN--SIGSOFT Workshop on Program Analysis for
 | 
			
		||||
                    Software Tools and Engineering (PASTE)} }
 | 
			
		||||
@STRING{ppdp      = {ACM SIGPLAN International Conference on Principles and
 | 
			
		||||
                    Practice of Declarative Programming (PPDP)} }
 | 
			
		||||
@STRING{randapx   = {Workshop on Approximation Algorithms for Combinatorial
 | 
			
		||||
                    Optimization Problems (APPROX) and Workshop on Randomization
 | 
			
		||||
                    and Computation (RANDOM) } }
 | 
			
		||||
@STRING{rta       = {International Conference on Rewriting Techniques and
 | 
			
		||||
                    Applications (RTA)} }
 | 
			
		||||
@STRING{sas       = {International Symposium on Static Analysis (SAS) } }
 | 
			
		||||
@STRING{sosp      = {ACM Symposium on Operating Systems Principles (SOSP)} }
 | 
			
		||||
@STRING{tacs      = {International Symposium on Theoretical Aspects of Computer
 | 
			
		||||
                    Software (TACS)} }
 | 
			
		||||
@STRING{tacas     = {International Conference on Tools and Algorithms for the
 | 
			
		||||
                    Construction and Analysis of Systems (TACAS)} }
 | 
			
		||||
@STRING{tapsoft   = {Theory and Practice of Software Development (TAPSOFT)} }
 | 
			
		||||
@STRING{tic       = {ACM SIGPLAN Workshop on Types in Compilation ({TIC})} }
 | 
			
		||||
@STRING{tlca      = {International Conference on Typed Lambda Calculi and
 | 
			
		||||
                    Applications (TLCA)} }
 | 
			
		||||
@STRING{tldi      = {ACM SIGPLAN Workshop on Types in Language Design and
 | 
			
		||||
                    Implementation (TLDI)} }
 | 
			
		||||
@STRING{tphol     = {International Conference on Theorem Proving in Higher Order
 | 
			
		||||
                    Logics } }
 | 
			
		||||
@STRING{types     = {International Workshop on Types for Proofs and Programs
 | 
			
		||||
                    (TYPES)} }
 | 
			
		||||
@STRING{webdb     = {International Workshop on the Web and Databases (WebDB)} }
 | 
			
		||||
@STRING{wosn      = {Workshop on Online Social Networks (WOSN)} }
 | 
			
		||||
@STRING{xsym      = {Database and XML Technologies: International XML Database
 | 
			
		||||
                    Symposium (XSym)} }
 | 
			
		||||
@STRING{wsa       = {Workshop on Static Analysis (WSA) } }
 | 
			
		||||
% ----
 | 
			
		||||
% Specific meetings, with locations:
 | 
			
		||||
% ---
 | 
			
		||||
@STRING{aplas03     = aplas # ", Beijing, China" }
 | 
			
		||||
@STRING{aplas05     = aplas # ", Tsukuba, Japan" }
 | 
			
		||||
@STRING{aplas10     = aplas # ", Shanghai, China" }
 | 
			
		||||
%----
 | 
			
		||||
@STRING{asplos14    = aplas # ", Salt Lake City, Utah" }
 | 
			
		||||
%----
 | 
			
		||||
@STRING{ceemas07    = ceemas # ", Leipzig, Germany" }
 | 
			
		||||
% ---
 | 
			
		||||
@STRING{colt95      = colt # ", Santa Cruz, California" }
 | 
			
		||||
@STRING{colt96      = colt # ", Desenzano sul Garda, Italy" }
 | 
			
		||||
@STRING{colt13      = colt # ", Princeton, New Jersey" }
 | 
			
		||||
% ---
 | 
			
		||||
@STRING{concur07    = concur # ", Lisbon, Portugal" }
 | 
			
		||||
% ---
 | 
			
		||||
@STRING{cav96       = cav # ", New Brunswick, New Jersey" }
 | 
			
		||||
@STRING{cav02       = cav # ", Copenhagen, Denmark" }
 | 
			
		||||
@STRING{cav07       = cav # ", Berlin, Germany" }
 | 
			
		||||
% ---
 | 
			
		||||
@STRING{csl94       = csl # ", Kazimierz, Poland" }
 | 
			
		||||
@STRING{csl97       = csl # ", Aarhus, Denmark" }
 | 
			
		||||
@STRING{csl01       = csl # ", Paris, France" }
 | 
			
		||||
% ---
 | 
			
		||||
@STRING{csfw02      = csfw # ", Cape Breton, Nova Scotia" }
 | 
			
		||||
% ---
 | 
			
		||||
@STRING{ecoop90     = oopsla # "/" # ecoop # ", Ottawa, Ontario" }
 | 
			
		||||
@STRING{ecoop97     = ecoop # ", Jyv{\"a}skyl{\"a}, Finland" }
 | 
			
		||||
@STRING{ecoop99     = ecoop # ", Lisbon, Portugal" }
 | 
			
		||||
@STRING{ecoop00     = ecoop # ", Sophia Antipolis and Cannes, France" }
 | 
			
		||||
@STRING{ecoop02     = ecoop # ", Malaga, Spain" }
 | 
			
		||||
@STRING{ecoop03     = ecoop # ", Darmstadt, Germany" }
 | 
			
		||||
@STRING{ecoop04     = ecoop # ", Oslo, Norway" }
 | 
			
		||||
% ---
 | 
			
		||||
@STRING{esop88      = esop # ", Nancy, France" }
 | 
			
		||||
@STRING{esop92      = esop # ", Rennes, France" }
 | 
			
		||||
@STRING{esop94      = esop # ", Edinburgh, Scotland" }
 | 
			
		||||
@STRING{esop00      = esop # ", Berlin, Germany" }
 | 
			
		||||
@STRING{esop01      = esop # ", Genova, Italy" }
 | 
			
		||||
@STRING{esop02      = esop # ", Grenoble, France" }
 | 
			
		||||
@STRING{esop09      = esop # ", York, England" }
 | 
			
		||||
@STRING{esop11      = esop # ", Saarbr{\"u}cken, Germany" }
 | 
			
		||||
@STRING{esop14      = esop # ", Grenoble, France" }
 | 
			
		||||
% ---
 | 
			
		||||
@STRING{fesca14     = fesca # ", Grenoble, France" }
 | 
			
		||||
% ---
 | 
			
		||||
@STRING{flops04     = flops # ", Nara, Japan" }
 | 
			
		||||
% ---
 | 
			
		||||
@STRING{fmco06      = fmco # ", Amsterdam, The Netherlands" }
 | 
			
		||||
% ---
 | 
			
		||||
@STRING{fsttcs93    = fsttcs # ", Bombay, India" }
 | 
			
		||||
@STRING{fsttcs04    = fsttcs # ", Chennai, India" }
 | 
			
		||||
% ---
 | 
			
		||||
@STRING{hoots00     = hoots # ", Montr{\'e}al, Qu{\'e}bec" }
 | 
			
		||||
% ---
 | 
			
		||||
@STRING{icalp98     = icalp # ", Aalborg, Denmark" }
 | 
			
		||||
@STRING{icalp06     = icalp # ", Venice, Italy" }
 | 
			
		||||
@STRING{icalp12     = icalp # ", Warwick, England" }
 | 
			
		||||
@STRING{icalp13     = icalp # ", Riga, Latvia" }
 | 
			
		||||
@STRING{icalp14     = icalp # ", Copenhagen, Denmark" }
 | 
			
		||||
% ---
 | 
			
		||||
@STRING{icse14      = icse # ", Hyderabad, India" }
 | 
			
		||||
% ---
 | 
			
		||||
@STRING{lfcompsci94 = lfcompsci # ", St. Petersburg, Russia" }
 | 
			
		||||
% ---
 | 
			
		||||
@STRING{mfps89      = mfps # ", New Orleans, Louisiana" }
 | 
			
		||||
@STRING{mfps95      = mfps # ", New Orleans, Louisiana" }
 | 
			
		||||
@STRING{mfps01      = mfps # ", Aarhus, Denmark" }
 | 
			
		||||
@STRING{mfps14      = mfps # ", Ithaca, New York" }
 | 
			
		||||
% ---
 | 
			
		||||
@STRING{osdi96      = osdi # ", Seattle, Washington" }
 | 
			
		||||
@STRING{osdi00      = osdi # ", San Diego, California" }
 | 
			
		||||
@STRING{osdi12      = osdi # ", Hollywood, California" }
 | 
			
		||||
% ---
 | 
			
		||||
@STRING{paste01     = paste # ", Snowbird, Utah" }
 | 
			
		||||
% ---
 | 
			
		||||
@STRING{ppdp99      = ppdp # ", Paris France" }
 | 
			
		||||
@STRING{ppdp01      = ppdp # ", Firenze, Italy" }
 | 
			
		||||
@STRING{ppdp12      = ppdp # ", Leuven, Belgium" }
 | 
			
		||||
% ---
 | 
			
		||||
@STRING{rta03       = rta # ", Valencia, Spain" }
 | 
			
		||||
% ---
 | 
			
		||||
@STRING{randapx13   = randapx # ", Berkeley, California" }
 | 
			
		||||
% ---
 | 
			
		||||
@STRING{sas95       = sas # ", Glasgow, Scotland" }
 | 
			
		||||
@STRING{sas96       = sas # ", Aachen, Germany" }
 | 
			
		||||
@STRING{sas97       = sas # ", Paris, France" }
 | 
			
		||||
@STRING{sas01       = sas # ", Paris, France" }
 | 
			
		||||
% ---
 | 
			
		||||
@STRING{sosp93      = sosp # ", Asheville, North Carolina" }
 | 
			
		||||
% ---
 | 
			
		||||
@STRING{tacs94      = tacs # ", Sendai, Japan" }
 | 
			
		||||
@STRING{tacs01      = tacs # ", Sendai, Japan" }
 | 
			
		||||
% ---
 | 
			
		||||
@STRING{tacas06     = tacas # ", Vienna, Austria" }
 | 
			
		||||
% ---
 | 
			
		||||
@STRING{tapsoft93   = tapsoft # ", Orsay, France" }
 | 
			
		||||
@STRING{tapsoft97   = tapsoft # ", Lille, France" }
 | 
			
		||||
% ---
 | 
			
		||||
@STRING{tic97       = tic # ", Amsterdam, The Netherlands"}
 | 
			
		||||
@STRING{tic98       = tic # ", Kyoto, Japan"}
 | 
			
		||||
@STRING{tic00       = tic # ", Montr{\'e}al, Qu{\'e}bec" }
 | 
			
		||||
% ---
 | 
			
		||||
@STRING{tlca93      = tlca # ", Utrecht, The Netherlands" }
 | 
			
		||||
@STRING{tlca97      = tlca # ", Nancy, France" }
 | 
			
		||||
@STRING{tlca99      = tlca # ", L'Aquila, Italy" }
 | 
			
		||||
@STRING{tlca01      = tlca # ", Krak{\'{o}}ow, Poland" }
 | 
			
		||||
@STRING{tlca03      = tlca # ", Valencia, Spain" }
 | 
			
		||||
% ---
 | 
			
		||||
@STRING{tldi03      = tldi # ", New Orleans, Louisiana"}
 | 
			
		||||
% ---
 | 
			
		||||
@STRING{tphol09     = tphol # ", Munich, Germany" }
 | 
			
		||||
% ---
 | 
			
		||||
@STRING{types93     = types # ", Nijmegen, The Netherlands" }
 | 
			
		||||
@STRING{types98     = types # ", Kloster Irsee, Germany" }
 | 
			
		||||
% ---
 | 
			
		||||
@STRING{wosn12      = wosn # ", Helsinki, Finland" }
 | 
			
		||||
 | 
			
		||||
% ---
 | 
			
		||||
@STRING{wsa93       = wsa # ", Padova, Italy" }
 | 
			
		||||
 | 
			
		||||
% hack to alphabetize funny names (from the LaTeX Companion)
 | 
			
		||||
@preamble{"\newcommand{\SortNoop}[1]{}"}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										2033
									
								
								bibs/myrefs.bib
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2033
									
								
								bibs/myrefs.bib
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										11
									
								
								content/body.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								content/body.md
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,11 @@
 | 
			
		||||
# About Me # {#card}
 | 
			
		||||
...
 | 
			
		||||
 | 
			
		||||
# Research Interests # {#card}
 | 
			
		||||
...
 | 
			
		||||
 | 
			
		||||
# Publications # {#card}
 | 
			
		||||
 | 
			
		||||
\$draft\$
 | 
			
		||||
 | 
			
		||||
\$confs\$
 | 
			
		||||
							
								
								
									
										3
									
								
								content/contacts.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								content/contacts.md
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,3 @@
 | 
			
		||||
# Contacts # {#contacts}
 | 
			
		||||
* Office: GRW 561
 | 
			
		||||
* Email: justin@justinh.su
 | 
			
		||||
							
								
								
									
										99
									
								
								css/style.scss
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										99
									
								
								css/style.scss
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,99 @@
 | 
			
		||||
@import "compass/css3";
 | 
			
		||||
@import "compass/css3/border-radius";
 | 
			
		||||
@import "compass/typography/vertical_rhythm";
 | 
			
		||||
 | 
			
		||||
$base-font-size: 16px;
 | 
			
		||||
$base-line-height: 24px;
 | 
			
		||||
 | 
			
		||||
@include establish-baseline;
 | 
			
		||||
 | 
			
		||||
.container {
 | 
			
		||||
  @include display-flex;
 | 
			
		||||
  @include flex-direction(column);  
 | 
			
		||||
  @include flex-wrap(nowrap);
 | 
			
		||||
  @include justify-content(flex-start);
 | 
			
		||||
  @include align-items(center);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.container > * {
 | 
			
		||||
  width: 50%;
 | 
			
		||||
  padding: rhythm(0.5);
 | 
			
		||||
  margin: rhythm(0.5);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.container h1 {
 | 
			
		||||
  @include adjust-font-size-to(3em);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.container h2 {
 | 
			
		||||
  @include adjust-font-size-to(2em);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.container p {
 | 
			
		||||
  @include adjust-font-size-to(1em);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.header {
 | 
			
		||||
  background: purple;
 | 
			
		||||
  @include border-radius(5px, 5px);
 | 
			
		||||
  // @include border-radius(10px 25px, 15px 30px);
 | 
			
		||||
  // @include border-radius(1px 3px 5px 7px, 2px 4px 6px 8px);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.header h1 {
 | 
			
		||||
  @include adjust-font-size-to(5em);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.topbox {
 | 
			
		||||
  @include display-flex;
 | 
			
		||||
  @include flex-direction(row);  
 | 
			
		||||
  @include flex-wrap(nowrap);
 | 
			
		||||
  @include justify-content(space-around);
 | 
			
		||||
  @include align-items(stretch);
 | 
			
		||||
  background: blue;
 | 
			
		||||
 | 
			
		||||
  max-height: 30em;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.topbox > * {
 | 
			
		||||
  padding: rhythm(0.5);
 | 
			
		||||
  margin: rhythm(0.5);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@media all and (max-width: 700px) {
 | 
			
		||||
  .topbox {
 | 
			
		||||
    @include flex-direction(column);  
 | 
			
		||||
    background: yellow;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .topbox > * {
 | 
			
		||||
    padding: rhythm(0.5);
 | 
			
		||||
    margin: rhythm(0.5);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.picture {
 | 
			
		||||
  @include flex(1 1 10em);
 | 
			
		||||
  background: green;
 | 
			
		||||
  @include order(2);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.contact {
 | 
			
		||||
  @include flex(1 1 10em);
 | 
			
		||||
  background: red;
 | 
			
		||||
  @include order(3);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@media all and (max-width: 700px) {
 | 
			
		||||
  .picture {
 | 
			
		||||
    @include order(3);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .contact {
 | 
			
		||||
    @include order(2);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#card {
 | 
			
		||||
  background: blue;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										11
									
								
								index.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								index.html
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,11 @@
 | 
			
		||||
<div class="topbox">
 | 
			
		||||
  <div class="picture">
 | 
			
		||||
    picture
 | 
			
		||||
  </div>
 | 
			
		||||
 | 
			
		||||
  <div class="contact">
 | 
			
		||||
    $contacts$
 | 
			
		||||
  </div>
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
$content$
 | 
			
		||||
							
								
								
									
										116
									
								
								site.hs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										116
									
								
								site.hs
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,116 @@
 | 
			
		||||
--------------------------------------------------------------------------------
 | 
			
		||||
{-# LANGUAGE OverloadedStrings #-}
 | 
			
		||||
import           Data.Monoid
 | 
			
		||||
import           Control.Monad (forM_)
 | 
			
		||||
import           Hakyll
 | 
			
		||||
import           HakyllBibTex
 | 
			
		||||
import           System.Process
 | 
			
		||||
import           Text.Pandoc.Options
 | 
			
		||||
 | 
			
		||||
compass :: Compiler (Item String)
 | 
			
		||||
compass =
 | 
			
		||||
    getResourceString >>=
 | 
			
		||||
    withItemBody (unixFilter "sass" ["-s", "--scss", "--compass"])
 | 
			
		||||
 | 
			
		||||
b2bflags :: [String]
 | 
			
		||||
b2bflags = [ "--expand"
 | 
			
		||||
           , "-c"
 | 
			
		||||
           , "jh:'yes'"
 | 
			
		||||
           , "-s"
 | 
			
		||||
           , "$date"
 | 
			
		||||
           , "-r"
 | 
			
		||||
           ]
 | 
			
		||||
 | 
			
		||||
bibHeaders :: [(String, String, [String])]
 | 
			
		||||
bibHeaders = [ ("confs", "Conference Publications",
 | 
			
		||||
               ["-c", "$type='INPROCEEDINGS'" ] )
 | 
			
		||||
             , ("draft", "Drafts"                 ,
 | 
			
		||||
               [ "-c", "$type='UNPUBLISHED'"  ] )
 | 
			
		||||
             ]
 | 
			
		||||
 | 
			
		||||
bibSources :: [String]
 | 
			
		||||
bibSources = [ "bibs/header.bib"
 | 
			
		||||
             , "bibs/myrefs.bib"
 | 
			
		||||
             ]
 | 
			
		||||
 | 
			
		||||
bib2bib :: [String]
 | 
			
		||||
           -> Compiler (Item String)
 | 
			
		||||
bib2bib flags = (unsafeCompiler $
 | 
			
		||||
    readProcess "bib2bib" (bibSources ++ b2bflags ++ flags) "")
 | 
			
		||||
    >>= makeItem
 | 
			
		||||
 | 
			
		||||
bib2bibParse :: Item String
 | 
			
		||||
                -> Compiler [Item BibEntry]
 | 
			
		||||
bib2bibParse file =
 | 
			
		||||
    let (BibFile bf) = parseBibFile (itemBody file) in
 | 
			
		||||
    sequence $ fmap makeItem bf
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
--------------------------------------------------------------------------------
 | 
			
		||||
main :: IO ()
 | 
			
		||||
main = hakyll $ do
 | 
			
		||||
    match "files/**" $ do
 | 
			
		||||
        route   idRoute
 | 
			
		||||
        compile copyFileCompiler
 | 
			
		||||
 | 
			
		||||
    match "css/*.scss" $ do
 | 
			
		||||
        route $ setExtension "css"
 | 
			
		||||
        compile $ compass
 | 
			
		||||
 | 
			
		||||
    forM_ bibHeaders $ \(nick, title, flags) ->
 | 
			
		||||
        create [fromCapture "bibs/*.html" nick] $ do
 | 
			
		||||
            route idRoute
 | 
			
		||||
            compile $
 | 
			
		||||
                let itemCtx = mconcat
 | 
			
		||||
                        [ bibEntryContext
 | 
			
		||||
                        , functionField "doclink"
 | 
			
		||||
                          (\(i:_) _ -> return $ "files/docs/" ++ i ++ "paper.pdf")
 | 
			
		||||
                        , functionField "slidelink"
 | 
			
		||||
                          (\(i:_) _ -> return $ "files/slides/" ++ i ++ "slides.pdf")
 | 
			
		||||
                        , functionField "posterlink"
 | 
			
		||||
                          (\(i:_) _ -> return $ "files/poster/" ++ i ++ "poster.pdf")
 | 
			
		||||
                        ]
 | 
			
		||||
                    biblioCtx = mconcat
 | 
			
		||||
                        [ field "bibtitle" (\_ -> return $ title)
 | 
			
		||||
                        , field "bibitems" $ return . itemBody
 | 
			
		||||
                        ] in do
 | 
			
		||||
                        bibTpl <- loadBody "templates/bibitemtpl.html"
 | 
			
		||||
                        (bib2bib flags)
 | 
			
		||||
                            >>= bib2bibParse
 | 
			
		||||
                            >>= applyTemplateList bibTpl itemCtx
 | 
			
		||||
                            >>= makeItem
 | 
			
		||||
                            >>= loadAndApplyTemplate
 | 
			
		||||
                                    "templates/biblisttpl.html" biblioCtx
 | 
			
		||||
                            >>= relativizeUrls
 | 
			
		||||
 | 
			
		||||
    match "content/body.md" $ do
 | 
			
		||||
        route $ setExtension "html"
 | 
			
		||||
        compile $ do
 | 
			
		||||
            let makeBibCtx (nick, _, _) =
 | 
			
		||||
                    field nick (\_ -> loadBody $ fromFilePath ("bibs/" ++ nick ++ ".html"))
 | 
			
		||||
                secDiv = defaultHakyllWriterOptions { writerSectionDivs = True }
 | 
			
		||||
                bodyCtx = mconcat $ map makeBibCtx bibHeaders in do
 | 
			
		||||
                    pandocCompilerWith defaultHakyllReaderOptions secDiv
 | 
			
		||||
                        >>= applyAsTemplate bodyCtx
 | 
			
		||||
                        >>= relativizeUrls
 | 
			
		||||
 | 
			
		||||
    match "content/*.md" $ do
 | 
			
		||||
        route $ setExtension "html"
 | 
			
		||||
        compile $ do
 | 
			
		||||
            pandocCompiler >>= relativizeUrls
 | 
			
		||||
 | 
			
		||||
    match "index.html" $ do
 | 
			
		||||
        route idRoute
 | 
			
		||||
        compile $ do
 | 
			
		||||
            contacts <- loadBody "content/contacts.md"
 | 
			
		||||
            content <- loadBody "content/body.md"
 | 
			
		||||
            let indexContext = mconcat
 | 
			
		||||
                  [ field "contacts" $ \_ -> return contacts
 | 
			
		||||
                  , field "content"  $ \_ -> return content
 | 
			
		||||
                  ]
 | 
			
		||||
            getResourceBody
 | 
			
		||||
              >>= applyAsTemplate indexContext
 | 
			
		||||
              >>= loadAndApplyTemplate "templates/main.html" defaultContext
 | 
			
		||||
              >>= relativizeUrls
 | 
			
		||||
 | 
			
		||||
    match "templates/*" $ compile templateCompiler
 | 
			
		||||
							
								
								
									
										21
									
								
								templates/bibitemtpl.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								templates/bibitemtpl.html
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,21 @@
 | 
			
		||||
<li>
 | 
			
		||||
<!-- $identifier$ -->
 | 
			
		||||
$title$ </br>
 | 
			
		||||
$author$ </br>
 | 
			
		||||
$if(eprint)$
 | 
			
		||||
[<a href="$eprint$">Arxiv</a>]
 | 
			
		||||
$endif$
 | 
			
		||||
$if(docs)$
 | 
			
		||||
[<a href="$doclink(identifier)$">Paper</a>]
 | 
			
		||||
$endif$
 | 
			
		||||
$if(slides)$
 | 
			
		||||
[<a href="$slidelink(identifier)$">Slides</a>]
 | 
			
		||||
$endif$
 | 
			
		||||
$if(poster)$
 | 
			
		||||
[<a href="$posterlink(identifier)$">Poster</a>]
 | 
			
		||||
$endif$
 | 
			
		||||
<br>
 | 
			
		||||
$if(notes)$
 | 
			
		||||
$notes$ <br>
 | 
			
		||||
$endif$
 | 
			
		||||
</li>
 | 
			
		||||
							
								
								
									
										4
									
								
								templates/biblisttpl.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								templates/biblisttpl.html
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,4 @@
 | 
			
		||||
<h2> $bibtitle$ </h2>
 | 
			
		||||
<ul>
 | 
			
		||||
$bibitems$
 | 
			
		||||
</ul>
 | 
			
		||||
							
								
								
									
										18
									
								
								templates/main.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								templates/main.html
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,18 @@
 | 
			
		||||
<meta charset=utf-8>
 | 
			
		||||
<html>
 | 
			
		||||
<head>
 | 
			
		||||
<title> My Site </title>
 | 
			
		||||
<link rel="stylesheet" type="text/css" href="css/style.css">
 | 
			
		||||
</head>
 | 
			
		||||
<body>
 | 
			
		||||
 | 
			
		||||
<div class="container">
 | 
			
		||||
  <div class="header">
 | 
			
		||||
    <h1> Justin Hsu </h1>
 | 
			
		||||
  </div>
 | 
			
		||||
 | 
			
		||||
  $body$
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
</body>
 | 
			
		||||
</html>
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user