Generates a simple link button in the Concrete style.

@param string $text The text of the button
@param string $href
@param string $buttonAlign
@param string $innerClass
@param array $args Extra args passed to the link

@return string
431616
public function button($text, $href, $buttonAlign = 'right', $innerClass = null, $args = [])
    {
        if ('right' == $buttonAlign) {
            $innerClass .= ' pull-right';
        } elseif ('left' == $buttonAlign) {
            $innerClass .= ' pull-left';
        }
        $argsstr = '';
        foreach ($args as $k => $v) {
            $argsstr .= $k . '="' . $v . '" ';
        }

        return '<a href="' . $href . '" class="btn btn-default ' . $innerClass . '" ' . $argsstr . '>' . $text . '</a>';
    }
224726
public function parseFile( $fileName, $innerPath )
	{
		$content		= FS_File_Reader::load( $fileName );
		$lines			= explode( "\n", $content );
		$openBlocks		= array();
		$fileBlock		= NULL;
		$openClass		= FALSE;
		$file			= $this->fileData;
		$file['name']	= substr( str_replace( "\\", "/", $fileName ), strlen( $innerPath ) );
		$file['uri']	= str_replace( "\\", "/", $fileName );
	
		$level	= 0;
		$class	= NULL;
		do
		{
			$line	= trim( array_shift( $lines ) );
			$line	= Alg_Text_Unicoder::convertToUnicode( $line );
			if( preg_match( "@^(<\?(php)?)|((php)?\?>)$@", $line ) )
				continue;
			
			if( preg_match( '@{ ?}?$@', $line ) )
				$level++;
			else if( preg_match( '@}$@', $line ) )
				$level--;

			if( $line == "/**" )
			{
				$list	= array();
				do
				{
					$line	= trim( array_shift( $lines ) );
					$list[]	= $line;
				}
				while( !preg_match( "@^\*?\*/$@", $line ) );
				$openBlocks[]	= $this->parseDocBlock( $list );
				if( !$fileBlock )
				{
					$fileBlock	= array_shift( $openBlocks );
					$this->overwriteCodeDataWithDocData( $file, $fileBlock );
				}
			}
			if( !$openClass )
			{
				if( preg_match( $this->regexClass, $line, $matches ) )
				{
					$class	= $this->classData;
					$slice	= array_slice( $matches, -1 );
					if( trim( array_pop( $slice ) ) == "{" )
					{
						array_pop( $matches );
						$level++;
					}
					$slice	= array_slice( $matches, -1 );
					while( !trim( array_pop( $slice ) ) )
						array_pop( $matches );
					$class	= $this->parseClass( $class, $matches, $openBlocks );
					if( $openBlocks )
						$this->overwriteCodeDataWithDocData( $class, array_pop( $openBlocks ) );
					$openClass	= TRUE;
				}
				else if( preg_match( $this->regexMethod, $line, $matches ) )
				{
					$function	= $this->parseMethod( $matches, $openBlocks );
					if( isset( $matches[8] ) )
						$level++;
					unset( $function['access'] );
					$file['functions'][$function['name']]	= $function;
				}
			}
			else
			{
				if( $level == 0 && $openClass )
					$openClass	= FALSE;
				if( preg_match( $this->regexMethod, $line, $matches ) )
				{
					$method	= $this->parseMethod( $matches, $openBlocks );
					$class['methods'][$method['name']]	= $method;
					if( isset( $matches[8] ) )
						$level++;
				}
				else if( preg_match( $this->regexDocVariable, $line, $matches ) )
				{
					$this->varBlocks[$matches[2]]	= array(
						'type'			=> $matches[1],
						'name'			=> $matches[2],
						'description'	=> trim( $matches[4] ),
					);
				}
				else if( preg_match( $this->regexVariable, $line, $matches ) )
				{
					$name	= $matches[3];
					$default	= NULL;
					if( isset( $matches[4] ) )
						$default	= preg_replace( "@;$@", "", $matches[5] );
					$data	= array(
						'access'		=> $matches[1] == "var" ? "public" : $matches[1],
						'static'		=> (bool) trim( $matches[2] ),
						'type'			=> NULL,
						'name'			=> $name,
						'description'	=> NULL,
						'default'		=> $default,
					);
					if( isset( $this->varBlocks[$name] ) )
						$data	= array_merge( $data, $this->varBlocks[$name] );
					$class['members'][$name]	= $data;
				}
			}
		}
		while( $lines );
		$data	= array(
			'file'		=> $file,
			'class'		=> $class,
			'source'	=> $content,
		);
		return $data;
	}
847150
private function template(array $links, string $linksClassName = null, bool $center = false): string
    {
        $linksClassName = $linksClassName ?? $this->linksClassName;
        if ($center) {
            $linksClassName .= ' center';
        }

        $tpl  = "<ul class=\"{$linksClassName}\">";
        foreach ($links as $link) {
            $tpl .= "<li>{$link}</li>";
        }
        $tpl .= "</ul>";

        return $tpl;
    }
166218
function(text, link) {
    var href = link.url
      , external = link.external || this.options.externalLinks;
    if (!href)
      href = link.toString();
    this.out.push("<a href=\"" + href + "\"");
    if (link.title)
      this.out.push(" title=\"" + escapeHtml(link.title) + "\"");
    if (external)
      this.out.push(" target=\"_blank\"");
    // Link text is rendered separately with the same options
    var html = new InlineCompiler(this.options).toHtml(text);
    this.out.push(">" + html + "</a>");
  }
973988
public function button($text='OK', $color='#3085d6', $style=true, $class=null)
    {
        $this->params['confirmButtonText'] = $text;
        $this->params['confirmButtonColor'] = $color;
        $this->params['buttonsStyling'] = (bool)$style;
        if (!is_null($class)) {
            $this->params['confirmButtonClass'] = $class;
        }

        return $this;
    }
484084
protected function linkify($text, $urls = true, $emails = true, array $options = array())
    {
        if (false === $urls && false === $emails) {
            // nothing to do...
            return $text;
        }

        $options = array_merge_recursive($this->options, $options);

        $attr = '';

        if (true === array_key_exists('attr', $options)) {
            foreach ($options['attr'] as $key => $value) {
                if (true === is_array($value)) {
                    $value = array_pop($value);
                }
                $attr .= sprintf(' %s="%s"', $key, $value);
            }
        }

        $options['attr'] = $attr;

        $ignoreTags = array('head', 'link', 'a', 'script', 'style', 'code', 'pre', 'select', 'textarea', 'button');

        $chunks = preg_split('/(<.+?>)/is', $text, 0, PREG_SPLIT_DELIM_CAPTURE);

        $openTag = null;

        for ($i = 0; $i < count($chunks); $i++) {
            if ($i % 2 === 0) { // even numbers are text
                // Only process this chunk if there are no unclosed $ignoreTags
                if (null === $openTag) {
                    if (true === $urls) {
                        $chunks[$i] = $this->linkifyUrls($chunks[$i], $options);
                    }
                    if (true === $emails) {
                        $chunks[$i] = $this->linkifyEmails($chunks[$i], $options);
                    }
                }
            } else { // odd numbers are tags
                // Only process this tag if there are no unclosed $ignoreTags
                if (null === $openTag) {
                    // Check whether this tag is contained in $ignoreTags and is not self-closing
                    if (preg_match("`<(" . implode('|', $ignoreTags) . ").*(?<!/)>$`is", $chunks[$i], $matches)) {
                        $openTag = $matches[1];
                    }
                } else {
                    // Otherwise, check whether this is the closing tag for $openTag.
                    if (preg_match('`</\s*' . $openTag . '>`i', $chunks[$i], $matches)) {
                        $openTag = null;
                    }
                }
            }
        }

        $text = implode($chunks);

        return $text;
    }
1118916
public static function linkify($text)
    {
        $text = preg_replace('/&apos;/', '&#39;', $text); // IE does not handle &apos; entity!
        $section_html_pattern = '%# Rev:20100913_0900 github.com/jmrware/LinkifyURL
            # Section text into HTML <A> tags  and everything else.
              (                             # $1: Everything not HTML <A> tag.
                [^<]+(?:(?!<a\b)<[^<]*)*     # non A tag stuff starting with non-"<".
              |      (?:(?!<a\b)<[^<]*)+     # non A tag stuff starting with "<".
             )                              # End $1.
            | (                             # $2: HTML <A...>...</A> tag.
                <a\b[^>]*>                   # <A...> opening tag.
                [^<]*(?:(?!</a\b)<[^<]*)*    # A tag contents.
                </a\s*>                      # </A> closing tag.
             )                              # End $2:
            %ix';

        return preg_replace_callback($section_html_pattern, array(__CLASS__, 'linkifyCallback'), $text);
    }
886666
public function HTML_QuickForm_link($elementName=null, $elementLabel=null, $href=null, $text=null, $attributes=null) {
        debugging('Use of class name as constructor is deprecated', DEBUG_DEVELOPER);
        self::__construct($elementName, $elementLabel, $href, $text, $attributes);
    }
857766
public function auto_link( $string, $nofollow = true ) {
		return $this->fetch_link( $string, function ( $match ) use ( $nofollow ) {
			return sprintf( '<a href="%2$s"%1$s>%2$s</a>',
				( $nofollow ? ' target="_blank" rel="nofollow,external"' : '' ), $match[0] );
		} );
	}
917154
protected function linkifyOther($protocol, $text, array &$links, $attr, $mode)
    {
        if (strpos($protocol, ':') === false) {
            $protocol .= in_array($protocol, ['ftp', 'tftp', 'ssh', 'scp']) ? '://' : ':';
        }
        
        $regexp = $mode != 'all'
            ? '~' . preg_quote($protocol, '~') . '([^\s<>]+)(?<![\.,:;\?!\'"\|])~i'
            : '~([^\s<>]+)(?<![\.,:])~i';
        
        return preg_replace_callback($regexp, function ($match) use ($protocol, &$links, $attr) {
            return '<' . array_push($links, '<a' . $attr . ' href="' . $protocol . $match[1] . '">' . $match[1]
                . '</a>') . '>';
        }, $text);
    }
513860
public function makeDoubleSidedLinkString(
        $class1String,
        $class2String,
        $bidirectional,
        $isInverse,
        $class2SideName,
        $class2Count,
        $class1SideName,
        $class1Count
    ) {
        return $class1String . $this->getLeftArrow($isInverse, $bidirectional)
        . ($class2SideName ? $class2SideName . ' ' . $this->getCountSide($class2Count) : '')
        . '-' . $class1SideName . ' ' . $this->getCountSide($class1Count)
        . $this->getRightArrow($isInverse, $bidirectional) . $class2String;
    }
875258
static function laraform($href, $text=null) {
        $el = new ElementButtonLinkTwbs(
            null, null, [
                'tagName' => 'a'
            ]
        );
        return $el->setContent($text)
            ->addClass('btn')
            ->setHref($href);
    }
1304928
public static function button(
        $name = NULL,
        $class = NULL,
        $id = NULL,
        $text = NULL,
        $attrs = array()
    )
    {
        $ret = NULL;
        
           if($name)
            $attrs['name'] = $name;
        
        $ret .= self::tag('button', $text, $class, $id, $attrs);
        return $ret;
    }
237969
public function generateLabel(string $text) {
        $args = [
            'w'             => $this->width,
            'h'             => 0,
            'txt'           => $text,
            'border'        => 0,
            'align'         => 'L',
            'fill'          => 0,
            'ln'            => 0,
            'x'             => '',
            'y'             => '',
            'reseth'        => true,
            'stretch'       => 0,
            'ishtml'        => false,
            'autopadding'   => false,
            'maxh'          => $this->height,
        ];

        if (true === $args['ishtml']) {
            $this->writeHTMLCell($args['w'], $args['h'],
                $args['x'], $args['y'],
                $args['txt'], $args['border'],
                $args['ln'], $args['fill'],
                $args['reseth'], $args['align'],
                $args['autopadding']
            );
        } else {
            $this->multiCell($args['w'], $args['h'],
                $args['txt'], $args['border'],
                $args['align'], $args['fill'],
                $args['ln'], $args['x'],
                $args['y'], $args['reseth'],
                $args['stretch'], $args['ishtml'],
                $args['autopadding'], $args['maxh']
            );
        }
    }
470886
function link(href, title, text) {

  var reLabelFirst = /^(.*?)\s*\?([^?\s]*)\?(\*?)(X?)(H?)$/;
  var reLabelAfter = /^\?([^?\s]*)\?(\*?)(X?)(H?)\s*(.*)$/;

  var m = text.match(reLabelFirst);
  if (m) return renderInput(m[1], m[2], m[3], m[4], m[5], href, title, true);

  m = text.match(reLabelAfter);
  if (m) return renderInput(m[5], m[1], m[2], m[3], m[4], href, title, false);

  return fallback.link.call(this, href, title, text);
}
765314
protected function doAutoLinks($text)
    {
        if(!$this->features['auto_mailto'])
        {
            return preg_replace_callback('{<((https?|ftp|dict):[^\'">\s]+)>}i',
            array(&$this, '_doAutoLinks_url_callback'), $text);
        }

        return parent::doAutoLinks($text);
    }
785555
protected function link($page, $text, $class)
        {
            $query = '?page=' . $page . $this->appendage($this->appends);

            return '<li' . Html::attributes(array('class' => $class)).'><a href="#" onclick="paginationGoPage(' . $page . '); return false;">' . Inflector::utf8($text) . '</a></li>';
        }