Skip to content

Commit

Permalink
Can now highlight cpp files that are loaded with LOAD whose contents …
Browse files Browse the repository at this point in the history
…appear in modals
  • Loading branch information
Gareth Aneurin Tribello authored and Gareth Aneurin Tribello committed Dec 5, 2024
1 parent 3029702 commit b0aa406
Show file tree
Hide file tree
Showing 4 changed files with 144 additions and 1 deletion.
5 changes: 5 additions & 0 deletions PlumedToHTML/PlumedFormatter.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
from pygments import highlight
from pygments.formatter import Formatter
from pygments.token import Text, Comment, Literal, Keyword, Name, Generic, String
from pygments.lexers.c_cpp import CppLexer
from pygments.formatters import HtmlFormatter
from requests.exceptions import InvalidJSONError
import html
import json
Expand Down Expand Up @@ -141,6 +144,8 @@ def format(self, tokensource, outfile):
iff = open( inp, 'r' )
fcontent = iff.read()
iff.close()
# This does syntax highlighting on cpp files
if inp.split(".")[-1]=="cpp" : fcontent = highlight( fcontent, CppLexer(), HtmlFormatter() )
nfiles = nfiles + 1
if len(self.auxinputlines)>0 :
shortversion, allines = "", fcontent.splitlines()
Expand Down
2 changes: 1 addition & 1 deletion setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

setuptools.setup(
name='PlumedToHTML',
version='0.98',
version='0.99',
author="Gareth Tribello",
author_email="[email protected]",
description="A package for creating pretified HTML for PLUMED files",
Expand Down
131 changes: 131 additions & 0 deletions tdata/Distance2.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,131 @@
/* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Copyright (c) 2013 The plumed team
(see the PEOPLE file at the root of the distribution for a list of names)
See http://www.plumed-code.org for more information.
This file is part of plumed, version 2.0.
plumed is free software: you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
plumed is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License
along with plumed. If not, see <http://www.gnu.org/licenses/>.
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
#include "colvar/Colvar.h"
#include "core/ActionRegister.h"

#include <string>
#include <cmath>

using namespace std;

namespace PLMD{

class Distance : public colvar::Colvar {
bool components;
bool pbc;

public:
static void registerKeywords( Keywords& keys );
Distance(const ActionOptions&);
// active methods:
virtual void calculate();
};

PLUMED_REGISTER_ACTION(Distance,"DISTANCE2")

void Distance::registerKeywords( Keywords& keys ){
Colvar::registerKeywords( keys );
keys.add("atoms","ATOMS","the pair of atom that we are calculating the distance between");
keys.addFlag("COMPONENTS",false,"calculate the x, y and z components of the distance separately and store them as label.x, label.y and label.z");
keys.setValueDescription("scalar","the distance between the input atoms");
}

Distance::Distance(const ActionOptions&ao):
PLUMED_COLVAR_INIT(ao),
components(false),
pbc(true)
{
vector<AtomNumber> atoms;
parseAtomList("ATOMS",atoms);
if(atoms.size()!=2)
error("Number of specified atoms should be 2");
parseFlag("COMPONENTS",components);
bool nopbc=!pbc;
parseFlag("NOPBC",nopbc);
pbc=!nopbc;
checkRead();

log.printf(" between atoms %d %d\n",atoms[0].serial(),atoms[1].serial());
if(pbc) log.printf(" using periodic boundary conditions\n");
else log.printf(" without periodic boundary conditions\n");


if(!components){

addValueWithDerivatives(); setNotPeriodic();

} else{
addComponentWithDerivatives("x"); componentIsNotPeriodic("x");
addComponentWithDerivatives("y"); componentIsNotPeriodic("y");
addComponentWithDerivatives("z"); componentIsNotPeriodic("z");
}

requestAtoms(atoms);
}


// calculator
void Distance::calculate(){

Vector distance;
if(pbc){
distance=pbcDistance(getPosition(0),getPosition(1));
} else {
distance=delta(getPosition(0),getPosition(1));
}
const double value=distance.modulo();
const double invvalue=1.0/value;

if(!components){

setAtomsDerivatives(0,-invvalue*distance);
setAtomsDerivatives(1,invvalue*distance);
setBoxDerivatives (-invvalue*Tensor(distance,distance));
setValue (value);

}else{

Value* valuex=getPntrToComponent("x");
Value* valuey=getPntrToComponent("y");
Value* valuez=getPntrToComponent("z");

setAtomsDerivatives (valuex,0,Vector(-1,0,0));
setAtomsDerivatives (valuex,1,Vector(+1,0,0));
setBoxDerivatives (valuex,Tensor(distance,Vector(-1,0,0)));
valuex->set(distance[0]);

setAtomsDerivatives (valuey,0,Vector(0,-1,0));
setAtomsDerivatives (valuey,1,Vector(0,+1,0));
setBoxDerivatives (valuey,Tensor(distance,Vector(0,-1,0)));
valuey->set(distance[1]);

setAtomsDerivatives (valuez,0,Vector(0,0,-1));
setAtomsDerivatives (valuez,1,Vector(0,0,+1));
setBoxDerivatives (valuez,Tensor(distance,Vector(0,0,-1)));
valuez->set(distance[2]);
};
}

}



7 changes: 7 additions & 0 deletions tdata/tests.json
Original file line number Diff line number Diff line change
Expand Up @@ -178,6 +178,13 @@
"actions": ["DUMPATOMS"],
"tooltips": ["DUMPATOMS", "ATOMS", "@ndx:", "FILE"],
"badges": ["fail"]
},
{
"input": "#SETTINGS INPUTFILES=tdata/Distance2.cpp \nLOAD FILE=tdata/Distance2.cpp",
"index": 27,
"actions": ["LOAD"],
"tooltips": ["LOAD", "FILE", "tdata/Distance2.cpp"],
"badges": ["fail", "load"]
}
]
}

0 comments on commit b0aa406

Please sign in to comment.